Sverd commited on
Commit
e7de712
·
verified ·
1 Parent(s): b4fcd08

Upload app.py

Browse files

gau from dropdown

Files changed (1) hide show
  1. app.py +54 -1
app.py CHANGED
@@ -10,6 +10,8 @@ import requests
10
  logging.basicConfig(level=logging.INFO)
11
  logger = logging.getLogger(__name__)
12
 
 
 
13
  SAMPLE_RESPONSE: List[dict] = [
14
  {
15
  "название": "дрель-шуруповерт аккумуляторная 18 В, Li-Ion, быстрозажимной патрон 13 мм, 0-400/2000 об/мин, 91/58 Нм, 2-х скоростная, 21 уровень крутящего момента, встроенная подсветка, электрический тормоз, реверс, вес 2.3 кг, металлический редуктор, без аккумулятора и зарядного устройства DHP458Z",
@@ -90,7 +92,9 @@ def _format_vertical(df: pd.DataFrame) -> pd.DataFrame:
90
  return vertical
91
 
92
 
93
- def extract_attributes(target_url: str) -> tuple[pd.DataFrame, str]:
 
 
94
  if not target_url or not target_url.strip():
95
  raise gr.Error("Пожалуйста, введите URL для извлечения атрибутов.")
96
 
@@ -100,6 +104,42 @@ def extract_attributes(target_url: str) -> tuple[pd.DataFrame, str]:
100
 
101
  df = pd.DataFrame(data)
102
  df = df[_reorder_columns(df.columns)]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
  tsv_payload = _dataframe_to_tsv(df)
104
  vertical_df = _format_vertical(df)
105
  return vertical_df, tsv_payload
@@ -149,6 +189,13 @@ def main() -> None:
149
  type="pandas",
150
  elem_id="results-table",
151
  )
 
 
 
 
 
 
 
152
  clipboard_box = gr.Textbox(
153
  label=None,
154
  interactive=False,
@@ -172,6 +219,12 @@ def main() -> None:
172
  submit_btn.click(
173
  fn=extract_attributes,
174
  inputs=url_input,
 
 
 
 
 
 
175
  outputs=[results_table, clipboard_box],
176
  )
177
 
 
10
  logging.basicConfig(level=logging.INFO)
11
  logger = logging.getLogger(__name__)
12
 
13
+ LATEST_DF_BASE = None
14
+
15
  SAMPLE_RESPONSE: List[dict] = [
16
  {
17
  "название": "дрель-шуруповерт аккумуляторная 18 В, Li-Ion, быстрозажимной патрон 13 мм, 0-400/2000 об/мин, 91/58 Нм, 2-х скоростная, 21 уровень крутящего момента, встроенная подсветка, электрический тормоз, реверс, вес 2.3 кг, металлический редуктор, без аккумулятора и зарядного устройства DHP458Z",
 
92
  return vertical
93
 
94
 
95
+ def extract_attributes(target_url: str):
96
+ global LATEST_DF_BASE
97
+
98
  if not target_url or not target_url.strip():
99
  raise gr.Error("Пожалуйста, введите URL для извлечения атрибутов.")
100
 
 
104
 
105
  df = pd.DataFrame(data)
106
  df = df[_reorder_columns(df.columns)]
107
+
108
+ # Save base dataframe (without forced GAU) for future GAU updates
109
+ LATEST_DF_BASE = df.copy()
110
+
111
+ gau_choices: List[str] = []
112
+ selected_gau: str | None = None
113
+
114
+ if "ГАУ" in df.columns:
115
+ first_value = df["ГАУ"].iloc[0]
116
+ if isinstance(first_value, list):
117
+ gau_choices = [str(x).strip() for x in first_value if x]
118
+ elif pd.notna(first_value):
119
+ gau_choices = [str(first_value)]
120
+
121
+ if gau_choices:
122
+ selected_gau = gau_choices[0]
123
+ df["ГАУ"] = selected_gau
124
+
125
+ tsv_payload = _dataframe_to_tsv(df)
126
+ vertical_df = _format_vertical(df)
127
+
128
+ dropdown_update = gr.update(choices=gau_choices, value=selected_gau)
129
+ return vertical_df, tsv_payload, dropdown_update
130
+
131
+
132
+ def update_gau(selected_gau: str):
133
+ global LATEST_DF_BASE
134
+
135
+ if LATEST_DF_BASE is None:
136
+ raise gr.Error("Сначала получите атрибуты по URL.")
137
+
138
+ df = LATEST_DF_BASE.copy()
139
+
140
+ if "ГАУ" in df.columns and selected_gau:
141
+ df["ГАУ"] = selected_gau
142
+
143
  tsv_payload = _dataframe_to_tsv(df)
144
  vertical_df = _format_vertical(df)
145
  return vertical_df, tsv_payload
 
189
  type="pandas",
190
  elem_id="results-table",
191
  )
192
+
193
+ gau_dropdown = gr.Dropdown(
194
+ label="Вероятные ГАУ (выберите наиболее подходящий)",
195
+ choices=[],
196
+ interactive=True,
197
+ )
198
+
199
  clipboard_box = gr.Textbox(
200
  label=None,
201
  interactive=False,
 
219
  submit_btn.click(
220
  fn=extract_attributes,
221
  inputs=url_input,
222
+ outputs=[results_table, clipboard_box, gau_dropdown],
223
+ )
224
+
225
+ gau_dropdown.change(
226
+ fn=update_gau,
227
+ inputs=gau_dropdown,
228
  outputs=[results_table, clipboard_box],
229
  )
230