bugfix
This commit is contained in:
@@ -577,10 +577,10 @@ def normalize_company_name(name):
|
|||||||
# NEUE Funktion für Wiki-Updates basierend auf ChatGPT Vorschlägen (mit Status-Update in S)
|
# 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):
|
def process_wiki_updates_from_chatgpt(sheet_handler, data_processor):
|
||||||
"""
|
"""
|
||||||
Identifiziert Zeilen, bei denen ChatGPT einen alternativen Wiki-Artikel vorgeschlagen hat (S='X', T=URL),
|
Identifiziert Zeilen, bei denen Wiki-Konsistenz (S) NICHT 'OK' ist und ein
|
||||||
kopiert die neue URL nach M, führt ein Reparse der Wiki-Daten (N-R) durch,
|
alternativer Artikel in T vorgeschlagen wurde (URL, != M).
|
||||||
berechnet die Branche neu (W-Y), löscht relevante Timestamps (AN, AX, AO, AP)
|
Kopiert neue URL nach M, führt Reparse (N-R) & Re-Branch (W-Y) durch,
|
||||||
und markiert die Zeile in Spalte S als "X (Updated)".
|
löscht Timestamps (AN, AX, AO, AP) und markiert S als 'X (Updated)'.
|
||||||
"""
|
"""
|
||||||
debug_print("Starte Modus: Wiki-Updates basierend auf ChatGPT-Vorschlägen...")
|
debug_print("Starte Modus: Wiki-Updates basierend auf ChatGPT-Vorschlägen...")
|
||||||
|
|
||||||
@@ -590,138 +590,108 @@ def process_wiki_updates_from_chatgpt(sheet_handler, data_processor):
|
|||||||
header_rows = 5
|
header_rows = 5
|
||||||
data_rows = all_data[header_rows:]
|
data_rows = all_data[header_rows:]
|
||||||
|
|
||||||
# --- Indizes holen ---
|
# Indizes holen (wie zuvor)
|
||||||
# Stelle sicher, dass ALLE benötigten Schlüssel in COLUMN_MAP existieren
|
required_keys = ["Chat Wiki Konsistenzprüfung", "Chat Vorschlag Wiki Artikel", "Wiki URL", "Wiki Absatz", "Wiki Branche", "Wiki Umsatz", "Wiki Mitarbeiter", "Wiki Kategorien", "Chat Vorschlag Branche", "Chat Konsistenz Branche", "Chat Begründung Abweichung Branche", "Wikipedia Timestamp", "Wiki Verif. Timestamp", "Timestamp letzte Prüfung", "Version", "Website Zusammenfassung", "CRM Branche", "CRM Beschreibung"]
|
||||||
required_keys = [
|
col_indices = {}; all_keys_found = True
|
||||||
"Chat Wiki Konsistenzprüfung", "Chat Vorschlag Wiki Artikel", "Wiki URL",
|
|
||||||
"Wiki Absatz", "Wiki Branche", "Wiki Umsatz", "Wiki Mitarbeiter", "Wiki Kategorien",
|
|
||||||
"Chat Vorschlag Branche", "Chat Konsistenz Branche", "Chat Begründung Abweichung Branche",
|
|
||||||
"Wikipedia Timestamp", "Wiki Verif. Timestamp", "Timestamp letzte Prüfung", "Version",
|
|
||||||
"Website Zusammenfassung", "CRM Branche", "CRM Beschreibung"
|
|
||||||
]
|
|
||||||
col_indices = {}
|
|
||||||
all_keys_found = True
|
|
||||||
for key in required_keys:
|
for key in required_keys:
|
||||||
idx = COLUMN_MAP.get(key)
|
idx = COLUMN_MAP.get(key)
|
||||||
if idx is None:
|
if idx is None: debug_print(f"FEHLER: Schlüssel '{key}' fehlt!"); all_keys_found = False
|
||||||
debug_print(f"FEHLER: Schlüssel '{key}' fehlt in COLUMN_MAP!")
|
|
||||||
all_keys_found = False
|
|
||||||
col_indices[key] = idx
|
col_indices[key] = idx
|
||||||
|
if not all_keys_found: return debug_print("Breche Wiki-Updates ab.")
|
||||||
|
|
||||||
if not all_keys_found:
|
all_sheet_updates = []; processed_rows = 0
|
||||||
debug_print("Breche Wiki-Updates ab, da Spaltenindizes fehlen.")
|
|
||||||
return
|
|
||||||
|
|
||||||
all_sheet_updates = []
|
|
||||||
processed_rows = 0
|
|
||||||
wiki_scraper = data_processor.wiki_scraper
|
wiki_scraper = data_processor.wiki_scraper
|
||||||
|
|
||||||
# Gehe durch alle *Daten*-Zeilen
|
|
||||||
for idx, row in enumerate(data_rows):
|
for idx, row in enumerate(data_rows):
|
||||||
row_num_in_sheet = idx + header_rows + 1
|
row_num_in_sheet = idx + header_rows + 1
|
||||||
|
|
||||||
# Lese Werte sicher aus
|
# Werte sicher lesen
|
||||||
konsistenz_s = row[col_indices["Chat Wiki Konsistenzprüfung"]] if len(row) > col_indices["Chat Wiki Konsistenzprüfung"] else ""
|
konsistenz_s = row[col_indices["Chat Wiki Konsistenzprüfung"]] if len(row) > col_indices["Chat Wiki Konsistenzprüfung"] else ""
|
||||||
vorschlag_t = row[col_indices["Chat Vorschlag Wiki Artikel"]] if len(row) > col_indices["Chat Vorschlag Wiki Artikel"] else ""
|
vorschlag_t = row[col_indices["Chat Vorschlag Wiki Artikel"]] if len(row) > col_indices["Chat Vorschlag Wiki Artikel"] else ""
|
||||||
url_m = row[col_indices["Wiki URL"]] if len(row) > col_indices["Wiki URL"] else ""
|
url_m = row[col_indices["Wiki URL"]] if len(row) > col_indices["Wiki URL"] else ""
|
||||||
|
|
||||||
# Bedingung prüfen: S='X' und T ist eine URL und T != M
|
# --- Bedingung prüfen ---
|
||||||
is_update_candidate = False
|
is_update_candidate = False
|
||||||
new_url = ""
|
new_url = ""
|
||||||
if konsistenz_s.strip().upper() == "X":
|
konsistenz_s_upper = konsistenz_s.strip().upper()
|
||||||
vorschlag_t_cleaned = vorschlag_t.strip()
|
vorschlag_t_cleaned = vorschlag_t.strip()
|
||||||
if vorschlag_t_cleaned.lower().startswith(("http://", "https://")):
|
url_m_cleaned = url_m.strip()
|
||||||
new_url = vorschlag_t_cleaned
|
t_is_url = vorschlag_t_cleaned.lower().startswith(("http://", "https://"))
|
||||||
if new_url != url_m.strip():
|
t_differs_from_m = new_url != url_m_cleaned # new_url wird erst gesetzt, wenn t_is_url True ist
|
||||||
|
|
||||||
|
# --- NEUES DETAILLIERTES DEBUGGING (speziell für Zeile 28) ---
|
||||||
|
if row_num_in_sheet == 28:
|
||||||
|
debug_print(f"\n--- DEBUG Zeile 28 ---")
|
||||||
|
debug_print(f" Wert S (Roh): '{konsistenz_s}'")
|
||||||
|
debug_print(f" Wert S (Strip, Upper): '{konsistenz_s_upper}'")
|
||||||
|
debug_print(f" Bedingung (S != OK and S != ''): {konsistenz_s_upper != 'OK' and konsistenz_s_upper != ''}")
|
||||||
|
debug_print(f" Wert T (Roh): '{vorschlag_t}'")
|
||||||
|
debug_print(f" Wert T (Cleaned): '{vorschlag_t_cleaned}'")
|
||||||
|
debug_print(f" Bedingung (T ist URL): {t_is_url}")
|
||||||
|
debug_print(f" Wert M (Roh): '{url_m}'")
|
||||||
|
debug_print(f" Wert M (Cleaned): '{url_m_cleaned}'")
|
||||||
|
# Setze new_url hier nur für den Vergleichslog, wenn T eine URL ist
|
||||||
|
temp_new_url_for_log = vorschlag_t_cleaned if t_is_url else None
|
||||||
|
debug_print(f" Bedingung (T != M): {temp_new_url_for_log != url_m_cleaned if temp_new_url_for_log else 'N/A (T keine URL)'}")
|
||||||
|
debug_print(f"--- ENDE DEBUG Zeile 28 ---\n")
|
||||||
|
# --- ENDE DEBUGGING ---
|
||||||
|
|
||||||
|
# Die eigentliche Bedingungsprüfung (Option B: Prüfe auf NICHT OK)
|
||||||
|
if konsistenz_s_upper != "OK" and konsistenz_s_upper != "":
|
||||||
|
if t_is_url: # Ist T eine URL?
|
||||||
|
new_url = vorschlag_t_cleaned # Setze new_url jetzt
|
||||||
|
if new_url != url_m_cleaned: # Ist T anders als M?
|
||||||
is_update_candidate = True
|
is_update_candidate = True
|
||||||
# Optional: Prüfen ob T vielleicht "Kein passender Artikel" etc. enthält und nicht updaten?
|
|
||||||
# elif "kein" in vorschlag_t_cleaned.lower() and "artikel" in vorschlag_t_cleaned.lower():
|
|
||||||
# pass # Explizit nicht als Kandidat werten
|
|
||||||
|
|
||||||
if is_update_candidate:
|
if is_update_candidate:
|
||||||
debug_print(f"Zeile {row_num_in_sheet}: Update-Kandidat gefunden. Neue URL: {new_url}")
|
# ... (Restliche Verarbeitung der Zeile wie zuvor: Reparse, Re-Branch, Updates sammeln) ...
|
||||||
|
debug_print(f"Zeile {row_num_in_sheet}: Update-Kandidat gefunden. Status S='{konsistenz_s}', Neue URL: {new_url}")
|
||||||
try: # Füge Try-Block um die Verarbeitung einer Zeile hinzu
|
try:
|
||||||
processed_rows += 1
|
processed_rows += 1
|
||||||
|
|
||||||
# --- Schritt 3a: Wiki Reparse ---
|
|
||||||
debug_print(f" -> Reparsing Wiki-Daten für {new_url}...")
|
debug_print(f" -> Reparsing Wiki-Daten für {new_url}...")
|
||||||
new_wiki_data = wiki_scraper.extract_company_data(new_url)
|
new_wiki_data = wiki_scraper.extract_company_data(new_url); time.sleep(0.5)
|
||||||
# Kleine Pause nach Wiki-Scrape
|
|
||||||
time.sleep(0.5)
|
|
||||||
|
|
||||||
# --- Schritt 3b: Branch Neuberechnung ---
|
|
||||||
crm_branche = row[col_indices["CRM Branche"]] if len(row) > col_indices["CRM Branche"] else ""
|
crm_branche = row[col_indices["CRM Branche"]] if len(row) > col_indices["CRM Branche"] else ""
|
||||||
crm_beschreibung = row[col_indices["CRM Beschreibung"]] if len(row) > col_indices["CRM Beschreibung"] else ""
|
crm_beschreibung = row[col_indices["CRM Beschreibung"]] if len(row) > col_indices["CRM Beschreibung"] else ""
|
||||||
website_summary = row[col_indices["Website Zusammenfassung"]] if len(row) > col_indices["Website Zusammenfassung"] else ""
|
website_summary = row[col_indices["Website Zusammenfassung"]] if len(row) > col_indices["Website Zusammenfassung"] else ""
|
||||||
debug_print(f" -> Neuberechnung der Branche...")
|
debug_print(f" -> Neuberechnung der Branche...")
|
||||||
new_branch_result = evaluate_branche_chatgpt(
|
new_branch_result = evaluate_branche_chatgpt(crm_branche, crm_beschreibung, new_wiki_data.get('branche', 'k.A.'), new_wiki_data.get('categories', 'k.A.'), website_summary)
|
||||||
crm_branche, crm_beschreibung,
|
|
||||||
new_wiki_data.get('branche', 'k.A.'),
|
|
||||||
new_wiki_data.get('categories', 'k.A.'),
|
|
||||||
website_summary
|
|
||||||
)
|
|
||||||
|
|
||||||
# --- Schritt 4: Updates sammeln ---
|
# Spaltenbuchstaben ermitteln...
|
||||||
# Spaltenbuchstaben ermitteln
|
url_m_letter=sheet_handler._get_col_letter(col_indices["Wiki URL"]+1); absatz_n_letter=sheet_handler._get_col_letter(col_indices["Wiki Absatz"]+1); branche_o_letter=sheet_handler._get_col_letter(col_indices["Wiki Branche"]+1); umsatz_p_letter=sheet_handler._get_col_letter(col_indices["Wiki Umsatz"]+1); ma_q_letter=sheet_handler._get_col_letter(col_indices["Wiki Mitarbeiter"]+1); kat_r_letter=sheet_handler._get_col_letter(col_indices["Wiki Kategorien"]+1); branch_w_letter=sheet_handler._get_col_letter(col_indices["Chat Vorschlag Branche"]+1); branch_x_letter=sheet_handler._get_col_letter(col_indices["Chat Konsistenz Branche"]+1); branch_y_letter=sheet_handler._get_col_letter(col_indices["Chat Begründung Abweichung Branche"]+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); vorschlag_t_letter=sheet_handler._get_col_letter(col_indices["Chat Vorschlag Wiki Artikel"]+1); konsistenz_s_letter=sheet_handler._get_col_letter(col_indices["Chat Wiki Konsistenzprüfung"]+1)
|
||||||
url_m_letter = sheet_handler._get_col_letter(col_indices["Wiki URL"] + 1)
|
|
||||||
absatz_n_letter = sheet_handler._get_col_letter(col_indices["Wiki Absatz"] + 1)
|
|
||||||
branche_o_letter = sheet_handler._get_col_letter(col_indices["Wiki Branche"] + 1)
|
|
||||||
umsatz_p_letter = sheet_handler._get_col_letter(col_indices["Wiki Umsatz"] + 1)
|
|
||||||
ma_q_letter = sheet_handler._get_col_letter(col_indices["Wiki Mitarbeiter"] + 1)
|
|
||||||
kat_r_letter = sheet_handler._get_col_letter(col_indices["Wiki Kategorien"] + 1)
|
|
||||||
branch_w_letter = sheet_handler._get_col_letter(col_indices["Chat Vorschlag Branche"] + 1)
|
|
||||||
branch_x_letter = sheet_handler._get_col_letter(col_indices["Chat Konsistenz Branche"] + 1)
|
|
||||||
branch_y_letter = sheet_handler._get_col_letter(col_indices["Chat Begründung Abweichung Branche"] + 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)
|
|
||||||
vorschlag_t_letter = sheet_handler._get_col_letter(col_indices["Chat Vorschlag Wiki Artikel"] + 1)
|
|
||||||
konsistenz_s_letter = sheet_handler._get_col_letter(col_indices["Chat Wiki Konsistenzprüfung"] + 1) # NEU
|
|
||||||
|
|
||||||
row_updates = [
|
row_updates = [
|
||||||
{'range': f'{url_m_letter}{row_num_in_sheet}', 'values': [[new_url]]},
|
{'range':f'{url_m_letter}{row_num_in_sheet}','values':[[new_url]]},
|
||||||
{'range': f'{absatz_n_letter}{row_num_in_sheet}', 'values': [[new_wiki_data.get('first_paragraph', 'k.A.')]]},
|
{'range':f'{absatz_n_letter}{row_num_in_sheet}','values':[[new_wiki_data.get('first_paragraph','k.A.')]]},
|
||||||
{'range': f'{branche_o_letter}{row_num_in_sheet}', 'values': [[new_wiki_data.get('branche', 'k.A.')]]},
|
{'range':f'{branche_o_letter}{row_num_in_sheet}','values':[[new_wiki_data.get('branche','k.A.')]]},
|
||||||
{'range': f'{umsatz_p_letter}{row_num_in_sheet}', 'values': [[new_wiki_data.get('umsatz', 'k.A.')]]},
|
{'range':f'{umsatz_p_letter}{row_num_in_sheet}','values':[[new_wiki_data.get('umsatz','k.A.')]]},
|
||||||
{'range': f'{ma_q_letter}{row_num_in_sheet}', 'values': [[new_wiki_data.get('mitarbeiter', 'k.A.')]]},
|
{'range':f'{ma_q_letter}{row_num_in_sheet}','values':[[new_wiki_data.get('mitarbeiter','k.A.')]]},
|
||||||
{'range': f'{kat_r_letter}{row_num_in_sheet}', 'values': [[new_wiki_data.get('categories', 'k.A.')]]},
|
{'range':f'{kat_r_letter}{row_num_in_sheet}','values':[[new_wiki_data.get('categories','k.A.')]]},
|
||||||
{'range': f'{branch_w_letter}{row_num_in_sheet}', 'values': [[new_branch_result.get("branch", "Fehler")]]},
|
{'range':f'{branch_w_letter}{row_num_in_sheet}','values':[[new_branch_result.get("branch","Fehler")]]},
|
||||||
{'range': f'{branch_x_letter}{row_num_in_sheet}', 'values': [[new_branch_result.get("consistency", "Fehler")]]},
|
{'range':f'{branch_x_letter}{row_num_in_sheet}','values':[[new_branch_result.get("consistency","Fehler")]]},
|
||||||
{'range': f'{branch_y_letter}{row_num_in_sheet}', 'values': [[new_branch_result.get("justification", "Fehler")]]},
|
{'range':f'{branch_y_letter}{row_num_in_sheet}','values':[[new_branch_result.get("justification","Fehler")]]},
|
||||||
{'range': f'{ts_an_letter}{row_num_in_sheet}', 'values': [[""]]},
|
{'range':f'{ts_an_letter}{row_num_in_sheet}','values':[[""]]},
|
||||||
{'range': f'{ts_ax_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'{ts_ao_letter}{row_num_in_sheet}','values':[[""]]},
|
||||||
{'range': f'{version_ap_letter}{row_num_in_sheet}', 'values': [[""]]},
|
{'range':f'{version_ap_letter}{row_num_in_sheet}','values':[[""]]},
|
||||||
{'range': f'{vorschlag_t_letter}{row_num_in_sheet}', 'values': [["Korrektur übernommen"]]},
|
{'range':f'{vorschlag_t_letter}{row_num_in_sheet}','values':[["Korrektur übernommen"]]},
|
||||||
# --- NEU: Spalte S aktualisieren ---
|
{'range':f'{konsistenz_s_letter}{row_num_in_sheet}','values':[["X (Updated)"]]},
|
||||||
{'range': f'{konsistenz_s_letter}{row_num_in_sheet}', 'values': [["X (Updated)"]]},
|
|
||||||
]
|
]
|
||||||
all_sheet_updates.extend(row_updates)
|
all_sheet_updates.extend(row_updates)
|
||||||
debug_print(f" -> Updates für Zeile {row_num_in_sheet} vorbereitet.")
|
debug_print(f" -> Updates für Zeile {row_num_in_sheet} vorbereitet.")
|
||||||
|
time.sleep(Config.RETRY_DELAY) # Pause beibehalten
|
||||||
# Kurze Pause nach jeder Zeile, um APIs nicht zu überlasten
|
|
||||||
time.sleep(Config.RETRY_DELAY) # Behalte Pause bei, da ChatGPT hier läuft
|
|
||||||
|
|
||||||
except Exception as e_row:
|
except Exception as e_row:
|
||||||
# Fehler bei der Verarbeitung einer einzelnen Zeile loggen, aber weitermachen
|
debug_print(f"FEHLER Verarbeitung Zeile {row_num_in_sheet}: {e_row}")
|
||||||
debug_print(f"FEHLER bei Verarbeitung von Update-Kandidat Zeile {row_num_in_sheet}: {e_row}")
|
import traceback; debug_print(traceback.format_exc())
|
||||||
import traceback
|
|
||||||
debug_print(traceback.format_exc())
|
|
||||||
|
|
||||||
|
# --- Batch Update ---
|
||||||
# --- Schritt 5: Batch Update ---
|
|
||||||
if all_sheet_updates:
|
if all_sheet_updates:
|
||||||
# Sende alle Updates auf einmal am Ende
|
|
||||||
debug_print(f"Sende Batch-Update für {processed_rows} korrigierte Wiki-Einträge ({len(all_sheet_updates)} Zellen)...")
|
debug_print(f"Sende Batch-Update für {processed_rows} korrigierte Wiki-Einträge ({len(all_sheet_updates)} Zellen)...")
|
||||||
success = sheet_handler.batch_update_cells(all_sheet_updates)
|
success = sheet_handler.batch_update_cells(all_sheet_updates)
|
||||||
if success:
|
if success: debug_print(f"Sheet-Update Wiki-Korrekturen erfolgreich.")
|
||||||
debug_print(f"Sheet-Update für Wiki-Korrekturen erfolgreich.")
|
else: debug_print(f"FEHLER Sheet-Update Wiki-Korrekturen.")
|
||||||
else:
|
else:
|
||||||
debug_print(f"FEHLER beim Sheet-Update für Wiki-Korrekturen.")
|
debug_print("Keine Zeilen für Wiki-URL-Korrektur gefunden/verarbeitet.")
|
||||||
else:
|
|
||||||
debug_print("Keine Zeilen gefunden, die eine Wiki-URL-Korrektur benötigen.")
|
|
||||||
|
|
||||||
debug_print(f"Wiki-Updates basierend auf ChatGPT abgeschlossen. {processed_rows} Zeilen aktualisiert.")
|
debug_print(f"Wiki-Updates basierend auf ChatGPT abgeschlossen. {processed_rows} Zeilen aktualisiert.")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user