refactor: cleaned main file
This commit is contained in:
4
core/__init__.py
Normal file
4
core/__init__.py
Normal file
@ -0,0 +1,4 @@
|
||||
from .lifespan import lifespan as lifespan
|
||||
from .app_settings import settings as settings
|
||||
from .middlewares import register_middlewares as register_middlewares
|
||||
from .exceptions import register_exception_handlers as register_exception_handlers
|
||||
11
core/app_settings.py
Normal file
11
core/app_settings.py
Normal file
@ -0,0 +1,11 @@
|
||||
from fastapi.responses import ORJSONResponse
|
||||
|
||||
|
||||
class Settings:
|
||||
ROOT_PATH = "/api"
|
||||
DEFAULT_RESPONSE_CLASS = ORJSONResponse
|
||||
ORIGINS = ["http://localhost:3000"]
|
||||
STATIC_DIR = "static"
|
||||
|
||||
|
||||
settings = Settings()
|
||||
17
core/exceptions.py
Normal file
17
core/exceptions.py
Normal file
@ -0,0 +1,17 @@
|
||||
from fastapi import Request
|
||||
from fastapi.applications import AppType
|
||||
from starlette.responses import JSONResponse
|
||||
|
||||
from utils.exceptions import ObjectNotFoundException, ForbiddenException
|
||||
|
||||
|
||||
def register_exception_handlers(app: AppType):
|
||||
@app.exception_handler(ObjectNotFoundException)
|
||||
async def not_found_exception_handler(
|
||||
request: Request, exc: ObjectNotFoundException
|
||||
):
|
||||
return JSONResponse(status_code=404, content={"detail": exc.name})
|
||||
|
||||
@app.exception_handler(ForbiddenException)
|
||||
async def forbidden_exception_handler(request: Request, exc: ForbiddenException):
|
||||
return JSONResponse(status_code=403, content={"detail": exc.name})
|
||||
16
core/lifespan.py
Normal file
16
core/lifespan.py
Normal file
@ -0,0 +1,16 @@
|
||||
import contextlib
|
||||
|
||||
from fastapi.applications import AppType
|
||||
|
||||
from task_management import broker
|
||||
|
||||
|
||||
@contextlib.asynccontextmanager
|
||||
async def lifespan(app: AppType):
|
||||
if not broker.is_worker_process:
|
||||
await broker.startup()
|
||||
|
||||
yield
|
||||
|
||||
if not broker.is_worker_process:
|
||||
await broker.shutdown()
|
||||
19
core/middlewares.py
Normal file
19
core/middlewares.py
Normal file
@ -0,0 +1,19 @@
|
||||
from fastapi.applications import AppType
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from fastapi.middleware.gzip import GZipMiddleware
|
||||
|
||||
from .app_settings import settings
|
||||
|
||||
|
||||
def register_middlewares(app: AppType):
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=settings.ORIGINS,
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
app.add_middleware(
|
||||
GZipMiddleware,
|
||||
minimum_size=1_000,
|
||||
)
|
||||
@ -10,7 +10,7 @@ from logger.constants import (
|
||||
from logger.formatter import JsonFormatter
|
||||
from logger.gunzip_rotating_file_handler import GunZipRotatingFileHandler
|
||||
from logger.filters import LevelFilter, RequestIdFilter
|
||||
from core.singleton import Singleton
|
||||
from utils.singleton import Singleton
|
||||
|
||||
|
||||
class LoggerBuilder(metaclass=Singleton):
|
||||
|
||||
68
main.py
68
main.py
@ -1,64 +1,28 @@
|
||||
import contextlib
|
||||
|
||||
import taskiq_fastapi
|
||||
from fastapi import FastAPI, Request
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from fastapi.middleware.gzip import GZipMiddleware
|
||||
from fastapi.responses import ORJSONResponse
|
||||
from fastapi import FastAPI
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
from starlette.responses import JSONResponse
|
||||
|
||||
import routers
|
||||
from core import lifespan, settings, register_middlewares, register_exception_handlers
|
||||
from task_management import broker
|
||||
from utils.auto_include_routers import auto_include_routers
|
||||
from utils.exceptions import *
|
||||
|
||||
origins = ["http://localhost:3000"]
|
||||
|
||||
|
||||
@contextlib.asynccontextmanager
|
||||
async def lifespan(app):
|
||||
if not broker.is_worker_process:
|
||||
await broker.startup()
|
||||
def create_app() -> FastAPI:
|
||||
app = FastAPI(
|
||||
separate_input_output_schemas=True,
|
||||
default_response_class=settings.DEFAULT_RESPONSE_CLASS,
|
||||
root_path=settings.ROOT_PATH,
|
||||
lifespan=lifespan,
|
||||
)
|
||||
|
||||
yield
|
||||
register_middlewares(app)
|
||||
register_exception_handlers(app)
|
||||
auto_include_routers(app, routers, full_path=True)
|
||||
app.mount("/static", StaticFiles(directory=settings.STATIC_DIR), name="static")
|
||||
|
||||
if not broker.is_worker_process:
|
||||
await broker.shutdown()
|
||||
taskiq_fastapi.init(broker, "main:app")
|
||||
return app
|
||||
|
||||
|
||||
app = FastAPI(
|
||||
separate_input_output_schemas=True,
|
||||
default_response_class=ORJSONResponse,
|
||||
root_path="/api",
|
||||
# lifespan=lifespan,
|
||||
)
|
||||
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=origins,
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
app.add_middleware(
|
||||
GZipMiddleware,
|
||||
minimum_size=1_000,
|
||||
)
|
||||
|
||||
taskiq_fastapi.init(broker, "main:app")
|
||||
|
||||
|
||||
@app.exception_handler(ObjectNotFoundException)
|
||||
async def not_found_exception_handler(request: Request, exc: ObjectNotFoundException):
|
||||
return JSONResponse(status_code=404, content={"detail": exc.name})
|
||||
|
||||
|
||||
@app.exception_handler(ForbiddenException)
|
||||
async def forbidden_exception_handler(request: Request, exc: ForbiddenException):
|
||||
return JSONResponse(status_code=403, content={"detail": exc.name})
|
||||
|
||||
|
||||
auto_include_routers(app, routers, True)
|
||||
|
||||
app.mount("/static", StaticFiles(directory="static"), name="static")
|
||||
app = create_app()
|
||||
|
||||
Reference in New Issue
Block a user