bugfix
This commit is contained in:
@@ -1063,12 +1063,12 @@ def load_target_schema(csv_filepath=BRANCH_MAPPING_FILE):
|
||||
|
||||
logger.info(f"Lade Ziel-Schema und Fokus-Branchen aus '{csv_filepath}'...")
|
||||
|
||||
try:
|
||||
with open(csv_filepath, "r", encoding="utf-8-sig") as f:
|
||||
reader = csv.reader(f)
|
||||
try:
|
||||
header_row = next(reader) # Überspringe Header
|
||||
logger.debug(f"Ueberspringe Header-Zeile im Schema: {header_row}")
|
||||
try:
|
||||
with open(csv_filepath, "r", encoding="utf-8-sig") as f:
|
||||
reader = csv.reader(f, delimiter=';') # <<< HINZUGEFÜGT: delimiter=';'
|
||||
try:
|
||||
header_row = next(reader)
|
||||
logger.debug(f"Ueberspringe Header-Zeile im Schema: {header_row}")
|
||||
except StopIteration:
|
||||
logger.warning(f"Schema-Datei '{csv_filepath}' ist leer oder hat keinen Header.")
|
||||
TARGET_SCHEMA_STRING = "Ziel-Branchenschema nicht verfuegbar (Datei leer)."
|
||||
@@ -9564,6 +9564,21 @@ def main():
|
||||
# openai_handler = OpenAIHandler()
|
||||
# serpapi_handler = SerpAPIHandler()
|
||||
|
||||
logger.info("===== Spalten-Alignment Check =====")
|
||||
if sheet_handler and sheet_handler.sheet_values and len(sheet_handler.sheet_values) > 0:
|
||||
sheet_headers = sheet_handler.sheet_values[0]
|
||||
logger.info(f"Header aus Google Sheet (erste {len(sheet_headers)} Spalten): {sheet_headers}")
|
||||
|
||||
# Ausgabe der COLUMN_MAP für den Abgleich (gekürzt für Lesbarkeit im Log)
|
||||
logger.info("Aktuelle COLUMN_MAP (Auszug):")
|
||||
for i, (key, value) in enumerate(COLUMN_MAP.items()):
|
||||
if i < 5 or i > len(COLUMN_MAP) - 6 : # Zeige erste 5 und letzte 5
|
||||
logger.info(f" '{key}': {value}")
|
||||
elif i == 5:
|
||||
logger.info(" ...")
|
||||
else:
|
||||
logger.warning("Konnte Header nicht aus Google Sheet laden für Alignment Check.")
|
||||
logger.info("===================================")
|
||||
|
||||
# Initialisiere DataProcessor Instanz (Block 15) mit Handlern
|
||||
# Uebergeben Sie alle benoetigten Handler an den DataProcessor.
|
||||
@@ -9658,6 +9673,60 @@ def main():
|
||||
print(f"Ein Fehler ist bei der Modus-Eingabe aufgetreten ({e}). Bitte pruefen Sie die Logdatei.")
|
||||
return # Beende das Skript bei unerwartetem Fehler
|
||||
|
||||
# ==============================================================================
|
||||
# === NEUER BLOCK: Interaktive Limit-Abfrage ===
|
||||
# ==============================================================================
|
||||
limit_arg_cli = args.limit # ursprüngliches Limit vom CLI Argument
|
||||
final_limit_to_use = limit_arg_cli # Standardmäßig das CLI-Limit verwenden
|
||||
|
||||
# Wenn kein Limit über CLI gesetzt wurde UND der Modus nicht einer der ist,
|
||||
# bei denen ein Zeilenlimit typischerweise keinen Sinn macht.
|
||||
# (Für 'alignment' und 'train_technician_model' ist ein Zeilen-Durchlauf-Limit meist nicht relevant)
|
||||
# 'check_urls' und andere Batch-Modi können aber von einem Limit profitieren.
|
||||
skippable_limit_modes = ['alignment', 'train_technician_model']
|
||||
|
||||
if final_limit_to_use is None and selected_mode not in skippable_limit_modes:
|
||||
while True:
|
||||
try:
|
||||
limit_input_str = input(f"Maximale Anzahl zu verarbeitender Zeilen für Modus '{selected_mode}' (Enter für Unbegrenzt, aktuell: Unbegrenzt): ").strip()
|
||||
if not limit_input_str: # Benutzer drückt Enter
|
||||
final_limit_to_use = None
|
||||
logger.info("Kein Limit für Zeilenverarbeitung gesetzt (interaktiv).")
|
||||
break
|
||||
|
||||
# Versuche, in Integer umzuwandeln
|
||||
temp_limit = int(limit_input_str)
|
||||
|
||||
if temp_limit <= 0:
|
||||
logger.warning(f"Ungültiges Limit '{temp_limit}' (<=0) eingegeben, wird als Unbegrenzt behandelt.")
|
||||
final_limit_to_use = None
|
||||
else:
|
||||
final_limit_to_use = temp_limit
|
||||
logger.info(f"Limit für Zeilenverarbeitung (interaktiv gesetzt): {final_limit_to_use}")
|
||||
break # Gültige Eingabe oder Entscheidung für "Unbegrenzt"
|
||||
except ValueError:
|
||||
print("Ungültige Eingabe. Bitte eine ganze Zahl eingeben oder Enter für Unbegrenzt.")
|
||||
except EOFError:
|
||||
logger.warning("Interaktive Limit-Eingabe abgebrochen. Nutze kein Limit (oder CLI-Vorgabe, falls vorhanden).")
|
||||
# final_limit_to_use behält den Wert von limit_arg_cli (also None, wenn hierher gekommen)
|
||||
break
|
||||
except Exception as e_limit_input:
|
||||
logger.error(f"Unerwarteter Fehler bei interaktiver Limit-Eingabe: {e_limit_input}")
|
||||
logger.debug(traceback.format_exc())
|
||||
print("Ein Fehler ist bei der Limit-Eingabe aufgetreten. Nutze kein Limit.")
|
||||
final_limit_to_use = None
|
||||
break
|
||||
elif final_limit_to_use is not None: # Wenn ein Limit via CLI gesetzt wurde
|
||||
logger.info(f"Verwende Limit aus CLI-Argument: {final_limit_to_use}")
|
||||
elif selected_mode in skippable_limit_modes and final_limit_to_use is None:
|
||||
logger.info(f"Modus '{selected_mode}' benötigt typischerweise kein Zeilenlimit. Limit-Abfrage übersprungen.")
|
||||
|
||||
|
||||
# Die Variable `final_limit_to_use` enthält nun das anzuwendende Limit (entweder von CLI, interaktiv oder None)
|
||||
# ==============================================================================
|
||||
# === ENDE NEUER BLOCK ===
|
||||
# ==============================================================================
|
||||
|
||||
|
||||
# --- Ausfuehrung des gewaehlten Modus ---
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user