This commit is contained in:
2025-04-16 13:33:00 +00:00
parent 110e83bee5
commit 3478a68e2f

View File

@@ -2162,20 +2162,17 @@ def _process_batch(sheet, batches, row_numbers):
# Kurze Pause nach jedem Batch-API-Call (jetzt in der aufrufenden Funktion) # Kurze Pause nach jedem Batch-API-Call (jetzt in der aufrufenden Funktion)
# time.sleep(Config.RETRY_DELAY) # Entfernt # time.sleep(Config.RETRY_DELAY) # Entfernt
# Komplette Funktion process_website_batch (prüft jetzt Timestamp AT) # Komplette Funktion process_website_batch (prüft jetzt Timestamp AT mit erzwungenem Debugging)
def process_website_batch(sheet_handler, start_row_index_in_sheet, end_row_index_in_sheet): def process_website_batch(sheet_handler, start_row_index_in_sheet, end_row_index_in_sheet):
"""Batch-Prozess für Website-Scraping (Rohtext & Zusammenfassung).""" """Batch-Prozess für Website-Scraping (Rohtext & Zusammenfassung)."""
debug_print(f"Starte Website-Scraping (Batch) für Zeilen {start_row_index_in_sheet} bis {end_row_index_in_sheet}...") debug_print(f"Starte Website-Scraping (Batch) für Zeilen {start_row_index_in_sheet} bis {end_row_index_in_sheet}...")
# Lade aktuelle Daten direkt hier
all_data = sheet_handler.get_all_data_with_headers() all_data = sheet_handler.get_all_data_with_headers()
if not all_data or len(all_data) <= 5: if not all_data or len(all_data) <= 5:
debug_print("FEHLER/WARNUNG: Keine Daten zum Verarbeiten in process_website_batch gefunden.") debug_print("FEHLER/WARNUNG: Keine Daten zum Verarbeiten in process_website_batch gefunden.")
return return
sheet = sheet_handler.sheet # Zugriff auf gspread sheet Objekt sheet = sheet_handler.sheet
# Hole Indizes aus COLUMN_MAP
timestamp_col_key = "Website Scrape Timestamp" timestamp_col_key = "Website Scrape Timestamp"
timestamp_col_index = COLUMN_MAP.get(timestamp_col_key) timestamp_col_index = COLUMN_MAP.get(timestamp_col_key)
website_col_index = COLUMN_MAP.get("CRM Website") website_col_index = COLUMN_MAP.get("CRM Website")
@@ -2183,9 +2180,8 @@ def process_website_batch(sheet_handler, start_row_index_in_sheet, end_row_index
summary_col_index = COLUMN_MAP.get("Website Zusammenfassung") summary_col_index = COLUMN_MAP.get("Website Zusammenfassung")
version_col_index = COLUMN_MAP.get("Version") version_col_index = COLUMN_MAP.get("Version")
# Fehlerprüfung für Indizes
if None in [timestamp_col_index, website_col_index, rohtext_col_index, summary_col_index, version_col_index]: if None in [timestamp_col_index, website_col_index, rohtext_col_index, summary_col_index, version_col_index]:
debug_print("FEHLER: Mindestens ein benötigter Spaltenindex für process_website_batch fehlt in COLUMN_MAP.") debug_print(f"FEHLER: Mindestens ein benötigter Spaltenindex für process_website_batch fehlt in COLUMN_MAP (benötigt: '{timestamp_col_key}', 'CRM Website', 'Website Rohtext', 'Website Zusammenfassung', 'Version').")
return return
ts_col_letter = sheet_handler._get_col_letter(timestamp_col_index + 1) ts_col_letter = sheet_handler._get_col_letter(timestamp_col_index + 1)
@@ -2204,31 +2200,31 @@ def process_website_batch(sheet_handler, start_row_index_in_sheet, end_row_index
row = all_data[row_index_in_list] row = all_data[row_index_in_list]
# --- DEBUGGING Timestamp-Prüfung AT --- # --- ERZWUNGENE DEBUGGING Timestamp-Prüfung AT ---
ts_value_at = "INDEX_FEHLER" ts_value_at = "INDEX_FEHLER"
ts_at_is_set = False ts_at_is_set = False
if len(row) > timestamp_col_index: if len(row) > timestamp_col_index:
ts_value_at = row[timestamp_col_index] ts_value_at = row[timestamp_col_index]
# Konvertiere zu String VOR strip, um Fehler bei None etc. zu vermeiden
ts_at_is_set = bool(str(ts_value_at).strip()) ts_at_is_set = bool(str(ts_value_at).strip())
log_debug = (i < start_row_index_in_sheet + 5 or i > end_row_index_in_sheet - 5 or i % 500 == 0) # Gib für JEDE Zeile im Bereich die Prüfung aus
if log_debug: debug_print(f"Zeile {i} (Website Check): Prüfe Timestamp {ts_col_letter} (Index {timestamp_col_index}). Rohwert='{ts_value_at}', Strip='{str(ts_value_at).strip()}', Überspringen? -> {ts_at_is_set}")
debug_print(f"Zeile {i} (Website Check): Prüfe Timestamp {ts_col_letter} (Index {timestamp_col_index}). Rohwert='{ts_value_at}', Strip='{str(ts_value_at).strip()}', Bedingung ist: {ts_at_is_set}") # --- Ende ERZWUNGENE DEBUGGING ---
# --- Ende DEBUGGING ---
if ts_at_is_set: if ts_at_is_set:
skipped_count += 1 skipped_count += 1
if skipped_count == 1 or skipped_count % 100 == 0: # Logge nur noch selten, da wir die Prüfung oben schon loggen
debug_print(f"Zeile {i}: Überspringe Website-Scraping (Timestamp {ts_col_letter} vorhanden: '{ts_value_at.strip()}'). ({skipped_count} gesamt übersprungen)") # if skipped_count == 1 or skipped_count % 100 == 0:
# debug_print(f"Zeile {i}: Überspringe Website-Scraping (Timestamp {ts_col_letter} vorhanden). ({skipped_count} gesamt übersprungen)")
continue continue
# --- Ende Timestamp-Prüfung --- # --- Ende Timestamp-Prüfung ---
# (Rest der Logik zum Scrapen und Updaten wie zuvor)
website_url = row[website_col_index] if len(row) > website_col_index else "" website_url = row[website_col_index] if len(row) > website_col_index else ""
if not website_url or website_url.strip().lower() == "k.a.": if not website_url or website_url.strip().lower() == "k.a.":
# debug_print(f"Zeile {i}: Kein gültiger Website-Eintrag, überspringe Website-Scraping.") skipped_count += 1
skipped_count += 1 # Zähle auch diese als übersprungen
continue continue
# debug_print(f"Zeile {i}: Verarbeite Website {website_url}...") # Weniger Lärm
raw_text = get_website_raw(website_url) raw_text = get_website_raw(website_url)
summary = summarize_website_content(raw_text) summary = summarize_website_content(raw_text)
processed_count += 1 processed_count += 1
@@ -2242,24 +2238,22 @@ def process_website_batch(sheet_handler, start_row_index_in_sheet, end_row_index
updates.append({'range': f'{ts_col_letter}{i}', 'values': [[current_timestamp]]}) # AT Timestamp updates.append({'range': f'{ts_col_letter}{i}', 'values': [[current_timestamp]]}) # AT Timestamp
updates.append({'range': f'{version_col_letter}{i}', 'values': [[current_version]]}) # AP Version updates.append({'range': f'{version_col_letter}{i}', 'values': [[current_version]]}) # AP Version
# Führe Batch-Update für diese eine Zeile durch
if updates: if updates:
success = sheet_handler.batch_update_cells(updates) success = sheet_handler.batch_update_cells(updates)
if success:
debug_print(f"Zeile {i}: Website-Daten erfolgreich aktualisiert.") # Geänderte Log-Nachricht
if not success: if not success:
debug_print(f"FEHLER beim Schreiben der Website-Updates für Zeile {i}.") debug_print(f"FEHLER beim Schreiben der Website-Updates für Zeile {i}.")
# Weniger Lärm im Log bei Erfolg
# else: debug_print(f"Zeile {i}: Website-Daten aktualisiert.")
time.sleep(Config.RETRY_DELAY) # Pause *nach* der Verarbeitung einer Zeile time.sleep(Config.RETRY_DELAY)
debug_print(f"Website-Scraping (Batch) abgeschlossen. {processed_count} Websites gescraped, {skipped_count} Zeilen übersprungen.") debug_print(f"Website-Scraping (Batch) abgeschlossen. {processed_count} Websites gescraped, {skipped_count} Zeilen übersprungen.")
# Komplette Funktion process_branch_batch (prüft jetzt Timestamp AO) # Komplette Funktion process_branch_batch (prüft jetzt Timestamp AO mit erzwungenem Debugging)
def process_branch_batch(sheet_handler, start_row_index_in_sheet, end_row_index_in_sheet): def process_branch_batch(sheet_handler, start_row_index_in_sheet, end_row_index_in_sheet):
"""Batch-Prozess für Brancheneinschätzung.""" """Batch-Prozess für Brancheneinschätzung."""
debug_print(f"Starte Brancheneinschätzung (Batch) für Zeilen {start_row_index_in_sheet} bis {end_row_index_in_sheet}...") debug_print(f"Starte Brancheneinschätzung (Batch) für Zeilen {start_row_index_in_sheet} bis {end_row_index_in_sheet}...")
# Lade aktuelle Daten direkt hier
all_data = sheet_handler.get_all_data_with_headers() all_data = sheet_handler.get_all_data_with_headers()
if not all_data or len(all_data) <= 5: if not all_data or len(all_data) <= 5:
debug_print("FEHLER/WARNUNG: Keine Daten zum Verarbeiten in process_branch_batch gefunden.") debug_print("FEHLER/WARNUNG: Keine Daten zum Verarbeiten in process_branch_batch gefunden.")
@@ -2276,17 +2270,15 @@ def process_branch_batch(sheet_handler, start_row_index_in_sheet, end_row_index_
kategorien_wiki_idx = COLUMN_MAP.get("Wiki Kategorien") kategorien_wiki_idx = COLUMN_MAP.get("Wiki Kategorien")
summary_web_idx = COLUMN_MAP.get("Website Zusammenfassung") summary_web_idx = COLUMN_MAP.get("Website Zusammenfassung")
version_col_index = COLUMN_MAP.get("Version") version_col_index = COLUMN_MAP.get("Version")
# Indizes für Ergebnisspalten W, X, Y
branch_w_idx = COLUMN_MAP.get("Chat Vorschlag Branche") branch_w_idx = COLUMN_MAP.get("Chat Vorschlag Branche")
branch_x_idx = COLUMN_MAP.get("Chat Konsistenz Branche") branch_x_idx = COLUMN_MAP.get("Chat Konsistenz Branche")
branch_y_idx = COLUMN_MAP.get("Chat Begründung Abweichung Branche") branch_y_idx = COLUMN_MAP.get("Chat Begründung Abweichung Branche")
# Fehlerprüfung für Indizes
required_indices = [timestamp_col_index, branche_crm_idx, beschreibung_idx, branche_wiki_idx, required_indices = [timestamp_col_index, branche_crm_idx, beschreibung_idx, branche_wiki_idx,
kategorien_wiki_idx, summary_web_idx, version_col_index, branch_w_idx, kategorien_wiki_idx, summary_web_idx, version_col_index, branch_w_idx,
branch_x_idx, branch_y_idx] branch_x_idx, branch_y_idx]
if None in required_indices: if None in required_indices:
debug_print("FEHLER: Mindestens ein benötigter Spaltenindex für process_branch_batch fehlt in COLUMN_MAP.") debug_print(f"FEHLER: Mindestens ein benötigter Spaltenindex für process_branch_batch fehlt in COLUMN_MAP (benötigt: '{timestamp_col_key}', 'CRM Branche', etc.).")
return return
ts_col_letter = sheet_handler._get_col_letter(timestamp_col_index + 1) ts_col_letter = sheet_handler._get_col_letter(timestamp_col_index + 1)
@@ -2298,7 +2290,6 @@ def process_branch_batch(sheet_handler, start_row_index_in_sheet, end_row_index_
processed_count = 0 processed_count = 0
skipped_count = 0 skipped_count = 0
# Stelle sicher, dass das Branchenschema geladen ist
if not ALLOWED_TARGET_BRANCHES: if not ALLOWED_TARGET_BRANCHES:
load_target_schema() load_target_schema()
if not ALLOWED_TARGET_BRANCHES: if not ALLOWED_TARGET_BRANCHES:
@@ -2313,32 +2304,30 @@ def process_branch_batch(sheet_handler, start_row_index_in_sheet, end_row_index_
row = all_data[row_index_in_list] row = all_data[row_index_in_list]
# --- DEBUGGING Timestamp-Prüfung AO --- # --- ERZWUNGENE DEBUGGING Timestamp-Prüfung AO ---
ts_value_ao = "INDEX_FEHLER" ts_value_ao = "INDEX_FEHLER"
ts_ao_is_set = False ts_ao_is_set = False
if len(row) > timestamp_col_index: if len(row) > timestamp_col_index:
ts_value_ao = row[timestamp_col_index] ts_value_ao = row[timestamp_col_index]
ts_ao_is_set = bool(str(ts_value_ao).strip()) ts_ao_is_set = bool(str(ts_value_ao).strip())
log_debug = (i < start_row_index_in_sheet + 5 or i > end_row_index_in_sheet - 5 or i % 500 == 0) # Gib für JEDE Zeile im Bereich die Prüfung aus
if log_debug: debug_print(f"Zeile {i} (Branch Check): Prüfe Timestamp {ts_col_letter} (Index {timestamp_col_index}). Rohwert='{ts_value_ao}', Strip='{str(ts_value_ao).strip()}', Überspringen? -> {ts_ao_is_set}")
debug_print(f"Zeile {i} (Branch Check): Prüfe Timestamp {ts_col_letter} (Index {timestamp_col_index}). Rohwert='{ts_value_ao}', Strip='{str(ts_value_ao).strip()}', Bedingung ist: {ts_ao_is_set}") # --- Ende ERZWUNGENE DEBUGGING ---
# --- Ende DEBUGGING ---
if ts_ao_is_set: if ts_ao_is_set:
skipped_count += 1 skipped_count += 1
if skipped_count == 1 or skipped_count % 100 == 0: # if skipped_count == 1 or skipped_count % 100 == 0:
debug_print(f"Zeile {i}: Überspringe Branchen-Einschätzung (Timestamp {ts_col_letter} vorhanden: '{ts_value_ao.strip()}'). ({skipped_count} gesamt übersprungen)") # debug_print(f"Zeile {i}: Überspringe Branchen-Einschätzung (Timestamp {ts_col_letter} vorhanden). ({skipped_count} gesamt übersprungen)")
continue continue
# --- Ende Timestamp-Prüfung --- # --- Ende Timestamp-Prüfung ---
# Hole benötigte Daten aus der Zeile # (Restliche Logik zum Datenholen und Bewerten wie zuvor)
crm_branche = row[branche_crm_idx] if len(row) > branche_crm_idx else "" crm_branche = row[branche_crm_idx] if len(row) > branche_crm_idx else ""
beschreibung = row[beschreibung_idx] if len(row) > beschreibung_idx else "" beschreibung = row[beschreibung_idx] if len(row) > beschreibung_idx else ""
wiki_branche = row[branche_wiki_idx] if len(row) > branche_wiki_idx else "" wiki_branche = row[branche_wiki_idx] if len(row) > branche_wiki_idx else ""
wiki_kategorien = row[kategorien_wiki_idx] if len(row) > kategorien_wiki_idx else "" wiki_kategorien = row[kategorien_wiki_idx] if len(row) > kategorien_wiki_idx else ""
website_summary = row[summary_web_idx] if len(row) > summary_web_idx else "" website_summary = row[summary_web_idx] if len(row) > summary_web_idx else ""
# debug_print(f"Zeile {i}: Starte Brancheneinschätzung...") # Weniger Lärm
result = evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kategorien, website_summary) result = evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kategorien, website_summary)
processed_count += 1 processed_count += 1
@@ -2352,17 +2341,14 @@ def process_branch_batch(sheet_handler, start_row_index_in_sheet, end_row_index_
updates.append({'range': f'{ts_col_letter}{i}', 'values': [[current_timestamp]]}) # AO Timestamp updates.append({'range': f'{ts_col_letter}{i}', 'values': [[current_timestamp]]}) # AO Timestamp
updates.append({'range': f'{version_col_letter}{i}', 'values': [[current_version]]}) # AP Version updates.append({'range': f'{version_col_letter}{i}', 'values': [[current_version]]}) # AP Version
# Führe Batch-Update für diese eine Zeile durch
if updates: if updates:
success = sheet_handler.batch_update_cells(updates) success = sheet_handler.batch_update_cells(updates)
if success: if success:
# Weniger Lärm im Log bei Erfolg debug_print(f"Zeile {i}: Branch-Einschätzung erfolgreich aktualisiert.") # Geänderte Log-Nachricht
# debug_print(f"Zeile {i}: Branch-Einschätzung aktualisiert: {result['branch']} ({result['consistency']}) | Zeitstempel AO: {current_timestamp}, Version: {current_version}") if not success:
pass
else:
debug_print(f"FEHLER beim Schreiben der Branch-Updates für Zeile {i}.") debug_print(f"FEHLER beim Schreiben der Branch-Updates für Zeile {i}.")
time.sleep(Config.RETRY_DELAY) # Pause *nach* der Verarbeitung time.sleep(Config.RETRY_DELAY)
debug_print(f"Brancheneinschätzung (Batch) abgeschlossen. {processed_count} Zeilen eingeschätzt, {skipped_count} Zeilen übersprungen.") debug_print(f"Brancheneinschätzung (Batch) abgeschlossen. {processed_count} Zeilen eingeschätzt, {skipped_count} Zeilen übersprungen.")