fuware-be/fuware/app.py

88 lines
2.2 KiB
Python

from collections.abc import AsyncGenerator
from contextlib import asynccontextmanager
from mimetypes import init
from fastapi import FastAPI, Request, HTTPException
from fastapi.responses import JSONResponse
from fastapi.middleware.cors import CORSMiddleware
from fastapi.middleware.gzip import GZipMiddleware
from fuware.core.config import get_app_settings
from fuware.core.root_logger import get_logger
from fuware.routes import router
from fuware import __version__
import uvicorn
settings = get_app_settings()
logger = get_logger()
description = f"""
fuware is a web application for managing your hours items and tracking them.
"""
@asynccontextmanager
async def lifespan_fn(_: FastAPI) -> AsyncGenerator[None, None]:
logger.info("start: database initialization")
import fuware.db.init_db as init_db
init_db.main()
logger.info("end: database initialization")
logger.info("-----SYSTEM STARTUP-----")
# logger.info("------APP SETTINGS------")
# logger.info(
# settings.model_dump_json(
# indent=4,
# exclude={
# "SECRET",
# "DB_URL", # replace by DB_URL_PUBLIC for logs
# "DB_PROVIDER",
# },
# )
# )
yield
logger.info("-----SYSTEM SHUTDOWN-----")
app = FastAPI(
title="Fuware",
description=description,
version=__version__,
docs_url=settings.DOCS_URL,
redoc_url=settings.REDOC_URL,
lifespan=lifespan_fn,
)
app.add_middleware(GZipMiddleware, minimum_size=1000)
if not settings.PRODUCTION:
allowed_origins = ["http://localhost:3000"]
app.add_middleware(
CORSMiddleware,
allow_origins=allowed_origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.exception_handler(HTTPException)
async def unicorn_exception_handler(request: Request, exc: HTTPException):
return JSONResponse(
status_code=exc.status_code,
content={"status": exc.status_code, "data": exc.detail},
)
def api_routers():
app.include_router(router)
api_routers()
# app.include_router(authR.authRouter)
# app.include_router(userR.userRouter)
def main():
uvicorn.run("app:app", host="0.0.0.0", port=settings.API_PORT, reload=True, workers=1, forwarded_allow_ips="*")
if __name__ == "__main__":
main()