95 lines
4.1 KiB
Python
95 lines
4.1 KiB
Python
import os
|
|
import sys
|
|
import argparse
|
|
import logging
|
|
from typing import Any # Hinzugefügt
|
|
|
|
# Add the company-explorer directory to the Python path
|
|
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')))
|
|
|
|
from backend.database import get_db, Company, Industry, Persona # Added Industry and Persona for full context
|
|
from backend.services.classification import ClassificationService
|
|
from backend.lib.logging_setup import setup_logging
|
|
|
|
# --- CONFIGURATION ---
|
|
# Setup logging to be very verbose for this script
|
|
setup_logging()
|
|
logger = logging.getLogger(__name__)
|
|
logger.setLevel(logging.DEBUG)
|
|
|
|
def run_debug_analysis(company_identifier: Any, is_id: bool):
|
|
"""
|
|
Runs the full classification and enrichment process for a single company
|
|
in the foreground and prints detailed results.
|
|
"""
|
|
logger.info(f"--- Starting Interactive Debug for Company: {company_identifier} (by {'ID' if is_id else 'Name'}) ---")
|
|
|
|
db_session = next(get_db())
|
|
|
|
try:
|
|
# 1. Fetch the company
|
|
if is_id:
|
|
company = db_session.query(Company).filter(Company.id == company_identifier).first()
|
|
else:
|
|
company = db_session.query(Company).filter(Company.name == company_identifier).first()
|
|
|
|
if not company:
|
|
logger.error(f"Company with {'ID' if is_id else 'Name'} {company_identifier} not found.")
|
|
# If by name, suggest similar names
|
|
if not is_id:
|
|
all_company_names = db_session.query(Company.name).limit(20).all()
|
|
print("\nAvailable Company Names (first 20):")
|
|
for (name,) in all_company_names:
|
|
print(f"- {name}")
|
|
return
|
|
|
|
logger.info(f"Found Company: {company.name} (ID: {company.id})")
|
|
|
|
# --- PRE-ANALYSIS STATE ---
|
|
print("\n--- METRICS BEFORE ---")
|
|
print(f"Calculated: {company.calculated_metric_value} {company.calculated_metric_unit}")
|
|
print(f"Standardized: {company.standardized_metric_value} {company.standardized_metric_unit}")
|
|
print(f"Opener 1 (Infra): {company.ai_opener}")
|
|
print(f"Opener 2 (Ops): {company.ai_opener_secondary}")
|
|
print("----------------------\n")
|
|
|
|
# 2. Instantiate the service
|
|
classifier = ClassificationService()
|
|
|
|
# 3. RUN THE CORE LOGIC
|
|
# This will now print all the detailed logs we added
|
|
updated_company = classifier.classify_company_potential(company, db_session)
|
|
|
|
# --- POST-ANALYSIS STATE ---
|
|
print("\n--- METRICS AFTER ---")
|
|
print(f"Industry (AI): {updated_company.industry_ai}")
|
|
print(f"Metric Source: {updated_company.metric_source}")
|
|
print(f"Proof Text: {updated_company.metric_proof_text}")
|
|
print(f"Calculated: {updated_company.calculated_metric_value} {updated_company.calculated_metric_unit}")
|
|
print(f"Standardized: {updated_company.standardized_metric_value} {updated_company.standardized_metric_unit}")
|
|
print(f"\nOpener 1 (Infra): {updated_company.ai_opener}")
|
|
print(f"Opener 2 (Ops): {updated_company.ai_opener_secondary}")
|
|
print("---------------------")
|
|
|
|
logger.info(f"--- Interactive Debug Finished for Company: {company.name} (ID: {company.id}) ---")
|
|
|
|
except Exception as e:
|
|
logger.error(f"An error occurred during analysis: {e}", exc_info=True)
|
|
finally:
|
|
db_session.close()
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description="Run a single company analysis for debugging.")
|
|
parser.add_argument("--id", type=int, help="The ID of the company to analyze.")
|
|
parser.add_argument("--company-name", type=str, help="The name of the company to analyze.")
|
|
args = parser.parse_args()
|
|
|
|
if args.id and args.company_name:
|
|
parser.error("Please provide either --id or --company-name, not both.")
|
|
elif args.id:
|
|
run_debug_analysis(args.id, is_id=True)
|
|
elif args.company_name:
|
|
run_debug_analysis(args.company_name, is_id=False)
|
|
else:
|
|
parser.error("Please provide either --id or --company-name.")
|