"""Diagnostic script to test environment variable loading.""" import os import sys from pathlib import Path # Set UTF-8 encoding for Windows console if sys.platform == "win32": import codecs sys.stdout = codecs.getwriter("utf-8")(sys.stdout.buffer, "strict") sys.stderr = codecs.getwriter("utf-8")(sys.stderr.buffer, "strict") print("=" * 60) print("Config Diagnostic Script") print("=" * 60) # Check current directory print(f"\n1. Current working directory: {os.getcwd()}") # Check Python path print(f"\n2. Python executable: {sys.executable}") print(f" Python version: {sys.version}") # Check if we're running from backend directory in_backend = Path.cwd().name == "backend" print(f"\n3. Running from backend directory: {in_backend}") # Check .env file location env_paths = [ Path(".env"), Path("../.env"), Path.cwd().parent / ".env", Path("C:/electron/git/.env") ] print(f"\n4. Looking for .env file:") for p in env_paths: exists = p.exists() if exists: print(f" ✓ FOUND: {p}") # Show first few lines with open(p, 'r', encoding='utf-8') as f: lines = f.readlines()[:3] print(f" Content preview:") for line in lines: print(f" {line.rstrip()}") else: print(f" ✗ NOT FOUND: {p}") # Check environment variables print(f"\n5. Environment variables starting with 'GM_':") gm_vars = {k: v for k, v in os.environ.items() if k.startswith('GM_')} if gm_vars: for k, v in gm_vars.items(): # Truncate long values for display display_v = v[:30] + "..." if len(v) > 30 else v print(f" {k} = {display_v}") else: print(" (none found)") # Try python-dotenv if available print(f"\n6. Testing python-dotenv:") try: from dotenv import load_dotenv print(" python-dotenv is installed") # Try loading from different paths for env_path in env_paths: if env_path.exists(): result = load_dotenv(env_path, override=True) print(f" load_dotenv({env_path.name}): loaded {result} variables") # Check what got loaded after_vars = {k: v for k, v in os.environ.items() if k.startswith('GM_')} print(f" GM_ vars after load: {len(after_vars)}") break except ImportError: print(" python-dotenv NOT installed") # Try importing pydantic-settings print(f"\n7. Testing pydantic-settings:") try: from pydantic_settings import BaseSettings, SettingsConfigDict print(" pydantic-settings is installed") class TestSettings(BaseSettings): model_config = SettingsConfigDict( env_prefix='GM_', env_file='.env', env_file_encoding='utf-8', ) encrypt_key: str = "default" api_token: str = "default" try: s = TestSettings() print(f" ✓ Settings loaded successfully") print(f" encrypt_key: {s.encrypt_key[:20]}...") print(f" api_token: {s.api_token[:20]}...") except Exception as e: print(f" ✗ Settings failed: {type(e).__name__}: {e}") except ImportError as e: print(f" pydantic-settings NOT installed: {e}") print("\n" + "=" * 60)