/
semak
/
py-client-generator
Обзор
Документация
Войти
/
semak
/
py-client-generator
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
py_client_generator/openapi/models.py
186 строк
6 KB
semak
Дополнительные модели из настроек, генерация моделей, которые создержаться в ссылках
24 июн 2026, 15:15
24 июн 2026, 15:15
9b4e497
Код
Авторство
О чём код?
from typing import Dict, List, Optional, Any, Union from pydantic import BaseModel, Field, ConfigDict class Discriminator(BaseModel): """Дискриминатор для oneOf/anyOf""" property_name: str = Field(alias="propertyName") mapping: Optional[Dict[str, str]] = None model_config = ConfigDict(populate_by_name=True) class Schema(BaseModel): """Модель для OpenAPI схемы""" type: str | None = None format: str | None = None items: Any | None = None # может быть ссылкой или другой схемой properties: dict[str, Any] | None = None required: Optional[list[str]] = None ref: Optional[str] = Field(None, alias="$ref") enum: list[Any] | None = None one_of: list[Any] | None = Field(None, alias="oneOf") any_of: list[Any] | None = Field(None, alias="anyOf") all_of: list[Any] | None = Field(None, alias="allOf") additional_properties: Optional[Union[bool, Dict[str, Any]]] = Field( None, alias="additionalProperties" ) # Ограничения для чисел minimum: Optional[Union[int, float]] = None maximum: Optional[Union[int, float]] = None exclusive_minimum: Optional[bool] = Field(None, alias="exclusiveMinimum") exclusive_maximum: Optional[bool] = Field(None, alias="exclusiveMaximum") multiple_of: Optional[Union[int, float]] = Field(None, alias="multipleOf") # Ограничения для строк min_length: Optional[int] = Field(None, alias="minLength") max_length: Optional[int] = Field(None, alias="maxLength") pattern: str | None = None # Дополнительные свойства default: Optional[Any] = None nullable: Optional[bool] = None description: str | None = None # Дискриминатор для oneOf/anyOf discriminator: Optional[Discriminator] = None # Локальные определения (например ChoicesItem внутри ChatCompletionStream) defs: Optional[Dict[str, Any]] = Field(None, alias="$defs") model_config = ConfigDict(populate_by_name=True, extra="ignore") class Parameter(BaseModel): """Параметр запроса""" ref: Optional[str] = Field(None, alias="$ref") name: Optional[str] = None in_: Optional[str] = Field(None, alias="in") required: bool = False description: str | None = None schema_: Optional[Dict[str, Any]] = Field(None, alias="schema") content: Optional[Dict[str, Any]] = None model_config = ConfigDict(populate_by_name=True) class RequestBody(BaseModel): """Тело запроса""" required: bool = False content: Dict[str, Dict[str, Any]] class Response(BaseModel): """Ответ API""" description: str | None = None content: Optional[Dict[str, Dict[str, Any]]] = None class Operation(BaseModel): """Операция API (GET, POST, etc.)""" operation_id: Optional[str] = Field(None, alias="operationId") summary: str | None = None description: str | None = None tags: Optional[list[str]] = None parameters: Optional[list[Parameter]] = None request_body: Optional[RequestBody] = Field(None, alias="requestBody") responses: Dict[str, Response] security: Optional[list[Dict[str, list[str]]]] = None model_config = ConfigDict(populate_by_name=True) class PathItem(BaseModel): """Элемент пути API""" get: Optional[Operation] = None post: Optional[Operation] = None put: Optional[Operation] = None delete: Optional[Operation] = None patch: Optional[Operation] = None head: Optional[Operation] = None options: Optional[Operation] = None trace: Optional[Operation] = None class HttpSecurityScheme(BaseModel): """HTTP схема безопасности""" type: str = "http" # Всегда "http" для этой схемы scheme: str # Например: "basic", "bearer", "digest", "negotiate" bearer_format: Optional[str] = Field(None, alias="bearerFormat") description: Optional[str] = None model_config = ConfigDict(populate_by_name=True) class ApiKeySecurityScheme(BaseModel): """API Key схема безопасности""" type: str = "apiKey" # Всегда "apiKey" для этой схемы name: str in_: str = Field(alias="in") # "query", "header", "cookie" description: Optional[str] = None model_config = ConfigDict(populate_by_name=True) class OAuth2SecurityScheme(BaseModel): """OAuth2 схема безопасности""" type: str = "oauth2" # Всегда "oauth2" для этой схемы flows: Dict[str, Any] # Упрощенная модель для flows description: Optional[str] = None model_config = ConfigDict(populate_by_name=True) class OpenIdConnectSecurityScheme(BaseModel): """OpenID Connect схема безопасности""" type: str = "openIdConnect" # Всегда "openIdConnect" для этой схемы open_id_connect_url: str = Field(alias="openIdConnectUrl") description: Optional[str] = None model_config = ConfigDict(populate_by_name=True) # Union тип для всех security schemes SecurityScheme = Union[ HttpSecurityScheme, ApiKeySecurityScheme, OAuth2SecurityScheme, OpenIdConnectSecurityScheme, ] class Components(BaseModel): """Компоненты OpenAPI спецификации""" schemas: Optional[Dict[str, Schema]] = None responses: Optional[Dict[str, Response]] = None parameters: Optional[Dict[str, Parameter]] = None examples: Optional[Dict[str, Any]] = None request_bodies: Optional[Dict[str, RequestBody]] = Field( None, alias="requestBodies" ) headers: Optional[Dict[str, Any]] = None security_schemes: Optional[Dict[str, SecurityScheme]] = Field( None, alias="securitySchemes" ) links: Optional[Dict[str, Any]] = None callbacks: Optional[Dict[str, Any]] = None model_config = ConfigDict(populate_by_name=True) class OpenAPISpec(BaseModel): """Полная OpenAPI спецификация""" openapi: str info: Dict[str, Any] servers: Optional[list[Dict[str, Any]]] = None paths: Dict[str, PathItem] components: Optional[Components] = None model_config = ConfigDict(extra="ignore")