From 045b27e06538c062bbffb9ccf680d92f9a7dc024 Mon Sep 17 00:00:00 2001 From: Floke Date: Fri, 18 Jul 2025 09:49:25 +0000 Subject: [PATCH] Batch mode Wiki Verify --- data_processor.py | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/data_processor.py b/data_processor.py index fb7c0303..3406b4dd 100644 --- a/data_processor.py +++ b/data_processor.py @@ -968,8 +968,9 @@ class DataProcessor: """ Iteriert durch die Zeilen und führt eine ChatGPT-basierte Verifizierung des in Spalte R ("Wiki URL") gefundenen Artikels durch. + NEU: Arbeitet im Batch-Modus, sammelt alle Updates und schreibt sie am Ende. """ - self.logger.info("Starte Modus: Wiki-Verifizierung via ChatGPT...") + self.logger.info("Starte Modus: Wiki-Verifizierung via ChatGPT (Batch-Modus)...") if not self.sheet_handler.load_data(): return @@ -977,29 +978,26 @@ class DataProcessor: all_data = self.sheet_handler.get_all_data_with_headers() header_rows = self.sheet_handler._header_rows - # Bestimme den Bereich der zu verarbeitenden Zeilen start_row_idx = (start_sheet_row - 1) if start_sheet_row is not None else header_rows end_row_idx = (end_sheet_row - 1) if end_sheet_row is not None else len(all_data) - 1 - # Wähle die relevanten Zeilen aus dem gesamten Datensatz aus rows_to_process = all_data[start_row_idx : end_row_idx + 1] processed_count = 0 - # Iteriere durch die ausgewählten Zeilen + all_updates = [] # Liste zum Sammeln aller Updates + for idx, row_data in enumerate(rows_to_process): - # Berechne die tatsächliche Zeilennummer im Google Sheet current_row_num = start_row_idx + idx + 1 if limit is not None and processed_count >= limit: - self.logger.info(f"Limit von {limit} Zeilen erreicht. Stoppe Wiki-Verifizierung.") + self.logger.info(f"Limit von {limit} Zeilen erreicht. Stoppe Sammelphase.") break - # Prüflogik verif_timestamp = self._get_cell_value_safe(row_data, "Wiki Verif. Timestamp").strip() wiki_url = self._get_cell_value_safe(row_data, "Wiki URL").strip() if not verif_timestamp and wiki_url and "wikipedia.org" in wiki_url.lower(): - self.logger.info(f"Zeile {current_row_num}: Verifizierung nötig (Timestamp leer, URL vorhanden).") + self.logger.info(f"Zeile {current_row_num}: Verifizierung nötig, füge zur Queue hinzu.") company_name = self._get_cell_value_safe(row_data, "CRM Name") website = self._get_cell_value_safe(row_data, "CRM Website") @@ -1011,19 +1009,15 @@ class DataProcessor: wiki_url=wiki_url ) - updates = [] now_timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") if verification_result: - updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Wiki Konsistenzpruefung"] + 1)}{current_row_num}', 'values': [[verification_result.get("consistency", "FEHLER")]]}) - updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Begründung Wiki Inkonsistenz"] + 1)}{current_row_num}', 'values': [[verification_result.get("justification", "")]]}) - updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Vorschlag Wiki Artikel"] + 1)}{current_row_num}', 'values': [[verification_result.get("suggested_url", "")]]}) + all_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Wiki Konsistenzpruefung"] + 1)}{current_row_num}', 'values': [[verification_result.get("consistency", "FEHLER")]]}) + all_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Begründung Wiki Inkonsistenz"] + 1)}{current_row_num}', 'values': [[verification_result.get("justification", "")]]}) + all_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Vorschlag Wiki Artikel"] + 1)}{current_row_num}', 'values': [[verification_result.get("suggested_url", "")]]}) - updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Wiki Verif. Timestamp"] + 1)}{current_row_num}', 'values': [[now_timestamp]]}) + all_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Wiki Verif. Timestamp"] + 1)}{current_row_num}', 'values': [[now_timestamp]]}) - if updates: - self.sheet_handler.batch_update_cells(updates) - processed_count += 1 time.sleep(2) @@ -1032,6 +1026,14 @@ class DataProcessor: else: self.logger.debug(f"Zeile {current_row_num}: Übersprungen (Timestamp vorhanden oder keine URL).") + # Schreibe alle gesammelten Updates auf einmal ins Sheet + if all_updates: + self.logger.info(f"Sammelphase abgeschlossen. Schreibe {len(all_updates)} Zell-Updates für {processed_count} Zeilen ins Google Sheet...") + self.sheet_handler.batch_update_cells(all_updates) + self.logger.info("Batch-Update erfolgreich abgeschlossen.") + else: + self.logger.info("Keine Zeilen zur Verifizierung gefunden oder keine Updates generiert.") + self.logger.info(f"Wiki-Verifizierung abgeschlossen. {processed_count} Zeilen verarbeitet.")