This commit is contained in:
2025-04-18 06:35:55 +00:00
parent d422260fff
commit a0b8ca5f41

View File

@@ -654,10 +654,11 @@ def is_valid_wikipedia_article_url(wiki_url):
def process_wiki_updates_from_chatgpt(sheet_handler, data_processor, row_limit=None):
"""
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.
- Wenn ja: Kopiert U->M, markiert S='X (URL Copied)', U='URL übernommen', löscht TS/Version, setzt ReEval-Flag A.
- Wenn nein (U keine URL, U==M, oder U ungültig): LÖSCHT den Inhalt von U und markiert S als 'X (Invalid Suggestion)'.
Verarbeitet maximal row_limit Zeilen.
"""
debug_print("Starte Modus: Wiki-Updates Schritt 1 (URL U -> M kopieren & Timestamps löschen)...")
debug_print("Starte Modus: Wiki-Updates (URL-Validierung & Löschen ungültiger Vorschläge)...") # Titel angepasst
if not sheet_handler.load_data(): return
all_data = sheet_handler.get_all_data_with_headers()
@@ -665,30 +666,17 @@ def process_wiki_updates_from_chatgpt(sheet_handler, data_processor, row_limit=N
header_rows = 5
data_rows = all_data[header_rows:]
# --- 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
if not all_keys_found:
debug_print("Breche Wiki-Updates ab, da Spaltenindizes fehlen.")
return
# --- Ende Indizes holen ---
# Indizes holen (wie zuvor)
required_keys = [...] # Alle benötigten Schlüssel wie vorher
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.")
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
processed_rows_count = 0 # Zählt jetzt beide Arten von Updates
updated_url_count = 0
cleared_suggestion_count = 0
error_rows_count = 0
for idx, row in enumerate(data_rows):
row_num_in_sheet = idx + header_rows + 1
@@ -697,77 +685,79 @@ def process_wiki_updates_from_chatgpt(sheet_handler, data_processor, row_limit=N
debug_print(f"Zeilenlimit ({row_limit}) erreicht.")
break
def get_value(key):
index = col_indices.get(key)
if index is not None and len(row) > index: return row[index]
return ""
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")
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 ---
# Bedingungen prüfen
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()
condition1_status_nok = konsistenz_s_upper not in ["OK", "X (UPDATED)", "X (URL COPIED)", ""]
condition1_status_nok = konsistenz_s_upper not in ["OK", "X (UPDATED)", "X (URL COPIED)", "X (INVALID SUGGESTION)", ""] # Schließe auch neuen Status aus
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
condition3_u_differs_m = False; condition4_u_is_valid = False
# --- 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.")
if condition1_status_nok and condition2_u_is_url: # Nur wenn Status NOK und U eine URL ist, prüfen wir weiter
new_url = vorschlag_u_cleaned
condition3_u_differs_m = new_url != url_m_cleaned
if 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)
if not condition4_u_is_valid: debug_print(f"Zeile {row_num_in_sheet}: URL '{new_url}' ist KEIN valider Artikel.")
# 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")
# --- NEU: Behandlung ungültiger/unpassender Vorschläge ---
# Trigger, wenn Status NOK war, aber KEIN valides Update durchgeführt werden kann
# (weil U keine URL, U==M oder U ungültige URL)
clear_invalid_suggestion = condition1_status_nok and not is_update_candidate
# --- Verarbeitung des Kandidaten ODER Löschen des Vorschlags ---
if is_update_candidate:
# --- Fall 1: Gültiges Update durchführen ---
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)
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)
updated_url_count += 1
# Updates sammeln (M, S="X (URL Copied)", U="URL übernommen", Timestamps/Version löschen, A="x")
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)
row_updates = [
{'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"]]},
{'range': f'{m_l}{row_num_in_sheet}', 'values': [[new_url]]},
{'range': f'{s_l}{row_num_in_sheet}', 'values': [["X (URL Copied)"]]},
{'range': f'{u_l}{row_num_in_sheet}', 'values': [["URL übernommen"]]},
{'range': f'{an_l}{row_num_in_sheet}', 'values': [[""]]},
{'range': f'{ax_l}{row_num_in_sheet}', 'values': [[""]]},
{'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"]]},
]
all_sheet_updates.extend(row_updates)
# Kein Reparsing/Rebranching hier!
# Batch Update am Ende
elif clear_invalid_suggestion:
# --- Fall 2: Ungültigen Vorschlag löschen/markieren ---
debug_print(f"Zeile {row_num_in_sheet}: Status S war '{konsistenz_s}', aber Vorschlag U ('{vorschlag_u_cleaned}') ist ungültig/identisch. Lösche U und setze Status S.")
processed_rows_count += 1 # Zähle auch diese Aktion
cleared_suggestion_count += 1
# Updates sammeln (S="X (Invalid Suggestion)", U="")
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)
row_updates = [
{'range': f'{s_l}{row_num_in_sheet}', 'values': [["X (Invalid Suggestion)"]]}, # Neuer Status
{'range': f'{u_l}{row_num_in_sheet}', 'values': [[""]]} # Leere Spalte U
]
all_sheet_updates.extend(row_updates)
# Kein 'else' hier, Zeilen, wo S=OK oder bereits bearbeitet wurde, werden ignoriert
# --- Batch Update am Ende ---
if all_sheet_updates:
debug_print(f"BEREIT ZUM SENDEN: Batch-Update für {processed_rows_count} URL-Kopien/Resets ({len(all_sheet_updates)} Zellen)...")
debug_print(f"BEREIT ZUM SENDEN: Batch-Update für {processed_rows_count} verarbeitete Zeilen ({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.")
if success: debug_print(f"Sheet-Update für Wiki-Updates erfolgreich.")
else: debug_print(f"FEHLER beim Sheet-Update für Wiki-Updates.")
else:
debug_print("Keine Zeilen gefunden, die eine validierte Wiki-URL-Korrektur benötigen/erfüllen.")
debug_print("Keine Zeilen gefunden, die eine Wiki-URL-Korrektur oder Vorschlagsbereinigung benötigen.")
debug_print(f"Wiki-Updates Vorbereitung abgeschlossen. {processed_rows_count} Zeilen für Re-Evaluation markiert.")
debug_print(f"Wiki-Updates abgeschlossen. {updated_url_count} URLs kopiert & für ReEval markiert, {cleared_suggestion_count} ungültige Vorschläge gelöscht.")
def extract_numeric_value(raw_value, is_umsatz=False):
"""Extrahiert und normalisiert Zahlenwerte (Umsatz in Mio, Mitarbeiter)."""