В OpenAPI отсутствуют схемы для некоторых моделей Pydantic в приложении FastAPI.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 В OpenAPI отсутствуют схемы для некоторых моделей Pydantic в приложении FastAPI.

Сообщение Anonymous »

Я создаю приложение FastAPI, которое содержит множество моделей Pydantic. Несмотря на то, что приложение работает нормально, как и ожидалось, в документах OpenAPI (Swagger UI) не показаны схемы для всех этих моделей в разделе «Схемы».
Вот содержимое pydantic Schemas.py

Код: Выделить всё

import socket
from datetime import datetime
from enum import Enum
from typing import Any, Dict, List, Optional, Set, Union

from pydantic import BaseModel, Field, validator
from typing_extensions import Literal

ResponseData = Union[List[Any], Dict[str, Any], BaseModel]

# Not visible in Swagger UI
class PageIn(BaseModel):
page_size: int = Field(default=100, gt=0)
num_pages: int = Field(default=1, gt=0, exclude=True)
start_page: int = Field(default=1, gt=0, exclude=True)

# visible under schemas on Swagger UI
class PageOut(PageIn):
total_records: int = 0
total_pages: int = 0
current_page: int = 1

class Config:  # pragma: no cover
@staticmethod
def schema_extra(schema, model) -> None:
schema.get("properties").pop("num_pages")
schema.get("properties").pop("start_page")

# Not visible in Swagger UI
class BaseResponse(BaseModel):
host_: str = Field(default_factory=socket.gethostname)
message: Optional[str]

# Not visible in Swagger UI
class APIResponse(BaseResponse):
count: int = 0
location: Optional[str]
page: Optional[PageOut]
data: ResponseData

# Not visible in Swagger UI
class ErrorResponse(BaseResponse):
error: str

# visible under schemas on Swagger UI
class BaseFaultMap(BaseModel):
detection_system: Optional[str] = Field("", example="obhc")
fault_type: Optional[str] = Field("", example="disk")
team: Optional[str] = Field("", example="dctechs")
description: Optional[str] = Field(
"",
example="Hardware raid controller disk failure found. "
"Operation can continue normally,"
"but risk of data loss exist",
)

# Not visible in Swagger UI
class FaultQueryParams(BaseModel):
f_id: Optional[int] = Field(None, description="id for the host", example=12345, title="Fault ID")
hostname: Optional[str]
status: Literal["open", "closed", "all"] = Field("open")
created_by: Optional[str]
environment: Optional[str]
team: Optional[str]
fault_type: Optional[str]
detection_system: Optional[str]
inops_filters: Optional[str] = Field(None)
date_filter: Optional[str] = Field("",)
sort_by: Optional[str] = Field("created",)
sort_order: Literal["asc", "desc"] = Field("desc")
Все эти модели фактически используются в путях FastAPI для проверки тела запроса. FaultQueryParams — это пользовательская модель, которую я использую для проверки параметров запроса запроса и используется, как показано ниже:

Код: Выделить всё

query_args: FaultQueryParams = Depends()
Остальные модели используются совместно с полем «Тело». Я не могу понять, почему только некоторые модели не видны в разделе «Схемы», а другие — видны.
Еще одна вещь, которую я заметил в FaultQueryParams заключается в том, что в описании примеры не отображаются рядом с конечной точкой пути, даже если они определены в модели.
Изменить 1:
Я внимательно изучил и понял, что все модели, которых нет видимыми в пользовательском интерфейсе Swagger являются те, которые не используются непосредственно в операциях пути, т. е. эти модели не используются как типы response_model или Body и являются своего рода вспомогательными моделями, которые используются косвенно. Итак, похоже, что FastAPI не генерирует схему для этих моделей.
Единственным исключением из приведенного выше утверждения является query_args: FaultQueryParams = Depends(), который используется непосредственно в операция пути для сопоставления параметров запроса для конечной точки с пользовательской моделью. Это проблема, поскольку Swagger не идентифицирует метапараметры, такие как заголовок, описание, пример, из полей этой модели и не отображается в пользовательском интерфейсе, что важно для пользователей этой модели. конечная точка.
Есть ли способ заставить FastAPI генерировать схему для пользовательской модели FaultQueryParams так же, как она генерирует для Body, Query и т. д.?

Подробнее здесь: https://stackoverflow.com/questions/719 ... astapi-app
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему добавление пользовательской схемы openapi в FastAPI приводит к тому, что авторизация не работает?
    Anonymous » » в форуме Python
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Изменение имени схемы в документах OpenAPI, сгенерированных FASTAPI
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Обработка изменений схемы Pydantic в модульных тестах FastAPI
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Схемы FastAPI для запросов GET с использованием Pydantic
    Anonymous » » в форуме Python
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Схемы FastAPI для запросов GET с использованием Pydantic
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»