/
outthevoid
/
python_microblogging_service_project
Обзор
Документация
Войти
/
outthevoid
/
python_microblogging_service_project
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
app/main.py
96 строк
4 KB
VladimirChukavin
Revert "Вернул проект в исходное состояние."
07 апр 2026, 14:01
07 апр 2026, 14:01
7531b60
Код
Авторство
О чём код?
from contextlib import asynccontextmanager from typing import AsyncIterator from fastapi import FastAPI, Request from fastapi.responses import JSONResponse from app.api.router import main_router from app.config import get_settings from app.core.exceptions import AppException from app.core.session import engine from app.database import models as db_models # noqa: F401 from app.utils.helpers import build_error_response settings = get_settings() @asynccontextmanager async def lifespan(app: FastAPI) -> AsyncIterator[None]: """ Управляет жизненным циклом приложения и освобождает общие ресурсы при остановке. Этот контекстный менеджер передаётся в FastAPI как обработчик жизненного цикла приложения. Он передаёт управление для обработки запросов и закрывает экземпляр движка базы данных после начала последовательности остановки приложения. :param app: Экземпляр приложения FastAPI. :type app: fastapi.FastAPI :returns: Асинхронный итератор жизненного цикла приложения. :rtype: typing.AsyncIterator[None] """ yield await engine.dispose() app = FastAPI( title=settings.app_name, debug=settings.app_debug, version=settings.app_version, lifespan=lifespan, ) app.include_router(main_router) @app.exception_handler(AppException) async def app_exception_handler(request: Request, exc: AppException) -> JSONResponse: """ Преобразует прикладные исключения в унифицированный JSON‑HTTP‑ответ. Обработчик перехватывает экземпляры ``AppException``, возникающие во время обработки запроса, и возвращает ответ со стабильной структурой ошибки, включающей тип ошибки, сообщение и HTTP‑статус. :param request: Входящий HTTP-запрос. :type request: fastapi.Request :param exc: Прикладное исключение, которое необходимо преобразовать в ответ. :type exc: app.core.exceptions.AppException :returns: JSON-ответ со структурированным описанием ошибки. :rtype: fastapi.responses.JSONResponse """ return JSONResponse( status_code=exc.status_code, content=build_error_response( error_type=exc.error_type, error_message=exc.error_message, ), ) @app.exception_handler(Exception) async def unexpected_exception_handler( request: Request, exc: Exception ) -> JSONResponse: """ Преобразует непредвиденные исключения в унифицированный JSON‑ответ. :param request: Входящий HTTP-запрос. :type request: fastapi.Request :param exc: Непредвиденное исключение. :type exc: Exception :returns: JSON-ответ с описанием внутренней ошибки сервера. :rtype: fastapi.responses.JSONResponse """ return JSONResponse( status_code=500, content=build_error_response( error_type="internal_error", error_message="Internal server error", ), )