mirror of
https://github.com/jaypyles/Scraperr.git
synced 2025-11-18 15:16:29 +00:00
78 lines
2.2 KiB
Python
78 lines
2.2 KiB
Python
# STL
|
|
import os
|
|
import logging
|
|
import apscheduler # type: ignore
|
|
|
|
# PDM
|
|
import apscheduler.schedulers
|
|
import apscheduler.schedulers.background
|
|
from fastapi import FastAPI, Request, status
|
|
from fastapi.exceptions import RequestValidationError
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
|
|
# LOCAL
|
|
from api.backend.ai.ai_router import ai_router
|
|
from api.backend.auth.auth_router import auth_router
|
|
from api.backend.utils import get_log_level
|
|
from api.backend.routers.job_router import job_router
|
|
from api.backend.routers.log_router import log_router
|
|
from api.backend.routers.stats_router import stats_router
|
|
from api.backend.database.startup import init_database
|
|
from fastapi.responses import JSONResponse
|
|
|
|
from api.backend.job.cron_scheduling.cron_scheduling import start_cron_scheduler
|
|
from api.backend.scheduler import scheduler
|
|
|
|
log_level = os.getenv("LOG_LEVEL")
|
|
LOG_LEVEL = get_log_level(log_level)
|
|
|
|
logging.basicConfig(
|
|
level=LOG_LEVEL,
|
|
format="%(levelname)s: %(asctime)s - %(name)s - %(message)s",
|
|
handlers=[logging.StreamHandler()],
|
|
)
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
app = FastAPI(title="api", root_path="/api")
|
|
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=["*"],
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
|
|
app.include_router(auth_router)
|
|
app.include_router(ai_router)
|
|
app.include_router(job_router)
|
|
app.include_router(log_router)
|
|
app.include_router(stats_router)
|
|
|
|
|
|
@app.on_event("startup")
|
|
async def startup_event():
|
|
start_cron_scheduler(scheduler)
|
|
scheduler.start()
|
|
|
|
if os.getenv("ENV") != "test":
|
|
init_database()
|
|
LOG.info("Starting up...")
|
|
|
|
|
|
@app.on_event("shutdown")
|
|
def shutdown_scheduler():
|
|
scheduler.shutdown(wait=False) # Set wait=False to not block shutdown
|
|
|
|
|
|
@app.exception_handler(RequestValidationError)
|
|
async def validation_exception_handler(request: Request, exc: RequestValidationError):
|
|
exc_str = f"{exc}".replace("\n", " ").replace(" ", " ")
|
|
logging.error(f"{request}: {exc_str}")
|
|
content = {"status_code": 10422, "message": exc_str, "data": None}
|
|
return JSONResponse(
|
|
content=content, status_code=status.HTTP_422_UNPROCESSABLE_ENTITY
|
|
)
|