This commit is contained in:
2025-05-30 14:40:34 +00:00
parent 2e583eade1
commit fec71826a9

View File

@@ -4506,60 +4506,51 @@ class DataProcessor:
# parent_account_name_d ist bereits oben in _process_single_row gelesen worden
url_for_extraction = None
source_of_wiki_data_origin_log_msg = "Tochter (Initial)"
additional_info_for_af_col = ""
source_of_wiki_data_origin_log_msg = "Tochter (Initial)"
additional_info_for_af_col = ""
# --- Logik zur Bestimmung der zu verwendenden Wiki-URL ---
# Priorität 1: Manuell gepflegter Parent in D, wenn Tochter-Wiki R leer ist
if (not current_wiki_url_r or current_wiki_url_r.lower() == 'k.a.') and \
(parent_account_name_d and parent_account_name_d.lower() != 'k.a.'):
self.logger.info(f" Zeile {row_num_in_sheet}: R leer, D ('{parent_account_name_d}') gesetzt. Suche Wiki für Parent D via SerpAPI.")
try:
potential_url = serp_wikipedia_lookup(parent_account_name_d, website=None) # SERP API KEY BENÖTIGT!
if potential_url and potential_url.lower() not in ["k.a.", "kein artikel gefunden"] and not potential_url.startswith("FEHLER"):
url_for_extraction = potential_url
source_of_wiki_data_origin_log_msg = f"Parent D ('{parent_account_name_d}')"
updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Wiki Konsistenzpruefung"] + 1)}{row_num_in_sheet}', 'values': [["INFO_PARENT_AUS_D"]]})
additional_info_for_af_col = f"INFO: Wiki-URL von Parent (aus D): {parent_account_name_d} via SerpAPI. "
else:
self.logger.warning(f" -> Kein Wiki-Artikel für Parent D '{parent_account_name_d}' gefunden.")
additional_info_for_af_col = f"WARN: Kein Wiki für Parent D '{parent_account_name_d}' gefunden. "
except Exception as e_d_lookup_re:
self.logger.error(f"Fehler bei Wiki-Suche für Parent D '{parent_account_name_d}': {e_d_lookup_re}")
additional_info_for_af_col = f"ERR: Suche Parent D '{parent_account_name_d}' fehlgeschlagen. "
# WICHTIG: Wenn R leer ist, IMMER ZUERST versuchen, Parent-URLs (D dann O) zu finden
if not current_wiki_url_r or current_wiki_url_r.lower() == 'k.a.':
# Priorität 1: Manuell gepflegter Parent in D
if parent_account_name_d and parent_account_name_d.lower() != 'k.a.':
self.logger.info(f" Zeile {row_num_in_sheet}: R leer, D ('{parent_account_name_d}') gesetzt. Suche Wiki für Parent D via SerpAPI.")
try:
potential_url = serp_wikipedia_lookup(parent_account_name_d, website=None) # SERP API KEY BENÖTIGT!
if potential_url and potential_url.lower() not in ["k.a.", "kein artikel gefunden"] and not potential_url.startswith("FEHLER"):
url_for_extraction = potential_url
source_of_wiki_data_origin_log_msg = f"Parent D ('{parent_account_name_d}')"
updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Wiki Konsistenzpruefung"] + 1)}{row_num_in_sheet}', 'values': [["INFO_PARENT_AUS_D"]]})
additional_info_for_af_col = f"INFO: Wiki-URL von Parent (aus D): {parent_account_name_d} via SerpAPI. "
else:
self.logger.warning(f" -> Kein Wiki-Artikel für Parent D '{parent_account_name_d}' gefunden.")
additional_info_for_af_col = f"WARN: Kein Wiki für Parent D '{parent_account_name_d}' gefunden. "
except Exception as e_d_lookup_re:
self.logger.error(f"Fehler bei Wiki-Suche für Parent D '{parent_account_name_d}': {e_d_lookup_re}")
additional_info_for_af_col = f"ERR: Suche Parent D '{parent_account_name_d}' fehlgeschlagen. "
# Priorität 2: Systemvorschlag Parent O, wenn R leer UND D nicht erfolgreich war/leer ist
if (url_for_extraction is None) and \
(not current_wiki_url_r or current_wiki_url_r.lower() == 'k.a.') and \
(system_suggested_parent_o and system_suggested_parent_o.lower() != 'k.a.'): # HIER WAR system_suggested_parent_name_o
self.logger.info(f" Zeile {row_num_in_sheet}: R leer, D nicht genutzt/erfolglos. O ('{system_suggested_parent_o}') gesetzt. Suche Wiki für Parent O via SerpAPI.")
try:
potential_url = serp_wikipedia_lookup(system_suggested_parent_o, website=None) # SERP API KEY BENÖTIGT!
if potential_url and potential_url.lower() not in ["k.a.", "kein artikel gefunden"] and not potential_url.startswith("FEHLER"):
# Hier keine explizite _validate_article, da serp_wikipedia_lookup schon filtert
# und wir davon ausgehen, dass der Parent-Name in O gut genug ist.
url_for_extraction = potential_url
source_of_wiki_data_origin_log_msg = f"Parent O ('{system_suggested_parent_o}')"
updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Wiki Konsistenzpruefung"] + 1)}{row_num_in_sheet}', 'values': [["INFO_PARENT_AUS_O"]]})
additional_info_for_af_col += f"INFO: Wiki-URL von Parent (aus O): {system_suggested_parent_o} via SerpAPI. "
else:
self.logger.warning(f" -> Kein Wiki-Artikel für Parent O '{system_suggested_parent_o}' gefunden.")
additional_info_for_af_col += f"WARN: Kein Wiki für Parent O '{system_suggested_parent_o}' gefunden. "
except Exception as e_o_lookup_re:
self.logger.error(f"Fehler bei Wiki-Suche für Parent O '{system_suggested_parent_o}': {e_o_lookup_re}")
additional_info_for_af_col += f"ERR: Suche Parent O '{system_suggested_parent_o}' fehlgeschlagen. "
# Priorität 3: Standard Tochter-Wiki-Logik (wenn keine Parent-URL ermittelt wurde oder R schon gefüllt war und reevaluiert wird)
if url_for_extraction is None or \
(current_wiki_url_r and current_wiki_url_r.lower() != 'k.a.' and not current_wiki_url_r.startswith("FEHLER") and \
(force_reeval or self._get_cell_value_safe(row_data, "Chat Wiki Konsistenzpruefung").strip().upper() == "X (URL COPIED)")):
# Bestimme, ob eine neue Suche für die Tochter nötig ist oder die vorhandene URL in R verwendet wird
search_for_daughter_wiki_needed_local = False # Lokale Variable für diesen Block
# Priorität 2: Systemvorschlag Parent O (nur wenn D nicht erfolgreich war)
if url_for_extraction is None and \
(system_suggested_parent_o and system_suggested_parent_o.lower() != 'k.a.'):
self.logger.info(f" Zeile {row_num_in_sheet}: R leer, D nicht genutzt/erfolglos. O ('{system_suggested_parent_o}') gesetzt. Suche Wiki für Parent O via SerpAPI.")
try:
potential_url = serp_wikipedia_lookup(system_suggested_parent_o, website=None) # SERP API KEY BENÖTIGT!
if potential_url and potential_url.lower() not in ["k.a.", "kein artikel gefunden"] and not potential_url.startswith("FEHLER"):
url_for_extraction = potential_url
source_of_wiki_data_origin_log_msg = f"Parent O ('{system_suggested_parent_o}')"
updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Wiki Konsistenzpruefung"] + 1)}{row_num_in_sheet}', 'values': [["INFO_PARENT_AUS_O"]]})
additional_info_for_af_col += f"INFO: Wiki-URL von Parent (aus O): {system_suggested_parent_o} via SerpAPI. "
else:
self.logger.warning(f" -> Kein Wiki-Artikel für Parent O '{system_suggested_parent_o}' gefunden.")
additional_info_for_af_col += f"WARN: Kein Wiki für Parent O '{system_suggested_parent_o}' gefunden. "
except Exception as e_o_lookup_re:
self.logger.error(f"Fehler bei Wiki-Suche für Parent O '{system_suggested_parent_o}': {e_o_lookup_re}")
additional_info_for_af_col += f"ERR: Suche Parent O '{system_suggested_parent_o}' fehlgeschlagen. "
# Priorität 3: Tochter-Wiki-Verarbeitung (wenn keine Parent-URL gefunden wurde oder R bereits gefüllt war und Re-Eval/Reparse ansteht)
if url_for_extraction is None: # Wenn nach Parent-Suchen immer noch keine URL da ist
search_for_daughter_wiki_needed_local = False
status_ac_indicates_reparse_local = self._get_cell_value_safe(row_data, "Chat Wiki Konsistenzpruefung").strip().upper() == "X (URL COPIED)"
timestamp_z_is_empty_local = not self._get_cell_value_safe(row_data, "Wikipedia Timestamp").strip()
r_url_is_valid_looking_local = current_wiki_url_r and \
"wikipedia.org/wiki/" in current_wiki_url_r.lower() and \
current_wiki_url_r.lower() not in ["k.a.", "kein artikel gefunden", "fehler bei suche"]
@@ -4568,14 +4559,14 @@ class DataProcessor:
self.logger.info(f" Zeile {row_num_in_sheet}: Status AC ist 'X (URL COPIED)'. Starte neue Suche für Tochter '{company_name}'.")
search_for_daughter_wiki_needed_local = True
elif force_reeval:
if r_url_is_valid_looking_local and url_for_extraction is None: # Nur wenn keine Parent-URL gefunden wurde
if r_url_is_valid_looking_local:
self.logger.info(f" Zeile {row_num_in_sheet}: Re-Eval Modus. Nutze vorhandene Tochter-URL (R): {current_wiki_url_r}")
url_for_extraction = current_wiki_url_r # Setze die URL hier
url_for_extraction = current_wiki_url_r
source_of_wiki_data_origin_log_msg = "Tochter (aus R, Re-Eval)"
elif url_for_extraction is None: # Keine Parent-URL und R ist schlecht
else:
self.logger.info(f" Zeile {row_num_in_sheet}: Re-Eval Modus. Tochter-URL (R) leer/ungültig. Starte neue Suche für Tochter '{company_name}'.")
search_for_daughter_wiki_needed_local = True
elif timestamp_z_is_empty_local and url_for_extraction is None:
elif timestamp_z_is_empty_local:
if r_url_is_valid_looking_local:
self.logger.info(f" Zeile {row_num_in_sheet}: Wikipedia Timestamp (Z) fehlt. Nutze vorhandene Tochter-URL (R): {current_wiki_url_r}")
url_for_extraction = current_wiki_url_r
@@ -4583,12 +4574,11 @@ class DataProcessor:
else:
self.logger.info(f" Zeile {row_num_in_sheet}: Wikipedia Timestamp (Z) fehlt und Tochter-URL (R) leer/ungültig. Starte neue Suche für Tochter '{company_name}'.")
search_for_daughter_wiki_needed_local = True
elif not r_url_is_valid_looking_local and url_for_extraction is None:
elif not r_url_is_valid_looking_local: # Fallback, wenn Z nicht leer, aber R schlecht
self.logger.info(f" Zeile {row_num_in_sheet}: Tochter-URL (R) ist ungültig ('{current_wiki_url_r}'). Starte neue Suche für Tochter '{company_name}'.")
search_for_daughter_wiki_needed_local = True
elif url_for_extraction is None : # Wenn bisher keine URL gefunden/gesetzt wurde
self.logger.debug(f" Zeile {row_num_in_sheet}: Wiki-Verarbeitung für Tochter nicht nötig (Z gesetzt, R gültig, kein Re-Eval/Reparse, kein Parent-Fall).")
else: # R ist vorhanden und Timestamp Z ist gesetzt, kein Re-Eval/Reparse -> keine Wiki-Aktion für Tochter nötig
self.logger.debug(f" Zeile {row_num_in_sheet}: Wiki-Verarbeitung für Tochter nicht nötig (Timestamp Z gesetzt, R gültig, kein Re-Eval/Reparse, kein Parent-Fall).")
if search_for_daughter_wiki_needed_local:
self.logger.info(f" -> Suche nach Wikipedia-Artikel für Tochter '{company_name}'...")
@@ -4605,13 +4595,18 @@ class DataProcessor:
self.logger.error(f"Fehler bei Wiki-Suche für Tochter '{company_name}': {e_tochter_suche_psr}")
url_for_extraction = f"Fehler Suche Tochter: {str(e_tochter_suche_psr)[:50]}"
# Fallback, falls immer noch keine URL da ist, aber R eine hatte (und nicht reevaluiert wurde)
if url_for_extraction is None and current_wiki_url_r and \
current_wiki_url_r.lower() not in ['k.a.'] and not current_wiki_url_r.startswith("FEHLER") and \
not (force_reeval or self._get_cell_value_safe(row_data, "Chat Wiki Konsistenzpruefung").strip().upper() == "X (URL COPIED)"):
url_for_extraction = current_wiki_url_r
source_of_wiki_data_origin_log_msg = "Tochter (aus R, Fallback)"
self.logger.debug(f" Zeile {row_num_in_sheet}: Fallback auf bestehende Tochter-URL aus R: {url_for_extraction}")
elif current_wiki_url_r and current_wiki_url_r.lower() != 'k.a.' and not current_wiki_url_r.startswith("FEHLER") and \
(force_reeval or self._get_cell_value_safe(row_data, "Chat Wiki Konsistenzpruefung").strip().upper() == "X (URL COPIED)"):
# Dieser Fall tritt ein, wenn R eine URL enthält, aber force_reeval oder "X (URL COPIED)" aktiv ist
# und url_for_extraction bereits durch eine Parent-Suche gesetzt wurde.
# In diesem Szenario hat die Parent-URL Vorrang, aber wir loggen, dass die Tochter-URL auch da war.
if url_for_extraction: # Wenn schon eine Parent-URL gefunden wurde
self.logger.info(f" Zeile {row_num_in_sheet}: Parent-URL '{url_for_extraction}' hat Vorrang. Tochter-URL in R ('{current_wiki_url_r}') wird nicht für Extraktion verwendet, obwohl Re-Eval/Reparse aktiv.")
else: # Sollte nicht passieren, wenn die obere Logik korrekt ist, aber als Sicherheitsnetz
self.logger.info(f" Zeile {row_num_in_sheet}: Re-Eval/Reparse aktiv. Nutze bestehende Tochter-URL aus R: {current_wiki_url_r}")
url_for_extraction = current_wiki_url_r
source_of_wiki_data_origin_log_msg = "Tochter (aus R, Re-Eval/Reparse)"
# --- DATENEXTRAKTION ---