lerafoxqueen/LeraFoxQueen/main.py

75 lines
2.0 KiB
Python

# import pathlib
import datetime
import uuid
from contextlib import asynccontextmanager
from fastapi import FastAPI, Request, HTTPException
from fastapi.responses import HTMLResponse, JSONResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from .database import create_tables, delete_tables
from .router import router as datings_router
from .validity import is_valid_uuid
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
OPENAPI_URL: str = "/openapi.json"
model_config = SettingsConfigDict(
env_file=(".env", ".env.local", ".env.prod"),
env_file_encoding="utf-8",
case_sensitive=True
)
settings = Settings()
@asynccontextmanager
async def lifespan(app: FastAPI):
await create_tables()
print("База готова")
yield
# await delete_tables()
# print("База очищена")
pass
app = FastAPI(
lifespan=lifespan, docs_url=None, redoc_url=None, openapi_url=settings.OPENAPI_URL
)
templates = Jinja2Templates(directory="templates")
app.include_router(datings_router)
app.mount("/static", StaticFiles(directory="static"), name="static")
@app.get("/", response_class=HTMLResponse)
async def index(request: Request):
response = templates.TemplateResponse("index.html", {"request": request})
sessionKey = request.cookies.get("sessionkey")
if isinstance(sessionKey, str) and is_valid_uuid(sessionKey):
pass
else:
days = 365
expires_t_obj = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(
days=days
)
expires_t_str = expires_t_obj.strftime("%a, %d %b %Y %H:%M:%S GMT")
response.set_cookie(
key="sessionkey", value=str(uuid.uuid4()), expires=expires_t_str
)
return response
@app.exception_handler(HTTPException)
async def http_exception_handler(request, exc):
return JSONResponse(status_code=exc.status_code, content={"detail": exc.detail})