bugfix
This commit is contained in:
@@ -575,16 +575,16 @@ def normalize_company_name(name):
|
||||
|
||||
# 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)
|
||||
def process_wiki_updates_from_chatgpt(sheet_handler, data_processor, row_limit=None): # data_processor wird nicht mehr gebraucht
|
||||
def process_wiki_updates_from_chatgpt(sheet_handler, data_processor, row_limit=None):
|
||||
"""
|
||||
Identifiziert Zeilen, bei denen Wiki-Konsistenz (S) NICHT 'OK'/'X (Updated)'/'X (URL Copied)' ist
|
||||
und ein alternativer Artikel in U vorgeschlagen wurde (URL, != M).
|
||||
Kopiert die neue URL nach M, markiert S als 'X (URL Copied)', U als 'URL übernommen'
|
||||
und LÖSCHT die Timestamps AN, AX, AO sowie die Version AP,
|
||||
um eine Neuverarbeitung durch andere Modi zu ermöglichen.
|
||||
Kopiert die neue URL nach M, markiert S als 'X (URL Copied)', U als 'URL übernommen',
|
||||
LÖSCHT die Timestamps AN, AX, AO sowie die Version AP UND SETZT 'x' in Spalte A,
|
||||
um eine Neuverarbeitung durch den 'reeval'-Modus zu triggern.
|
||||
Verarbeitet maximal row_limit Kandidaten.
|
||||
"""
|
||||
debug_print("Starte Modus: Wiki-Updates Schritt 1 (URL U -> M kopieren & Timestamps löschen)...") # Angepasste Beschreibung
|
||||
debug_print("Starte Modus: Wiki-Updates Schritt 1 (URL U -> M kopieren, TS löschen, ReEval Flag setzen)...") # Angepasste Beschreibung
|
||||
|
||||
if not sheet_handler.load_data(): return
|
||||
all_data = sheet_handler.get_all_data_with_headers()
|
||||
@@ -592,9 +592,12 @@ def process_wiki_updates_from_chatgpt(sheet_handler, data_processor, row_limit=N
|
||||
header_rows = 5
|
||||
data_rows = all_data[header_rows:]
|
||||
|
||||
# Indizes holen (weniger benötigt jetzt, aber schadet nicht)
|
||||
required_keys = ["Chat Wiki Konsistenzprüfung", "Chat Vorschlag Wiki Artikel", "Wiki URL",
|
||||
"Wikipedia Timestamp", "Wiki Verif. Timestamp", "Timestamp letzte Prüfung", "Version"]
|
||||
# Indizes holen (inkl. ReEval Flag)
|
||||
required_keys = [
|
||||
"Chat Wiki Konsistenzprüfung", "Chat Vorschlag Wiki Artikel", "Wiki URL",
|
||||
"Wikipedia Timestamp", "Wiki Verif. Timestamp", "Timestamp letzte Prüfung", "Version",
|
||||
"ReEval Flag" # NEU
|
||||
]
|
||||
col_indices = {}
|
||||
all_keys_found = True
|
||||
for key in required_keys:
|
||||
@@ -605,7 +608,7 @@ def process_wiki_updates_from_chatgpt(sheet_handler, data_processor, row_limit=N
|
||||
|
||||
all_sheet_updates = []
|
||||
processed_rows_count = 0
|
||||
# error_rows_count nicht mehr relevant hier
|
||||
# error_rows_count nicht mehr relevant, da try/except pro Zeile fehlt (kann wieder rein)
|
||||
|
||||
for idx, row in enumerate(data_rows):
|
||||
row_num_in_sheet = idx + header_rows + 1
|
||||
@@ -614,7 +617,7 @@ 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): # Sicherer Zugriff
|
||||
def get_value(key):
|
||||
index = col_indices.get(key)
|
||||
if index is not None and len(row) > index: return row[index]
|
||||
return ""
|
||||
@@ -623,21 +626,22 @@ def process_wiki_updates_from_chatgpt(sheet_handler, data_processor, row_limit=N
|
||||
vorschlag_u = get_value("Chat Vorschlag Wiki Artikel")
|
||||
url_m = get_value("Wiki URL")
|
||||
|
||||
# Bedingung prüfen
|
||||
# Bedingung prüfen (wie zuletzt)
|
||||
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)", ""] # Prüft auch gegen neuen Status
|
||||
condition1_status_nok = konsistenz_s_upper not in ["OK", "X (UPDATED)", "X (URL COPIED)", ""]
|
||||
condition2_u_is_url = vorschlag_u_cleaned.lower().startswith(("http://", "https://"))
|
||||
condition3_u_differs_m = False
|
||||
if condition2_u_is_url: new_url = vorschlag_u_cleaned; condition3_u_differs_m = new_url != url_m_cleaned
|
||||
is_update_candidate = condition1_status_nok and condition2_u_is_url and condition3_u_differs_m
|
||||
|
||||
if is_update_candidate:
|
||||
debug_print(f"Zeile {row_num_in_sheet}: Update-Kandidat gefunden. Kopiere URL '{new_url}' nach Spalte M und lösche Timestamps.")
|
||||
debug_print(f"Zeile {row_num_in_sheet}: Update-Kandidat gefunden. Setze ReEval-Flag und bereite Updates vor.")
|
||||
processed_rows_count += 1
|
||||
|
||||
# Updates sammeln (M, S, U und Timestamps/Version löschen)
|
||||
# --- 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)
|
||||
@@ -645,6 +649,7 @@ def process_wiki_updates_from_chatgpt(sheet_handler, data_processor, row_limit=N
|
||||
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) # Buchstabe für Spalte A
|
||||
|
||||
row_updates = [
|
||||
{'range': f'{url_m_letter}{row_num_in_sheet}', 'values': [[new_url]]}, # Neue URL nach M
|
||||
@@ -654,21 +659,22 @@ def process_wiki_updates_from_chatgpt(sheet_handler, data_processor, row_limit=N
|
||||
{'range': f'{ts_ax_letter}{row_num_in_sheet}', 'values': [[""]]}, # AX löschen
|
||||
{'range': f'{ts_ao_letter}{row_num_in_sheet}', 'values': [[""]]}, # AO löschen
|
||||
{'range': f'{version_ap_letter}{row_num_in_sheet}', 'values': [[""]]}, # AP löschen
|
||||
# --- NEU: Setze 'x' in Spalte A ---
|
||||
{'range': f'{reeval_a_letter}{row_num_in_sheet}', 'values': [["x"]]},
|
||||
]
|
||||
all_sheet_updates.extend(row_updates)
|
||||
processed_rows_count += 1
|
||||
# Kein Reparsing/Rebranching hier!
|
||||
|
||||
# Batch Update am Ende
|
||||
if all_sheet_updates:
|
||||
debug_print(f"BEREIT ZUM SENDEN: Batch-Update für {processed_rows_count} URL-Kopien/Timestamp-Resets ({len(all_sheet_updates)} Zellen)...")
|
||||
debug_print(f"BEREIT ZUM SENDEN: Batch-Update für {processed_rows_count} Zeilen (URL-Kopie/TS-Reset/ReEval-Flag)...")
|
||||
success = sheet_handler.batch_update_cells(all_sheet_updates)
|
||||
if success: debug_print(f"Sheet-Update für URL-Kopien/Resets erfolgreich.")
|
||||
else: debug_print(f"FEHLER beim Sheet-Update für URL-Kopien/Resets.")
|
||||
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, für die eine URL kopiert und Timestamps zurückgesetzt werden müssen.")
|
||||
debug_print("Keine Zeilen für Wiki-URL-Korrektur gefunden/benötigt.")
|
||||
|
||||
debug_print(f"Wiki-Updates Schritt 1 abgeschlossen. {processed_rows_count} Zeilen für Neuverarbeitung vorbereitet.")
|
||||
debug_print(f"Wiki-Updates Vorbereitung abgeschlossen. {processed_rows_count} Zeilen für Re-Evaluation markiert.")
|
||||
|
||||
def extract_numeric_value(raw_value, is_umsatz=False):
|
||||
"""Extrahiert und normalisiert Zahlenwerte (Umsatz in Mio, Mitarbeiter)."""
|
||||
@@ -3432,30 +3438,68 @@ class DataProcessor:
|
||||
self._process_single_row(row_num_in_sheet, row_data, process_wiki, process_chatgpt, process_website)
|
||||
|
||||
|
||||
def process_reevaluation_rows(self):
|
||||
""" Verarbeitet nur Zeilen, die in Spalte A mit 'x' markiert sind. """
|
||||
debug_print("Starte Re-Evaluierungsmodus (Spalte A = 'x')...")
|
||||
data_rows = self.sheet_handler.get_data()
|
||||
def process_reevaluation_rows(self, row_limit=None, clear_flag=True):
|
||||
"""
|
||||
Verarbeitet nur Zeilen, die in Spalte A mit 'x' markiert sind.
|
||||
Ruft _process_single_row für jede dieser Zeilen auf.
|
||||
Verarbeitet maximal row_limit Zeilen.
|
||||
Löscht optional das 'x'-Flag nach erfolgreicher Verarbeitung.
|
||||
"""
|
||||
debug_print(f"Starte Re-Evaluierungsmodus (Spalte A = 'x'). Max. Zeilen: {row_limit if row_limit is not None else 'Unbegrenzt'}")
|
||||
|
||||
# Lade Daten frisch, um aktuelle Flags zu sehen
|
||||
if not self.sheet_handler.load_data(): return
|
||||
all_data = self.sheet_handler.get_all_data_with_headers()
|
||||
if not all_data or len(all_data) <= 5: return
|
||||
header_rows = 5
|
||||
rows_processed = 0
|
||||
data_rows = all_data[header_rows:]
|
||||
|
||||
reeval_col_idx = COLUMN_MAP.get("ReEval Flag")
|
||||
if reeval_col_idx is None: return debug_print("FEHLER: 'ReEval Flag' nicht in COLUMN_MAP.")
|
||||
|
||||
if reeval_col_idx is None:
|
||||
debug_print("FEHLER: Spalte 'ReEval Flag' nicht in COLUMN_MAP gefunden. Breche Re-Evaluierung ab.")
|
||||
return
|
||||
|
||||
for i, row in enumerate(data_rows):
|
||||
row_num_in_sheet = i + header_rows + 1
|
||||
# Prüfe Flag in Spalte A (Index 0)
|
||||
rows_to_process = []
|
||||
# Finde zuerst alle Kandidaten
|
||||
for idx, row in enumerate(data_rows):
|
||||
if len(row) > reeval_col_idx and row[reeval_col_idx].strip().lower() == "x":
|
||||
debug_print(f"Re-Evaluiere Zeile {row_num_in_sheet}...")
|
||||
row_num_in_sheet = idx + header_rows + 1
|
||||
rows_to_process.append({'row_num': row_num_in_sheet, 'data': row})
|
||||
|
||||
debug_print(f"{len(rows_to_process)} Zeilen mit ReEval-Flag 'x' gefunden.")
|
||||
|
||||
processed_count = 0
|
||||
updates_clear_flag = []
|
||||
|
||||
# Verarbeite die gefundenen Kandidaten bis zum Limit
|
||||
for task in rows_to_process:
|
||||
if row_limit is not None and processed_count >= row_limit:
|
||||
debug_print(f"Zeilenlimit ({row_limit}) erreicht. Breche Re-Evaluation ab.")
|
||||
break
|
||||
|
||||
row_num = task['row_num']
|
||||
row_data = task['data']
|
||||
debug_print(f"--- Re-Evaluiere Zeile {row_num} ---")
|
||||
try:
|
||||
# Führe volle Verarbeitung für diese Zeile durch
|
||||
self._process_single_row(row_num_in_sheet, row, process_wiki=True, process_chatgpt=True, process_website=True)
|
||||
rows_processed += 1
|
||||
# Optional: Flag nach Verarbeitung löschen?
|
||||
# update_flag = [{'range': f'A{row_num_in_sheet}', 'values': [['']]}]
|
||||
# self.sheet_handler.batch_update_cells(update_flag)
|
||||
debug_print(f"Re-Evaluierung abgeschlossen. {rows_processed} Zeilen verarbeitet.")
|
||||
# _process_single_row prüft intern Timestamps AN, AT, AO
|
||||
self._process_single_row(row_num, row_data, process_wiki=True, process_chatgpt=True, process_website=True)
|
||||
processed_count += 1
|
||||
|
||||
# Optional: Flag nach Verarbeitung löschen
|
||||
if clear_flag:
|
||||
flag_col_letter = self.sheet_handler._get_col_letter(reeval_col_idx + 1)
|
||||
updates_clear_flag.append({'range': f'{flag_col_letter}{row_num}', 'values': [['']]})
|
||||
|
||||
except Exception as e_proc:
|
||||
debug_print(f"FEHLER bei Re-Evaluation von Zeile {row_num}: {e_proc}")
|
||||
# Flag hier nicht löschen, damit es beim nächsten Mal versucht wird
|
||||
|
||||
# Lösche Flags am Ende gebündelt
|
||||
if clear_flag and updates_clear_flag:
|
||||
debug_print(f"Lösche ReEval-Flags für {len(updates_clear_flag)} verarbeitete Zeilen...")
|
||||
success = self.sheet_handler.batch_update_cells(updates_clear_flag)
|
||||
if not success: debug_print("FEHLER beim Löschen der ReEval-Flags.")
|
||||
|
||||
debug_print(f"Re-Evaluierung abgeschlossen. {processed_count} Zeilen verarbeitet (Limit: {row_limit}).")
|
||||
|
||||
|
||||
def process_website_details_for_marked_rows(self):
|
||||
|
||||
Reference in New Issue
Block a user