Files
orion/app/core/lifespan.py
Samir Boulahtit 238c1ec9b8 refactor: modernize code quality tooling with Ruff
- Replace black, isort, and flake8 with Ruff (all-in-one linter and formatter)
- Add comprehensive pyproject.toml configuration
- Simplify Makefile code quality targets
- Configure exclusions for venv/.venv in pyproject.toml
- Auto-fix 1,359 linting issues across codebase

Benefits:
- Much faster builds (Ruff is written in Rust)
- Single tool replaces multiple tools
- More comprehensive rule set (UP, B, C4, SIM, PIE, RET, Q)
- All configuration centralized in pyproject.toml
- Better import sorting and formatting consistency

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 19:37:38 +01:00

103 lines
2.8 KiB
Python

# app/core/lifespan.py
"""Application lifespan management - Clean Migration Approach.
This module provides classes and functions for:
- Application startup and shutdown events
- Logging setup
- Default user creation
- NO database table creation (handled by Alembic)
"""
import logging
from contextlib import asynccontextmanager
from fastapi import FastAPI
from sqlalchemy import text
from middleware.auth import AuthManager
from .database import engine
from .logging import setup_logging
# Remove this import if not needed: from models.database.base import Base
logger = logging.getLogger(__name__)
auth_manager = AuthManager()
@asynccontextmanager
async def lifespan(app: FastAPI):
"""Application lifespan events - Clean migration approach."""
# === STARTUP ===
app_logger = setup_logging()
app_logger.info("Starting up ecommerce API")
logger.info("[OK] Application startup completed")
yield
# === SHUTDOWN ===
app_logger.info("Shutting down ecommerce API")
# Add cleanup tasks here if needed
# === NEW HELPER FUNCTION ===
def check_database_ready():
"""Check if database is ready (migrations have been run)."""
try:
with engine.connect() as conn:
# Try to query a table that should exist
result = conn.execute(
text("SELECT name FROM sqlite_master WHERE type='table' LIMIT 1")
)
tables = result.fetchall()
return len(tables) > 0
except Exception:
return False
def get_migration_status():
"""Get current Alembic migration status."""
try:
from alembic.config import Config
alembic_cfg = Config("alembic.ini")
# This would need more implementation to actually check status
# For now, just return a placeholder
return "Migration status check not implemented"
except Exception as e:
logger.warning(f"Could not check migration status: {e}")
return "Unknown"
# === STARTUP VERIFICATION (Optional) ===
def verify_startup_requirements():
"""Verify that all startup requirements are met."""
issues = []
# Check if database exists and has tables
if not check_database_ready():
issues.append("Database not ready - run 'make migrate-up' first")
# Add other checks as needed
# - Configuration validation
# - External service connectivity
# - Required environment variables
if issues:
logger.error("[ERROR] Startup verification failed:")
for issue in issues:
logger.error(f" - {issue}")
return False
logger.info("[OK] Startup verification passed")
return True
# You can call this in your main.py if desired:
# if not verify_startup_requirements():
# raise RuntimeError("Application startup requirements not met")