39 lines
1.0 KiB
Python
39 lines
1.0 KiB
Python
from contextlib import asynccontextmanager
|
|
|
|
from fastapi import FastAPI
|
|
|
|
from ..core.config import Settings
|
|
from ..storage.db import PersistenceService
|
|
from .routes import cars, health, tasks
|
|
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
persistence: PersistenceService = app.state.persistence
|
|
persistence.create_tables()
|
|
yield
|
|
|
|
|
|
def create_app(settings: Settings | None = None) -> FastAPI:
|
|
_settings = settings or Settings()
|
|
|
|
app = FastAPI(
|
|
title="IAAI Scraper API",
|
|
description="REST API для управления задачами скрапинга IAAI и просмотра данных",
|
|
version="1.0.0",
|
|
lifespan=lifespan,
|
|
)
|
|
|
|
app.state.settings = _settings
|
|
app.state.persistence = PersistenceService(_settings)
|
|
|
|
app.include_router(health.router, tags=["health"])
|
|
app.include_router(cars.router, prefix="/api/v1", tags=["cars"])
|
|
app.include_router(tasks.router, prefix="/api/v1", tags=["tasks"])
|
|
|
|
return app
|
|
|
|
|
|
# uvicorn entrypoint
|
|
app = create_app()
|