| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import sys
- import os
- from pathlib import Path
- from contextlib import asynccontextmanager
- # Add parent directory to path when running directly
- if __name__ == "__main__":
- backend_dir = Path(__file__).parent.parent
- if str(backend_dir) not in sys.path:
- sys.path.insert(0, str(backend_dir))
-
- # Check if dependencies are available
- # Skip check if running under uv (UV_PROJECT_ENVIRONMENT is set)
- if "UV_PROJECT_ENVIRONMENT" not in os.environ:
- try:
- import sqlmodel
- except ImportError:
- print("=" * 60)
- print("Error: Dependencies not found in current Python environment.")
- print("=" * 60)
- print("\nThis project uses 'uv' for dependency management.")
- print("\nPlease run the application using one of these methods:")
- print(" 1. uv run python app/main.py")
- print(" 2. uv run fastapi dev app/main.py (for auto-reload)")
- print("\nOr install dependencies first:")
- print(" uv sync")
- print("=" * 60)
- sys.exit(1)
- from fastapi import FastAPI
- from fastapi.middleware.cors import CORSMiddleware
- from app.api.routes import api_router
- from app.core.config import get_settings
- from app.db.session import init_models
- @asynccontextmanager
- async def lifespan(app: FastAPI):
- await init_models()
- yield
- settings = get_settings()
- app = FastAPI(
- title="Dibang Backend",
- version="0.1.0",
- lifespan=lifespan,
- )
- app.add_middleware(
- CORSMiddleware,
- allow_origins=settings.cors_origins_list,
- allow_credentials=settings.cors_allow_credentials,
- allow_methods=settings.cors_allow_methods_list,
- allow_headers=settings.cors_allow_headers_list,
- )
- app.include_router(api_router, prefix="/api")
- @app.get("/", tags=["system"])
- async def root() -> dict[str, str]:
- return {"service": "dibang-backend", "env": settings.env}
- if __name__ == "__main__":
- import uvicorn
- uvicorn.run(app, host=settings.host, port=settings.port)
|