bugfix
This commit is contained in:
@@ -2462,15 +2462,16 @@ class DataProcessor:
|
||||
debug_print(f"Modus 22 abgeschlossen. {rows_processed} Websites ergänzt.")
|
||||
|
||||
|
||||
# ==================== MAIN FUNCTION ====================
|
||||
# ==================== MAIN FUNCTION ====================
|
||||
def main():
|
||||
global MODE, LOG_FILE # MODE wird nicht mehr global benötigt, aber LOG_FILE schon
|
||||
global MODE, LOG_FILE # MODE wieder global, da es in älteren Teilen evtl. noch referenziert wird? Besser wäre es zu übergeben.
|
||||
|
||||
# --- Initialisierung ---
|
||||
# Argument Parser
|
||||
parser = argparse.ArgumentParser(description="Firmen-Datenanreicherungs-Skript")
|
||||
parser.add_argument("--mode", type=str, help="Betriebsmodus (z.B. combined, wiki, website, branch, reeval, website_lookup, website_details, contacts, full_run)")
|
||||
parser.add_argument("--limit", type=int, help="Maximale Anzahl zu verarbeitender Zeilen (für Batch/sequentielle Modi)", default=None)
|
||||
parser.add_argument("--limit", type=int, help="Maximale Anzahl zu verarbeitender Zeilen (für Batch/sequentielle Modi)", default=None) # Korrekter Name: --limit
|
||||
args = parser.parse_args()
|
||||
|
||||
# Lade API Keys
|
||||
@@ -2479,21 +2480,14 @@ def main():
|
||||
# Betriebsmodus ermitteln
|
||||
valid_modes = ["combined", "wiki", "website", "branch", "reeval", "website_lookup", "website_details", "contacts", "full_run"]
|
||||
mode = None
|
||||
# --> NEUE LOGIK: Priorisiere Kommandozeilenargumente
|
||||
if args.mode and args.mode.lower() in valid_modes:
|
||||
mode = args.mode.lower()
|
||||
print(f"Betriebsmodus (aus Kommandozeile): {mode}")
|
||||
else:
|
||||
# Nur wenn KEIN Modus über die Kommandozeile kam, FRAGE interaktiv
|
||||
print("Bitte wählen Sie den Betriebsmodus:")
|
||||
print(" combined: Wiki-Verifizierung, Website-Scraping & Branch-Einschätzung (Batch, ab erster leerer Zeile)")
|
||||
print(" wiki: Nur Wikipedia-Verifizierung (Batch, ab erster leerer Zeile)")
|
||||
print(" website: Nur Website-Scraping & Zusammenfassung (Batch, ab erster leerer Zeile)")
|
||||
print(" branch: Nur Branchen-Einschätzung (Batch, ab erster leerer Zeile)")
|
||||
print(" reeval: Verarbeitet alle Zeilen mit 'x' in Spalte A (volle Verarbeitung)")
|
||||
print(" website_lookup: Sucht fehlende Websites (Spalte D) via SERP API")
|
||||
print(" website_details:Extrahiert Title/Desc/H-Tags für Zeilen mit 'x' in Spalte A")
|
||||
print(" contacts: Sucht LinkedIn Kontakte via SERP API und schreibt in 'Contacts' Blatt")
|
||||
print(" full_run: Verarbeitet alle Zeilen sequentiell ab der ersten ohne Zeitstempel (AO)")
|
||||
# print(" 8: Batch Token-Zählung (Platzhalter)") # Modus 8 entfernt/umbenannt?
|
||||
# ... (Liste der Modi ausgeben) ...
|
||||
mode_input = input(f"Geben Sie den Modus ein ({', '.join(valid_modes)}): ").strip().lower()
|
||||
if mode_input in valid_modes:
|
||||
mode = mode_input
|
||||
@@ -2502,8 +2496,13 @@ def main():
|
||||
mode = "combined" # Standardmodus
|
||||
|
||||
# Zeilenlimit ermitteln
|
||||
row_limit = args.limit
|
||||
if row_limit is None and mode in ["combined", "wiki", "website", "branch", "full_run"]:
|
||||
row_limit = None
|
||||
# --> NEUE LOGIK: Priorisiere Kommandozeilenargumente
|
||||
if args.limit is not None: # Prüfe, ob --limit gesetzt wurde
|
||||
row_limit = args.limit
|
||||
print(f"Zeilenlimit (aus Kommandozeile): {row_limit}")
|
||||
# Nur wenn KEIN Limit über die Kommandozeile kam UND es ein Modus ist, der ein Limit brauchen könnte, FRAGE interaktiv
|
||||
elif mode in ["combined", "wiki", "website", "branch", "full_run"]:
|
||||
try:
|
||||
limit_input = input("Wie viele Zeilen sollen maximal bearbeitet werden? (Enter für alle) ")
|
||||
if limit_input.strip():
|
||||
@@ -2515,77 +2514,26 @@ def main():
|
||||
except ValueError:
|
||||
print("Ungültige Eingabe für Zeilenlimit. Es werden alle Zeilen verarbeitet.")
|
||||
row_limit = None
|
||||
elif row_limit is not None:
|
||||
print(f"Zeilenlimit (aus Kommandozeile): {row_limit}")
|
||||
# Füge eine Sicherheitsprüfung hinzu, falls input() in nohup aufgerufen würde
|
||||
except OSError as e:
|
||||
if e.errno == 9: # Bad file descriptor
|
||||
print("Warnung: Interaktive Abfrage des Limits nicht möglich (läuft im Hintergrund?). Kein Limit gesetzt.")
|
||||
row_limit = None
|
||||
else:
|
||||
raise # Anderen OSError weiterwerfen
|
||||
|
||||
|
||||
# --- Rest der main() Funktion bleibt gleich ---
|
||||
# Logfile initialisieren
|
||||
LOG_FILE = create_log_filename(mode)
|
||||
debug_print(f"===== Skript gestartet =====")
|
||||
debug_print(f"Version: {Config.VERSION}")
|
||||
debug_print(f"Betriebsmodus: {mode}")
|
||||
debug_print(f"Zeilenlimit: {row_limit if row_limit is not None else 'Unbegrenzt'}")
|
||||
debug_print(f"Logdatei: {LOG_FILE}")
|
||||
|
||||
# --- Vorbereitung ---
|
||||
# Lade Branchenschema
|
||||
load_target_schema()
|
||||
|
||||
# Initialisiere Google Sheet Handler
|
||||
try:
|
||||
sheet_handler = GoogleSheetHandler()
|
||||
except Exception as e:
|
||||
debug_print(f"FATAL: Konnte Google Sheet Handler nicht initialisieren: {e}")
|
||||
return # Abbruch
|
||||
|
||||
# Initialisiere DataProcessor
|
||||
data_processor = DataProcessor(sheet_handler)
|
||||
|
||||
# Optional: Alignment Demo für Hauptblatt ausführen?
|
||||
# run_alignment = input("Sollen die Header im Hauptblatt aktualisiert werden (Alignment Demo)? (j/N): ").lower()
|
||||
# if run_alignment == 'j':
|
||||
# alignment_demo(sheet_handler.sheet)
|
||||
|
||||
# --- Modusausführung ---
|
||||
start_time = time.time()
|
||||
debug_print(f"Starte Verarbeitung um {datetime.now().strftime('%H:%M:%S')}...")
|
||||
|
||||
try:
|
||||
if mode in ["wiki", "website", "branch", "combined"]:
|
||||
run_dispatcher(mode, sheet_handler, row_limit)
|
||||
elif mode == "reeval":
|
||||
data_processor.process_reevaluation_rows()
|
||||
elif mode == "website_lookup":
|
||||
data_processor.process_serp_website_lookup_for_empty()
|
||||
elif mode == "website_details":
|
||||
data_processor.process_website_details_for_marked_rows()
|
||||
elif mode == "contacts":
|
||||
process_contact_research(sheet_handler) # Übergib den Handler
|
||||
elif mode == "full_run":
|
||||
start_index = sheet_handler.get_start_row_index() # Index in Datenliste
|
||||
num_to_process = row_limit if row_limit is not None else len(sheet_handler.get_data()) - start_index
|
||||
if num_to_process > 0:
|
||||
data_processor.process_rows_sequentially(start_index, num_to_process, process_wiki=True, process_chatgpt=True, process_website=True)
|
||||
else:
|
||||
debug_print("Keine Zeilen für 'full_run' zu verarbeiten.")
|
||||
# elif mode == "8": # Token Count - was soll hier passieren?
|
||||
# debug_print("Modus 8 (Token Count) ist derzeit nicht implementiert.")
|
||||
else:
|
||||
debug_print(f"Unbekannter Modus '{mode}' - keine Aktion ausgeführt.")
|
||||
|
||||
except Exception as e:
|
||||
debug_print(f"FATAL: Unerwarteter Fehler auf oberster Ebene: {e}")
|
||||
import traceback
|
||||
debug_print(traceback.format_exc()) # Detaillierten Stacktrace loggen
|
||||
|
||||
# --- Abschluss ---
|
||||
end_time = time.time()
|
||||
duration = end_time - start_time
|
||||
debug_print(f"Verarbeitung abgeschlossen um {datetime.now().strftime('%H:%M:%S')}.")
|
||||
debug_print(f"Gesamtdauer: {duration:.2f} Sekunden.")
|
||||
debug_print(f"===== Skript beendet =====")
|
||||
print(f"Verarbeitung abgeschlossen. Logfile: {LOG_FILE}")
|
||||
# ... (Logging der Startparameter) ...
|
||||
# ... (Schema laden) ...
|
||||
# ... (Sheet Handler initialisieren) ...
|
||||
# ... (DataProcessor initialisieren) ...
|
||||
# ... (Modusausführung) ...
|
||||
# ... (Abschluss) ...
|
||||
|
||||
# (Der Rest der Datei bleibt unverändert)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user