From eff55c812593eb04463079d5f2225431f735d642 Mon Sep 17 00:00:00 2001 From: Floke Date: Fri, 18 Apr 2025 06:25:05 +0000 Subject: [PATCH] bugfix --- brancheneinstufung.py | 112 +++++++++++++++++++++++++++--------------- 1 file changed, 72 insertions(+), 40 deletions(-) diff --git a/brancheneinstufung.py b/brancheneinstufung.py index 49c8de6f..2cbec5d8 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -650,12 +650,14 @@ def is_valid_wikipedia_article_url(wiki_url): # NEUE Funktion für Wiki-Updates basierend auf ChatGPT Vorschlägen # NEUE Funktion für Wiki-Updates basierend auf ChatGPT Vorschlägen (mit Status-Update in S) +# Komplette Funktion process_wiki_updates_from_chatgpt (Syntaxfehler behoben) def process_wiki_updates_from_chatgpt(sheet_handler, data_processor, row_limit=None): """ - Identifiziert Zeilen (S nicht OK/Updated), prüft ob U eine *valide* und *andere* Wiki-URL ist. + Identifiziert Zeilen (S nicht OK/Updated/Copied), prüft ob U eine *valide* und *andere* Wiki-URL ist. Wenn ja: Kopiert U->M, markiert S/U, löscht Timestamps/Version, setzt ReEval-Flag A. + Verarbeitet maximal row_limit Kandidaten. """ - debug_print("Starte Modus: Wiki-Updates mit URL-Validierung...") + debug_print("Starte Modus: Wiki-Updates Schritt 1 (URL U -> M kopieren & Timestamps löschen)...") if not sheet_handler.load_data(): return all_data = sheet_handler.get_all_data_with_headers() @@ -663,77 +665,107 @@ def process_wiki_updates_from_chatgpt(sheet_handler, data_processor, row_limit=N header_rows = 5 data_rows = all_data[header_rows:] - # Indizes holen (wie gehabt) - required_keys = [...] # Alle benötigten Schlüssel - col_indices = {}; all_keys_found = True - for key in required_keys: idx = COLUMN_MAP.get(key); col_indices[key] = idx; if idx is None: debug_print(f"FEHLER: Key '{key}' fehlt!"); all_keys_found = False - if not all_keys_found: return debug_print("Breche ab.") + # --- Indizes holen (Korrigierte Schleife) --- + required_keys = [ + "Chat Wiki Konsistenzprüfung", "Chat Vorschlag Wiki Artikel", "Wiki URL", + "Wikipedia Timestamp", "Wiki Verif. Timestamp", "Timestamp letzte Prüfung", "Version", + "ReEval Flag" # Spalte A für ReEval-Flag + ] + col_indices = {} + all_keys_found = True + for key in required_keys: + idx = COLUMN_MAP.get(key) + col_indices[key] = idx # Speichere den Index (kann auch None sein) + if idx is None: + debug_print(f"FEHLER: Schlüssel '{key}' für Spaltenindex fehlt in COLUMN_MAP!") + all_keys_found = False - all_sheet_updates = []; processed_rows_count = 0; error_rows_count = 0 # error_rows_count hier nicht genutzt + if not all_keys_found: + debug_print("Breche Wiki-Updates ab, da Spaltenindizes fehlen.") + return + # --- Ende Indizes holen --- + + all_sheet_updates = [] + processed_rows_count = 0 + error_rows_count = 0 # Nicht wirklich genutzt in dieser Version + # wiki_scraper wird nicht mehr benötigt in dieser Funktion for idx, row in enumerate(data_rows): row_num_in_sheet = idx + header_rows + 1 if row_limit is not None and processed_rows_count >= row_limit: - debug_print(f"Zeilenlimit ({row_limit}) erreicht."); break + debug_print(f"Zeilenlimit ({row_limit}) erreicht.") + break - def get_value(key): idx = col_indices.get(key); return row[idx] if idx is not None and len(row) > idx else "" - konsistenz_s = get_value("Chat Wiki Konsistenzprüfung"); vorschlag_u = get_value("Chat Vorschlag Wiki Artikel"); url_m = get_value("Wiki URL") + def get_value(key): + index = col_indices.get(key) + if index is not None and len(row) > index: return row[index] + return "" + + konsistenz_s = get_value("Chat Wiki Konsistenzprüfung") + vorschlag_u = get_value("Chat Vorschlag Wiki Artikel") + url_m = get_value("Wiki URL") # --- Bedingung prüfen mit URL-Validierung --- is_update_candidate = False; new_url = "" konsistenz_s_upper = konsistenz_s.strip().upper() vorschlag_u_cleaned = vorschlag_u.strip() url_m_cleaned = url_m.strip() - - # Bedingung 1: Status NOK? condition1_status_nok = konsistenz_s_upper not in ["OK", "X (UPDATED)", "X (URL COPIED)", ""] - # Bedingung 2: Vorschlag U ist eine URL? condition2_u_is_url = vorschlag_u_cleaned.lower().startswith(("http://", "https://")) and "wikipedia.org/wiki/" in vorschlag_u_cleaned.lower() + condition3_u_differs_m = False + if condition2_u_is_url: new_url = vorschlag_u_cleaned; condition3_u_differs_m = new_url != url_m_cleaned - # Nur wenn beides True, prüfen wir weiter - if condition1_status_nok and condition2_u_is_url: - new_url = vorschlag_u_cleaned - # Bedingung 3: U anders als M? - condition3_u_differs_m = new_url != url_m_cleaned - if condition3_u_differs_m: - # --- NEU: Bedingung 4: Ist U eine VALIDE Wiki-Artikelseite? --- - debug_print(f"Zeile {row_num_in_sheet}: Potenzieller Kandidat. Prüfe Validität von URL: {new_url}...") - condition4_u_is_valid = is_valid_wikipedia_article_url(new_url) - if condition4_u_is_valid: - is_update_candidate = True # Alle Bedingungen erfüllt - else: - debug_print(f"Zeile {row_num_in_sheet}: Vorgeschlagene URL '{new_url}' ist KEIN valider Artikel. Überspringe Update.") - # else: debug_print(f"Zeile {row_num_in_sheet}: URL in U ist gleich wie in M. Überspringe.") - # else: debug_print(f"Zeile {row_num_in_sheet}: Status S ok/leer oder U keine URL. Überspringe.") + # --- NEU: Bedingung 4 wird HIER hinzugefügt --- + condition4_u_is_valid = False # Standardmäßig False + if condition1_status_nok and condition2_u_is_url and condition3_u_differs_m: + debug_print(f"Zeile {row_num_in_sheet}: Potenzieller Kandidat. Prüfe Validität von URL: {new_url}...") + condition4_u_is_valid = is_valid_wikipedia_article_url(new_url) # Rufe Prüffunktion auf + if not condition4_u_is_valid: + debug_print(f"Zeile {row_num_in_sheet}: Vorgeschlagene URL '{new_url}' ist KEIN valider Artikel. Überspringe Update.") + + # Finale Entscheidung + is_update_candidate = condition1_status_nok and condition2_u_is_url and condition3_u_differs_m and condition4_u_is_valid + + # Detailliertes Debugging (kann bleiben) + if row_num_in_sheet in [28, 40, 42] or idx < 2: + debug_print(f"\n--- DEBUG Zeile {row_num_in_sheet} ---"); debug_print(f" S='{konsistenz_s}' -> NOK? {condition1_status_nok}"); debug_print(f" U='{vorschlag_u}' -> URL? {condition2_u_is_url}"); debug_print(f" M='{url_m}'"); debug_print(f" U!=M? {condition3_u_differs_m}"); debug_print(f" U Valid? {condition4_u_is_valid if (condition1_status_nok and condition2_u_is_url and condition3_u_differs_m) else 'N/A'}"); debug_print(f" => Update? {is_update_candidate}"); debug_print(f"--- ENDE DEBUG ---\n") - # --- Verarbeitung (nur wenn is_update_candidate True ist) --- if is_update_candidate: debug_print(f"Zeile {row_num_in_sheet}: Update-Kandidat VALIDIERUNG ERFOLGREICH. Setze ReEval-Flag und bereite Updates vor.") processed_rows_count += 1 # Updates sammeln (M, S, U, Timestamps/Version löschen, A setzen) - m_l=sheet_handler._get_col_letter(col_indices["Wiki URL"]+1); s_l=sheet_handler._get_col_letter(col_indices["Chat Wiki Konsistenzprüfung"]+1); u_l=sheet_handler._get_col_letter(col_indices["Chat Vorschlag Wiki Artikel"]+1); an_l=sheet_handler._get_col_letter(col_indices["Wikipedia Timestamp"]+1); ax_l=sheet_handler._get_col_letter(col_indices["Wiki Verif. Timestamp"]+1); ao_l=sheet_handler._get_col_letter(col_indices["Timestamp letzte Prüfung"]+1); ap_l=sheet_handler._get_col_letter(col_indices["Version"]+1); a_l=sheet_handler._get_col_letter(col_indices["ReEval Flag"]+1) + url_m_letter = sheet_handler._get_col_letter(col_indices["Wiki URL"] + 1) + konsistenz_s_letter = sheet_handler._get_col_letter(col_indices["Chat Wiki Konsistenzprüfung"] + 1) + vorschlag_u_letter = sheet_handler._get_col_letter(col_indices["Chat Vorschlag Wiki Artikel"] + 1) + ts_an_letter = sheet_handler._get_col_letter(col_indices["Wikipedia Timestamp"] + 1) + ts_ax_letter = sheet_handler._get_col_letter(col_indices["Wiki Verif. Timestamp"] + 1) + ts_ao_letter = sheet_handler._get_col_letter(col_indices["Timestamp letzte Prüfung"] + 1) + version_ap_letter = sheet_handler._get_col_letter(col_indices["Version"] + 1) + reeval_a_letter = sheet_handler._get_col_letter(col_indices["ReEval Flag"] + 1) row_updates = [ - {'range': f'{m_l}{row_num_in_sheet}', 'values': [[new_url]]}, # Neue URL - {'range': f'{s_l}{row_num_in_sheet}', 'values': [["X (URL Copied)"]]}, # Status - {'range': f'{u_l}{row_num_in_sheet}', 'values': [["URL übernommen"]]}, # Marker - {'range': f'{an_l}{row_num_in_sheet}', 'values': [[""]]}, {'range': f'{ax_l}{row_num_in_sheet}', 'values': [[""]]}, # TS löschen - {'range': f'{ao_l}{row_num_in_sheet}', 'values': [[""]]}, {'range': f'{ap_l}{row_num_in_sheet}', 'values': [[""]]}, - {'range': f'{a_l}{row_num_in_sheet}', 'values': [["x"]]}, # ReEval setzen + {'range': f'{url_m_letter}{row_num_in_sheet}', 'values': [[new_url]]}, + {'range': f'{konsistenz_s_letter}{row_num_in_sheet}', 'values': [["X (URL Copied)"]]}, + {'range': f'{vorschlag_u_letter}{row_num_in_sheet}', 'values': [["URL übernommen"]]}, + {'range': f'{ts_an_letter}{row_num_in_sheet}', 'values': [[""]]}, + {'range': f'{ts_ax_letter}{row_num_in_sheet}', 'values': [[""]]}, + {'range': f'{ts_ao_letter}{row_num_in_sheet}', 'values': [[""]]}, + {'range': f'{version_ap_letter}{row_num_in_sheet}', 'values': [[""]]}, + {'range': f'{reeval_a_letter}{row_num_in_sheet}', 'values': [["x"]]}, ] all_sheet_updates.extend(row_updates) # Kein Reparsing/Rebranching hier! - # --- Batch Update am Ende --- + # Batch Update am Ende if all_sheet_updates: - debug_print(f"BEREIT ZUM SENDEN: Batch-Update für {processed_rows_count} validierte URL-Kopien/Resets ({len(all_sheet_updates)} Zellen)...") + debug_print(f"BEREIT ZUM SENDEN: Batch-Update für {processed_rows_count} URL-Kopien/Resets ({len(all_sheet_updates)} Zellen)...") success = sheet_handler.batch_update_cells(all_sheet_updates) if success: debug_print(f"Sheet-Update für Wiki-Korrektur-Vorbereitung erfolgreich.") else: debug_print(f"FEHLER beim Sheet-Update für Wiki-Korrektur-Vorbereitung.") else: - debug_print("Keine Zeilen gefunden, die eine validierte Wiki-URL-Korrektur benötigen.") + debug_print("Keine Zeilen gefunden, die eine validierte Wiki-URL-Korrektur benötigen/erfüllen.") debug_print(f"Wiki-Updates Vorbereitung abgeschlossen. {processed_rows_count} Zeilen für Re-Evaluation markiert.")