58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
import asyncio
|
|
from contextlib import asynccontextmanager
|
|
from pathlib import Path
|
|
|
|
from fastapi import FastAPI
|
|
|
|
from src.cache.redis_client import redis_client
|
|
from src.database.users.crud import Seed
|
|
from src.logging.logger import LoggingMiddleware, LogWriter, ProcessingTimeMiddleware
|
|
from src.messaging.rabbitmq_client import rabbitmq_client
|
|
from src.messaging.topology_setup import apply_topology
|
|
from src.models.rabbitmq_models.email import email_topology
|
|
from src.web.protected_routes.auth_routes import router as protected_router
|
|
from src.web.protected_routes.protected_user_action_routes import (
|
|
router as protected_user_action_routes,
|
|
)
|
|
|
|
writer=LogWriter()
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
create_dirs()
|
|
channel = await rabbitmq_client.get_channel()
|
|
await apply_topology(channel, email_topology)
|
|
await create_first_user()
|
|
writer_task=asyncio.create_task(writer.log_writer())
|
|
yield
|
|
writer_task.cancel()
|
|
await redis_client.close()
|
|
await rabbitmq_client.close()
|
|
|
|
app=FastAPI(root_path="/", lifespan=lifespan)
|
|
app.add_middleware(LoggingMiddleware)
|
|
app.add_middleware(ProcessingTimeMiddleware)
|
|
app.include_router(router=protected_router)
|
|
app.include_router(router=protected_user_action_routes)
|
|
|
|
|
|
@app.get("")
|
|
async def root()->dict:
|
|
return {"root":"hello, this is root"}
|
|
|
|
|
|
def create_dirs()->None:
|
|
|
|
dirs_to_create=("./DB",
|
|
"./uploads/upload",
|
|
"./uploads/upload_bad",
|
|
"./uploads/upload_finished",
|
|
"./logs")
|
|
|
|
for x in dirs_to_create:
|
|
Path(x).mkdir(parents=True, exist_ok=True)
|
|
|
|
async def create_first_user()->None:
|
|
seed=Seed()
|
|
await seed.seed()
|
|
|