AudioForge / backend /scripts /verify_setup.py
OnyxlMunkey's picture
c618549
#!/usr/bin/env python3
"""Verify AudioForge backend setup."""
import sys
from pathlib import Path
# Fix Windows console encoding
if sys.platform == "win32":
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace')
def check_python_version():
"""Check Python version."""
if sys.version_info < (3, 11):
print("[ERROR] Python 3.11+ required")
print(f" Current version: {sys.version}")
return False
print(f"[OK] Python version: {sys.version.split()[0]}")
return True
def check_dependencies():
"""Check if dependencies are installed."""
required_packages = [
"fastapi",
"uvicorn",
"pydantic",
"sqlalchemy",
"structlog",
"torch",
"librosa",
]
missing = []
for package in required_packages:
try:
__import__(package)
except ImportError:
missing.append(package)
if missing:
print(f"[ERROR] Missing packages: {', '.join(missing)}")
print(" Run: uv pip install -e '.[dev]'")
return False
print("[OK] All required packages installed")
return True
def check_env_file():
"""Check if .env file exists."""
env_path = Path(".env")
env_example = Path(".env.example")
if not env_path.exists():
if env_example.exists():
print("[WARN] .env file not found")
print(" Creating .env from .env.example...")
import shutil
shutil.copy(env_example, env_path)
print("[OK] .env file created (please review and configure)")
return True
else:
print("[ERROR] .env.example not found")
return False
print("[OK] .env file exists")
return True
def check_storage_dirs():
"""Check if storage directories exist."""
storage_path = Path("storage/audio")
required_dirs = ["music", "vocals", "mixed", "mastered"]
missing = []
for subdir in required_dirs:
dir_path = storage_path / subdir
if not dir_path.exists():
missing.append(str(dir_path))
if missing:
print(f"[WARN] Missing storage directories:")
for d in missing:
print(f" {d}")
print(" Creating directories...")
for d in missing:
Path(d).mkdir(parents=True, exist_ok=True)
print("[OK] Storage directories created")
else:
print("[OK] Storage directories exist")
return True
def check_database_config():
"""Check database configuration."""
try:
from app.core.config import settings
db_url = settings.DATABASE_URL
if "postgresql" in db_url:
print("[OK] Database URL configured")
return True
else:
print("[WARN] Database URL may be incorrect")
return False
except ImportError as e:
print(f"[WARN] Cannot check config (dependencies not installed): {e}")
print(" Install dependencies first: uv pip install -e '.[dev]'")
return False
except Exception as e:
print(f"[ERROR] Error loading config: {e}")
return False
def main():
"""Run all checks."""
print("AudioForge Backend Setup Verification")
print("=" * 50)
print()
checks = [
("Python Version", check_python_version),
("Dependencies", check_dependencies),
("Environment File", check_env_file),
("Storage Directories", check_storage_dirs),
("Database Config", check_database_config),
]
results = []
for name, check_func in checks:
print(f"\n{name}:")
result = check_func()
results.append(result)
print("\n" + "=" * 50)
if all(results):
print("[OK] All checks passed! Ready to run.")
return 0
else:
print("[ERROR] Some checks failed. Please fix issues above.")
return 1
if __name__ == "__main__":
sys.exit(main())