Spaces:
Runtime error
Runtime error
| import asyncio | |
| import os | |
| from contextlib import asynccontextmanager | |
| from threading import Thread | |
| from alembic import command | |
| from alembic.config import Config | |
| from fastapi import FastAPI | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from src.config import DatabaseConfig, logger | |
| from src.controllers import api_router | |
| from src.models import Base | |
| def run_upgrade(connection, alembic_config: Config): | |
| alembic_config.attributes["connection"] = connection | |
| command.upgrade(alembic_config, "head") | |
| async def run_migrations(): | |
| logger.info("Running migrations if any...") | |
| alembic_config = Config("alembic.ini") | |
| alembic_config.set_main_option( | |
| "sqlalchemy.url", os.getenv("SQLALCHEMY_DATABASE_URI") | |
| ) | |
| async with DatabaseConfig.get_engine().begin() as session: | |
| await session.run_sync(run_upgrade, alembic_config) | |
| async def lifespan(app: FastAPI): | |
| try: | |
| logger.info("Starting up the application...") | |
| await run_migrations() | |
| logger.info("Application started successfully...") | |
| yield | |
| except Exception as e: | |
| logger.error(f"Error during startup: {str(e)}") | |
| raise | |
| finally: | |
| logger.info("Shutting down the application...") | |
| logger.info("Application shutdown complete.") | |
| app = FastAPI(lifespan=lifespan) | |
| app.add_middleware( | |
| CORSMiddleware, | |
| # allow_origins=os.getenv( | |
| # "CORS_ALLOW_ORIGINS", "http://localhost, http://127.0.0.1" | |
| # ).split(", "), | |
| allow_origins=["*"], | |
| allow_credentials=False, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| async def check_health(): | |
| return {"response": "Service is healthy!"} | |
| async def delete_all_data(): | |
| async with DatabaseConfig.get_engine().begin() as session: | |
| await session.run_sync(Base.metadata.drop_all) | |
| await session.run_sync(Base.metadata.create_all) | |
| return {"response": "All data deleted successfully!"} | |
| app.include_router(api_router, prefix="/api/v1") |