Upload app.py
Browse filesgau from dropdown
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)
|
|
|
|
|
|
|
| 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 |
|