bugfix
This commit is contained in:
@@ -10280,33 +10280,66 @@ class DataProcessor:
|
||||
# Der globale Root Logger wird in main() konfiguriert
|
||||
# logger = logging.getLogger(__name__) # Diesen Logger gibt es schon, keine Neudefinition hier
|
||||
|
||||
def parse_arguments():
|
||||
"""
|
||||
Parst und validiert Kommandozeilen-Argumente.
|
||||
"""
|
||||
parser = argparse.ArgumentParser(description="Automatisierte Unternehmensbewertung v1.7.8")
|
||||
parser.add_argument(
|
||||
'--mode', type=str, choices=[
|
||||
'full_run', 'reeval', 'find_wiki_serp', 'website_lookup', 'check_urls',
|
||||
'contacts', 'update_wiki_suggestions', 'wiki_reextract_missing_an',
|
||||
'website_details', 'train_technician_model', 'alignment', 'reparatur_sitz',
|
||||
'plausi_check_data', 'combined_all', 'branch_eval', 'suggest_parents', 'analyze_ml_by_branch'
|
||||
],
|
||||
help="Ausführungsmodus des Skripts."
|
||||
)
|
||||
parser.add_argument('--limit', type=int, help="Maximale Anzahl zu verarbeitender Zeilen.")
|
||||
parser.add_argument('--start_sheet_row', type=int, help="Startzeile im Google Sheet (1-basiert).")
|
||||
parser.add_argument('--end_sheet_row', type=int, help="Endzeile im Google Sheet (inklusiv).")
|
||||
parser.add_argument(
|
||||
'--steps', type=str,
|
||||
default='wiki,chat,web,ml_predict',
|
||||
help="Zu durchlaufende Schritte, kommagetrennt (z.B. 'wiki,chat'). Standard: 'wiki,chat,web,ml_predict'"
|
||||
)
|
||||
# Argumente für find_wiki_serp
|
||||
parser.add_argument('--min_employees', type=int, default=500, help="Mindestanzahl Mitarbeiter für find_wiki_serp Modus.")
|
||||
parser.add_argument('--min_umsatz', type=float, default=200.0, help="Mindestumsatz in Mio. € für find_wiki_serp Modus.")
|
||||
|
||||
# Argumente für das Speichern von ML-Modellen
|
||||
parser.add_argument('--model_out', type=str, default=MODEL_FILE, help="Ausgabepfad für das trainierte ML-Modell.")
|
||||
parser.add_argument('--imputer_out', type=str, default=IMPUTER_FILE, help="Ausgabepfad für den trainierten Imputer.")
|
||||
parser.add_argument('--patterns_out', type=str, default=PATTERNS_FILE_JSON, help="Ausgabepfad für die Feature-Patterns (JSON).")
|
||||
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def main():
|
||||
"""
|
||||
Haupteinstiegspunkt des Skripts.
|
||||
Verarbeitet Kommandozeilen-Argumente, richtet Logging ein,
|
||||
initialisiert Komponenten und dispatchet zu den passenden Modi.
|
||||
"""
|
||||
# WICHTIG: Globale Variable LOG_FILE wird benoetigt (Initialisierung Block 3)
|
||||
# 1. Argumente parsen
|
||||
args = parse_arguments()
|
||||
|
||||
# 2. Logging konfigurieren
|
||||
global LOG_FILE
|
||||
logger = logging.getLogger(__name__) # <<< JETZT AN DER RICHTIGEN STELLE
|
||||
|
||||
# --- Initial Logging Setup (Konfiguration von Level und Format) ---
|
||||
# Diese Konfiguration wird wirksam, sobald die Handler hinzugefuegt werden.
|
||||
# Standard-Logging Level festlegen (aus Config Block 1)
|
||||
log_level = logging.DEBUG if getattr(Config, 'DEBUG', False) else logging.INFO
|
||||
log_format = '%(asctime)s - %(levelname)-8s - %(name)-25s - %(message)s' # <<< DIESE ZEILE HINZUFÜGEN/KORRIGIEREN
|
||||
log_format = '%(asctime)s - %(levelname)-8s - %(name)-25s - %(message)s'
|
||||
|
||||
# Root-Logger konfigurieren (mit Console Handler, File Handler wird spaeter hinzugefuegt)
|
||||
# handlers=[] verhindert default Console Handler, wir fuegen ihn manuell hinzu fuer mehr Kontrolle
|
||||
logging.basicConfig(level=log_level, format=log_format, handlers=[]) # log_format wird hier bereits verwendet
|
||||
# Sofort einen Konsolen-Handler hinzufügen, damit frühe Meldungen sichtbar sind
|
||||
logging.basicConfig(level=log_level, format=log_format, handlers=[logging.StreamHandler()])
|
||||
|
||||
logger.info("Lade Konfigurationsdaten...")
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Lade die Schemata und Mappings NACH dem Logging-Setup
|
||||
# 3. Globale Konfigurationsdaten laden (jetzt wo das Logging läuft)
|
||||
logger.info("Lade Konfigurationsdateien...")
|
||||
Config.load_api_keys()
|
||||
ziel_schema, fokus_branchen = load_target_schema()
|
||||
branch_mapping_dict = load_branch_mapping()
|
||||
|
||||
# Wenn das Laden fehlschlägt, können wir hier sicher abbrechen
|
||||
# Prüfung, ob das Laden erfolgreich war
|
||||
if not ziel_schema:
|
||||
logger.critical("Ziel-Branchenschema konnte nicht geladen werden. Skriptabbruch.")
|
||||
return
|
||||
@@ -10314,43 +10347,16 @@ def main():
|
||||
logger.critical("Branchen-Mapping konnte nicht geladen werden. Skriptabbruch.")
|
||||
return
|
||||
|
||||
args = parse_arguments()
|
||||
|
||||
# Initialisiere den DataProcessor und übergebe ihm die geladenen Daten
|
||||
# 4. Hauptkomponenten initialisieren und die geladenen Daten übergeben
|
||||
logger.info("Initialisiere Hauptkomponenten...")
|
||||
sheet_handler = GoogleSheetHandler(Config.SHEET_ID, Config.SERVICE_ACCOUNT_FILE, Config.TOKEN_FILE)
|
||||
wiki_scraper = WikipediaScraper()
|
||||
|
||||
# +++ WICHTIGE ÄNDERUNG HIER +++
|
||||
# Wir übergeben die Daten an den Konstruktor
|
||||
data_processor = DataProcessor(sheet_handler, wiki_scraper, ziel_schema, fokus_branchen, branch_mapping_dict)
|
||||
|
||||
logger.info("DataProcessor erfolgreich initialisiert.")
|
||||
|
||||
|
||||
ZIEL_BRANCHENSCHEMA, FOKUS_BRANCHEN = load_target_schema() # Zeile 10277
|
||||
BRANCH_MAPPING = load_branch_mapping()
|
||||
|
||||
# Console Handler explizit hinzufuegen
|
||||
console_handler = logging.StreamHandler()
|
||||
console_handler.setLevel(log_level) # Nimm das globale Level
|
||||
console_handler.setFormatter(logging.Formatter(log_format)) # Jetzt sollte log_format definiert sein
|
||||
# Pruefen, ob nicht schon ein Console Handler vorhanden ist (z.B. bei wiederholten Aufrufen in Tests)
|
||||
if not any(isinstance(h, logging.StreamHandler) for h in logging.getLogger('').handlers):
|
||||
logging.getLogger('').addHandler(console_handler)
|
||||
|
||||
|
||||
# Testnachricht (geht nur an Konsole, da File Handler noch fehlt)
|
||||
logger.debug("DEBUG Logging initial konfiguriert (nur Konsole).")
|
||||
logger.info("INFO Logging initial konfiguriert (nur Konsole).")
|
||||
|
||||
|
||||
# --- Initialisierung (Argument Parser) ---
|
||||
current_script_version = getattr(Config, 'VERSION', 'unknown') # Aus Config Block 1
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
description=f"Firmen-Datenanreicherungs-Skript {current_script_version}. Automatisiert Anreicherung und Validierung aus Google Sheets.",
|
||||
formatter_class=argparse.RawTextHelpFormatter # Behaelt Formatierung im Help-Text
|
||||
)
|
||||
# 5. Modus-Dispatching (der Rest Ihrer main-Funktion)
|
||||
start_time = time.time()
|
||||
|
||||
# Liste der gueltigen Modi - MUSS mit den elif-Zweigen unten uebereinstimmen!
|
||||
# Kategorisiert fuer die Menue-Ausgabe
|
||||
|
||||
Reference in New Issue
Block a user