main.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import sys
  2. import os
  3. from pathlib import Path
  4. from contextlib import asynccontextmanager
  5. # Add parent directory to path when running directly
  6. if __name__ == "__main__":
  7. backend_dir = Path(__file__).parent.parent
  8. if str(backend_dir) not in sys.path:
  9. sys.path.insert(0, str(backend_dir))
  10. # Check if dependencies are available
  11. # Skip check if running under uv (UV_PROJECT_ENVIRONMENT is set)
  12. if "UV_PROJECT_ENVIRONMENT" not in os.environ:
  13. try:
  14. import sqlmodel
  15. except ImportError:
  16. print("=" * 60)
  17. print("Error: Dependencies not found in current Python environment.")
  18. print("=" * 60)
  19. print("\nThis project uses 'uv' for dependency management.")
  20. print("\nPlease run the application using one of these methods:")
  21. print(" 1. uv run python app/main.py")
  22. print(" 2. uv run fastapi dev app/main.py (for auto-reload)")
  23. print("\nOr install dependencies first:")
  24. print(" uv sync")
  25. print("=" * 60)
  26. sys.exit(1)
  27. from fastapi import FastAPI
  28. from fastapi.middleware.cors import CORSMiddleware
  29. from app.api.routes import api_router
  30. from app.core.config import get_settings
  31. from app.db.session import init_models
  32. @asynccontextmanager
  33. async def lifespan(app: FastAPI):
  34. await init_models()
  35. yield
  36. settings = get_settings()
  37. app = FastAPI(
  38. title="Dibang Backend",
  39. version="0.1.0",
  40. lifespan=lifespan,
  41. )
  42. app.add_middleware(
  43. CORSMiddleware,
  44. allow_origins=settings.cors_origins_list,
  45. allow_credentials=settings.cors_allow_credentials,
  46. allow_methods=settings.cors_allow_methods_list,
  47. allow_headers=settings.cors_allow_headers_list,
  48. )
  49. app.include_router(api_router, prefix="/api")
  50. @app.get("/", tags=["system"])
  51. async def root() -> dict[str, str]:
  52. return {"service": "dibang-backend", "env": settings.env}
  53. if __name__ == "__main__":
  54. import uvicorn
  55. uvicorn.run(app, host=settings.host, port=settings.port)