42 lines
1.2 KiB
Python
42 lines
1.2 KiB
Python
# Создание FastAPI-приложения и настройка его жизненного цикла.
|
||
|
||
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.
|
||
app = create_app()
|