Как использовать логирование в pydantic / fast API

Я использую быстрый API для создания API и хочу использовать ведение журнала для создания журналов csv. Код API выглядит так:

@app.post("/path")
async def return_something(header: header, body: body):
    ...
    logger.info('....')
    return something

Пидантические модели определяются следующим образом:

class header(BaseModel):
    field1: str
    field2: list

Я использую такой регистратор

from logger import ApplicationLogger
logger = ApplicationLogger()

Вопрос в том, как я могу использовать существующее стремление для регистрации ошибок pydantic для проверки полей?


person vizakshat    schedule 06.10.2020    source источник


Ответы (1)


В зависимости от вашего варианта использования вы можете использовать следующие реализации. Оба реализуют промежуточное ПО exception_handler для захвата ValidationError или RequestValidationError. Вы можете регистрировать все, что вам нужно, в вашем промежуточном программном обеспечении, как указано ниже. Для получения дополнительной информации вы можете проверить эти проблемы Github (https://github.com/tiangolo/fastapi/issues/1486, https://github.com/tiangolo/fastapi/pull/853)

app = FastAPI()

@app.exception_handler(RequestValidationError)
async def validation_exception_handler(request, exc: Exception):
    """LOG HERE"""
    return PlainTextResponse(str(exc), status_code=400)

or

app = FastAPI()

async def http422_error_handler(
    _: Request, exc: Union[RequestValidationError, ValidationError]) -> JSONResponse:
    """LOG HERE"""
    return JSONResponse(
        {"errors": exc.errors()}, status_code=HTTP_422_UNPROCESSABLE_ENTITY
    )

app.add_exception_handler(ValidationError, http422_error_handler)
app.add_exception_handler(RequestValidationError, http422_error_handler)
person mustafasencer    schedule 08.01.2021