Ed5 commited on
Commit
265c9da
·
verified ·
1 Parent(s): 7bbd968

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +21 -19
app.py CHANGED
@@ -18,11 +18,10 @@ class KDChecker:
18
  self.known_docs = ["Э3", "В4", "ПЭ3", "ВО", "ТЭ5", "СБ", "С5", "ОЛ", "Э1", "Э4", "Э7", "Д3", "Э6"]
19
 
20
  def load_excel_db(self, excel_path):
21
- # --- ЛОГГЕР ---
22
  log = [f"[{datetime.now().strftime('%H:%M:%S')}] Старт функции загрузки"]
23
 
24
  if excel_path is None:
25
- return "Файл не передан (excel_path is None)", gr.Dropdown(choices=[], value=None)
26
 
27
  log.append(f"Путь к файлу: {excel_path}")
28
 
@@ -31,13 +30,13 @@ class KDChecker:
31
  log.append(f"Размер файла: {size} байт")
32
  except Exception as e:
33
  log.append(f"Ошибка доступа к файлу: {e}")
34
- return "\n".join(log), gr.Dropdown(choices=[], value=None)
35
 
36
  try:
37
  import openpyxl
38
  log.append("Библиотека openpyxl найдена.")
39
  except ImportError:
40
- return "ОШИБКА: Библиотека openpyxl не установлена на сервере!", gr.Dropdown(choices=[], value=None)
41
 
42
  all_data = []
43
  sheets_log = []
@@ -52,7 +51,6 @@ class KDChecker:
52
  cab_col_idx = -1
53
  rem_col_idx = -1
54
 
55
- # Поиск заголовков
56
  for i in range(min(20, len(df_raw))):
57
  row_values = [str(x).lower().strip() for x in df_raw.iloc[i].values]
58
  c_idx = -1
@@ -68,7 +66,6 @@ class KDChecker:
68
 
69
  if header_row_index != -1:
70
  df = pd.read_excel(excel_path, sheet_name=sheet_name, header=header_row_index, engine='openpyxl')
71
- # Проверяем, что индексы колонок существуют в этом df
72
  if cab_col_idx < len(df.columns) and rem_col_idx < len(df.columns):
73
  df_subset = df.iloc[:, [cab_col_idx, rem_col_idx]]
74
  df_subset.columns = ["Cabinet", "Remark"]
@@ -89,7 +86,7 @@ class KDChecker:
89
 
90
  if not all_data:
91
  log.append("Не найдены данные ни на одном листе.")
92
- return "\n".join(log), gr.Dropdown(choices=[], value=None)
93
 
94
  self.excel_db = pd.concat(all_data, ignore_index=True)
95
  self.cabinet_list = sorted(self.excel_db["Cabinet"].unique().tolist())
@@ -97,14 +94,14 @@ class KDChecker:
97
  log.append("Успешно объединили данные.")
98
  msg = f"✅ База знаний загружена успешно!\nВсего записей: {len(self.excel_db)}\nОбработаны листы: {', '.join(sheets_log)}"
99
 
100
- # Возвращаем новый Dropdown с обновленным списком
101
- return msg, gr.Dropdown(choices=self.cabinet_list, value=None, interactive=True)
102
 
103
  except Exception as e:
104
  log.append(f"КРИТИЧЕСКАЯ ОШИБКА: {str(e)}")
105
  import traceback
106
  log.append(traceback.format_exc())
107
- return "\n".join(log), gr.Dropdown(choices=[], value=None)
108
 
109
  def extract_text(self, pdf_path):
110
  try:
@@ -323,8 +320,8 @@ class KDChecker:
323
  paragraphs = task.split('\n')
324
 
325
  if y < 80:
326
- c.showPage();
327
- y = height - 50;
328
  c.setFont(font_name, 10)
329
 
330
  c.rect(50, y - 10, 10, 10)
@@ -342,13 +339,14 @@ class KDChecker:
342
  if len(cur_line) + len(w) + 1 <= max_len:
343
  cur_line += w + " "
344
  else:
345
- lines.append(cur_line); cur_line = w + " "
 
346
  lines.append(cur_line)
347
 
348
  for l in lines:
349
  if text_start_y < 40:
350
- c.showPage();
351
- text_start_y = height - 50;
352
  c.setFont(font_name, 10)
353
  try:
354
  c.drawString(65, text_start_y, l.strip())
@@ -380,10 +378,14 @@ def create_app():
380
 
381
  db_in = gr.File(label="Загрузить Excel (.xlsx)", type="filepath")
382
 
383
- # Инициализируем с choices=None, чтобы Gradio не ругался на пустой список при старте
384
- manual_cab = gr.Dropdown(label="Или выберите шкаф-аналог вручную", choices=None, interactive=True)
 
 
 
 
385
 
386
- db_out = gr.Textbox(label="Статус загрузки", lines=8, max_lines=30)
387
 
388
  db_in.upload(checker.load_excel_db, inputs=[db_in], outputs=[db_out, manual_cab])
389
 
@@ -393,7 +395,7 @@ def create_app():
393
  btn = gr.Button("Сформировать чек-лист", variant="primary")
394
 
395
  with gr.Row():
396
- res_txt = gr.Textbox(label="Результат проверки", lines=8, max_lines=30)
397
  res_pdf = gr.File(label="Скачать PDF чек-лист")
398
 
399
  btn.click(checker.check_files, inputs=[files_in, manual_cab], outputs=[res_txt, res_pdf])
 
18
  self.known_docs = ["Э3", "В4", "ПЭ3", "ВО", "ТЭ5", "СБ", "С5", "ОЛ", "Э1", "Э4", "Э7", "Д3", "Э6"]
19
 
20
  def load_excel_db(self, excel_path):
 
21
  log = [f"[{datetime.now().strftime('%H:%M:%S')}] Старт функции загрузки"]
22
 
23
  if excel_path is None:
24
+ return "Файл не передан (excel_path is None)", gr.update(choices=[], value=None)
25
 
26
  log.append(f"Путь к файлу: {excel_path}")
27
 
 
30
  log.append(f"Размер файла: {size} байт")
31
  except Exception as e:
32
  log.append(f"Ошибка доступа к файлу: {e}")
33
+ return "\n".join(log), gr.update(choices=[], value=None)
34
 
35
  try:
36
  import openpyxl
37
  log.append("Библиотека openpyxl найдена.")
38
  except ImportError:
39
+ return "ОШИБКА: Библиотека openpyxl не установлена на сервере!", gr.update(choices=[], value=None)
40
 
41
  all_data = []
42
  sheets_log = []
 
51
  cab_col_idx = -1
52
  rem_col_idx = -1
53
 
 
54
  for i in range(min(20, len(df_raw))):
55
  row_values = [str(x).lower().strip() for x in df_raw.iloc[i].values]
56
  c_idx = -1
 
66
 
67
  if header_row_index != -1:
68
  df = pd.read_excel(excel_path, sheet_name=sheet_name, header=header_row_index, engine='openpyxl')
 
69
  if cab_col_idx < len(df.columns) and rem_col_idx < len(df.columns):
70
  df_subset = df.iloc[:, [cab_col_idx, rem_col_idx]]
71
  df_subset.columns = ["Cabinet", "Remark"]
 
86
 
87
  if not all_data:
88
  log.append("Не найдены данные ни на одном листе.")
89
+ return "\n".join(log), gr.update(choices=[], value=None)
90
 
91
  self.excel_db = pd.concat(all_data, ignore_index=True)
92
  self.cabinet_list = sorted(self.excel_db["Cabinet"].unique().tolist())
 
94
  log.append("Успешно объединили данные.")
95
  msg = f"✅ База знаний загружена успешно!\nВсего записей: {len(self.excel_db)}\nОбработаны листы: {', '.join(sheets_log)}"
96
 
97
+ # ИЗМЕНЕНО: gr.update() вместо gr.Dropdown()
98
+ return msg, gr.update(choices=self.cabinet_list, value=None)
99
 
100
  except Exception as e:
101
  log.append(f"КРИТИЧЕСКАЯ ОШИБКА: {str(e)}")
102
  import traceback
103
  log.append(traceback.format_exc())
104
+ return "\n".join(log), gr.update(choices=[], value=None)
105
 
106
  def extract_text(self, pdf_path):
107
  try:
 
320
  paragraphs = task.split('\n')
321
 
322
  if y < 80:
323
+ c.showPage()
324
+ y = height - 50
325
  c.setFont(font_name, 10)
326
 
327
  c.rect(50, y - 10, 10, 10)
 
339
  if len(cur_line) + len(w) + 1 <= max_len:
340
  cur_line += w + " "
341
  else:
342
+ lines.append(cur_line)
343
+ cur_line = w + " "
344
  lines.append(cur_line)
345
 
346
  for l in lines:
347
  if text_start_y < 40:
348
+ c.showPage()
349
+ text_start_y = height - 50
350
  c.setFont(font_name, 10)
351
  try:
352
  c.drawString(65, text_start_y, l.strip())
 
378
 
379
  db_in = gr.File(label="Загрузить Excel (.xlsx)", type="filepath")
380
 
381
+ # ИЗМЕНЕНО: choices=[] вместо choices=None
382
+ manual_cab = gr.Dropdown(
383
+ label="Или выберите шкаф-аналог вручную",
384
+ choices=[],
385
+ interactive=True
386
+ )
387
 
388
+ db_out = gr.Textbox(label="Статус загрузки", lines=8)
389
 
390
  db_in.upload(checker.load_excel_db, inputs=[db_in], outputs=[db_out, manual_cab])
391
 
 
395
  btn = gr.Button("Сформировать чек-лист", variant="primary")
396
 
397
  with gr.Row():
398
+ res_txt = gr.Textbox(label="Результат проверки", lines=8)
399
  res_pdf = gr.File(label="Скачать PDF чек-лист")
400
 
401
  btn.click(checker.check_files, inputs=[files_in, manual_cab], outputs=[res_txt, res_pdf])