Models¶
This section provides documentation for the model classes in Flask-X-OpenAPI-Schema.
Base Models¶
Base models for OpenAPI schema generation.
This module provides base models for generating OpenAPI schemas and handling API responses. It includes the BaseRespModel class which extends Pydantic's BaseModel to provide standardized methods for converting models to Flask-compatible responses.
BaseErrorResponse
¶
Bases: BaseRespModel
Base model for API error responses.
This class extends BaseRespModel to provide a standard way to represent error responses. It includes fields for error code, message, and details.
All error responses in the application should inherit from this class to ensure consistent error handling.
Attributes:
Name | Type | Description |
---|---|---|
error |
str
|
Error identifier or code. |
message |
str
|
Human-readable error message. |
details |
dict[str, Any] | None
|
Optional additional error details. |
Examples:
>>> from flask_x_openapi_schema import BaseErrorResponse
>>> error = BaseErrorResponse(error="VALIDATION_ERROR", message="Invalid input data")
>>> response = error.to_response(400)
>>> response[1]
400
>>> response[0]["error"]
'VALIDATION_ERROR'
Source code in src/flask_x_openapi_schema/models/base.py
BaseRespModel
¶
Bases: BaseModel
Base model for API responses.
This class extends Pydantic's BaseModel to provide a standard way to convert response models to Flask-compatible responses. It includes methods for converting the model to dictionaries and Flask response objects.
Attributes:
Name | Type | Description |
---|---|---|
model_config |
Configuration for the Pydantic model. |
Examples:
>>> from flask_x_openapi_schema import BaseRespModel
>>> from pydantic import Field
>>>
>>> class UserResponse(BaseRespModel):
... id: str = Field(..., description="User ID")
... name: str = Field(..., description="User name")
... email: str = Field(..., description="User email")
>>> def get(self):
... return UserResponse(id="123", name="John Doe", email="john@example.com")
>>> def post(self):
... return UserResponse(id="123", name="John Doe", email="john@example.com"), 201
>>> def put(self):
... user = UserResponse(id="123", name="John Doe", email="john@example.com")
... return user.to_response(status_code=200)
Source code in src/flask_x_openapi_schema/models/base.py
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
|
from_dict(data)
classmethod
¶
Create a model instance from a dictionary.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
data
|
dict[str, Any]
|
Dictionary containing model data. |
required |
Returns:
Type | Description |
---|---|
Self
|
An instance of the model. |
Examples:
>>> from flask_x_openapi_schema import BaseRespModel
>>> from pydantic import Field
>>> class UserResponse(BaseRespModel):
... id: str = Field(..., description="User ID")
... name: str = Field(..., description="User name")
... email: str = Field(..., description="User email")
>>> data = {"id": "123", "name": "John Doe", "email": "john@example.com"}
>>> user = UserResponse.from_dict(data)
>>> user.id
'123'
Source code in src/flask_x_openapi_schema/models/base.py
to_dict()
¶
Convert the model to a dictionary.
Returns:
Type | Description |
---|---|
dict[str, Any]
|
A dictionary representation of the model. |
Examples:
>>> from flask_x_openapi_schema import BaseRespModel
>>> from pydantic import Field
>>> class UserResponse(BaseRespModel):
... id: str = Field(..., description="User ID")
... name: str = Field(..., description="User name")
... email: str = Field(..., description="User email")
>>> user = UserResponse(id="123", name="John Doe", email="john@example.com")
>>> user_dict = user.to_dict()
>>> user_dict
{'id': '123', 'name': 'John Doe', 'email': 'john@example.com'}
Source code in src/flask_x_openapi_schema/models/base.py
to_response(status_code=None)
¶
Convert the model to a Flask-compatible response.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
status_code
|
int | None
|
Optional HTTP status code. |
None
|
Returns:
Type | Description |
---|---|
dict[str, Any] | tuple[dict[str, Any], int]
|
A Flask-compatible response (dict or tuple with dict and status code). |
Examples:
>>> from flask_x_openapi_schema import BaseRespModel
>>> from pydantic import Field
>>> class UserResponse(BaseRespModel):
... id: str = Field(..., description="User ID")
... name: str = Field(..., description="User name")
... email: str = Field(..., description="User email")
>>> user = UserResponse(id="123", name="John Doe", email="john@example.com")
>>> response = user.to_response()
>>> isinstance(response, dict)
True
>>> response = user.to_response(status_code=201)
>>> isinstance(response, tuple) and response[1] == 201
True
Source code in src/flask_x_openapi_schema/models/base.py
File Upload Models¶
Pydantic models for file uploads in OpenAPI.
This module provides a structured way to handle file uploads with validation and type hints. The models are designed to work with OpenAPI 3.0.x specification and provide proper validation for different file types.
AudioField
¶
DocumentUploadModel
¶
Bases: FileUploadModel
Model for document file uploads with validation.
This model extends FileUploadModel to provide specific validation for document files. It validates file extensions and optionally checks file size.
Attributes:
Name | Type | Description |
---|---|---|
file |
FileStorage
|
The uploaded document file. |
allowed_extensions |
list[str]
|
List of allowed file extensions. |
max_size |
int | None
|
Maximum file size in bytes. |
Source code in src/flask_x_openapi_schema/models/file_models.py
validate_document_file(v, info)
classmethod
¶
Validate that the file is a document with allowed extension and size.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
v
|
FileStorage
|
The file to validate. |
required |
info
|
ValidationInfo
|
Validation context information. |
required |
Returns:
Name | Type | Description |
---|---|---|
FileStorage |
FileStorage
|
The validated file. |
Raises:
Type | Description |
---|---|
ValueError
|
If the file is invalid, has a disallowed extension, or exceeds the maximum size. |
Source code in src/flask_x_openapi_schema/models/file_models.py
FileField
¶
Bases: str
Field for file uploads in OpenAPI schema.
This class is used as a type annotation for file upload fields in Pydantic models. It is a subclass of str, but with additional metadata for OpenAPI schema generation.
Source code in src/flask_x_openapi_schema/models/file_models.py
__get_pydantic_core_schema__(_source_type, _handler)
classmethod
¶
Define the Pydantic core schema for this type.
This is the recommended way to define custom types in Pydantic v2.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
_source_type
|
Any
|
Source type information from Pydantic. |
required |
_handler
|
Any
|
Handler function from Pydantic. |
required |
Returns:
Type | Description |
---|---|
PlainValidatorFunctionSchema
|
A Pydantic core schema for this type. |
Source code in src/flask_x_openapi_schema/models/file_models.py
__get_pydantic_json_schema__(_schema_generator, _field_schema)
classmethod
¶
Define the JSON schema for OpenAPI.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
_schema_generator
|
Any
|
Schema generator from Pydantic. |
required |
_field_schema
|
Any
|
Field schema from Pydantic. |
required |
Returns:
Name | Type | Description |
---|---|---|
dict |
dict[str, str]
|
A dictionary representing the JSON schema for this field. |
Source code in src/flask_x_openapi_schema/models/file_models.py
__new__(*args, **kwargs)
¶
Create a new instance of the class.
If a file object is provided, return it directly.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
*args
|
Any
|
Variable length argument list. |
()
|
**kwargs
|
Any
|
Arbitrary keyword arguments. |
{}
|
Returns:
Type | Description |
---|---|
Any
|
The file object if provided, otherwise a new instance of the class. |
Source code in src/flask_x_openapi_schema/models/file_models.py
FileType
¶
Bases: str
, Enum
Enumeration of file types for OpenAPI schema.
Source code in src/flask_x_openapi_schema/models/file_models.py
FileUploadModel
¶
Bases: BaseModel
Base model for file uploads.
This model provides a structured way to handle file uploads with validation. It automatically validates that the uploaded file is a valid FileStorage instance.
Attributes:
Name | Type | Description |
---|---|---|
file |
FileStorage
|
The uploaded file. |
Examples:
>>> from flask_x_openapi_schema.models.file_models import FileUploadModel
>>> # Example usage in a Flask route
>>> # @openapi_metadata(summary="Upload a file")
>>> # def post(self, _x_file: FileUploadModel):
>>> # return {"filename": _x_file.file.filename}
Source code in src/flask_x_openapi_schema/models/file_models.py
validate_file(v)
classmethod
¶
Validate that the file is a FileStorage instance.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
v
|
Any
|
The value to validate. |
required |
Returns:
Name | Type | Description |
---|---|---|
FileStorage |
FileStorage
|
The validated FileStorage instance. |
Raises:
Type | Description |
---|---|
ValueError
|
If the value is not a FileStorage instance. |
Source code in src/flask_x_openapi_schema/models/file_models.py
ImageField
¶
ImageUploadModel
¶
Bases: FileUploadModel
Model for image file uploads with validation.
This model extends FileUploadModel to provide specific validation for image files. It validates file extensions and optionally checks file size.
Attributes:
Name | Type | Description |
---|---|---|
file |
FileStorage
|
The uploaded image file. |
allowed_extensions |
list[str]
|
List of allowed file extensions. |
max_size |
int | None
|
Maximum file size in bytes. |
Examples:
>>> from flask_x_openapi_schema.models.file_models import ImageUploadModel
>>> # Example usage in a Flask route
>>> # @openapi_metadata(summary="Upload an image")
>>> # def post(self, _x_file: ImageUploadModel):
>>> # return {"filename": _x_file.file.filename}
Source code in src/flask_x_openapi_schema/models/file_models.py
validate_image_file(v, info)
classmethod
¶
Validate that the file is an image with allowed extension and size.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
v
|
FileStorage
|
The file to validate. |
required |
info
|
ValidationInfo
|
Validation context information. |
required |
Returns:
Name | Type | Description |
---|---|---|
FileStorage |
FileStorage
|
The validated file. |
Raises:
Type | Description |
---|---|
ValueError
|
If the file is invalid, has a disallowed extension, or exceeds the maximum size. |
Source code in src/flask_x_openapi_schema/models/file_models.py
MultipleFileUploadModel
¶
Bases: BaseModel
Model for multiple file uploads.
This model allows uploading multiple files at once and validates that all files are valid FileStorage instances.
Attributes:
Name | Type | Description |
---|---|---|
files |
list[FileStorage]
|
List of uploaded files. |
Examples:
>>> from flask_x_openapi_schema.models.file_models import MultipleFileUploadModel
>>> # Example usage in a Flask route
>>> # @openapi_metadata(summary="Upload multiple files")
>>> # def post(self, _x_file: MultipleFileUploadModel):
>>> # return {"filenames": [f.filename for f in _x_file.files]}
Source code in src/flask_x_openapi_schema/models/file_models.py
validate_files(v)
classmethod
¶
Validate that all files are FileStorage instances.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
v
|
list[Any]
|
List of values to validate. |
required |
Returns:
Type | Description |
---|---|
list[FileStorage]
|
list[FileStorage]: The validated list of FileStorage instances. |
Raises:
Type | Description |
---|---|
ValueError
|
If the list is empty or contains non-FileStorage objects. |
Source code in src/flask_x_openapi_schema/models/file_models.py
PDFField
¶
TextField
¶
Response Models¶
Response models for OpenAPI schema generation.
This module provides models for defining OpenAPI responses in a structured way. It includes classes and helper functions to create and manage response definitions for OpenAPI schema generation.
OpenAPIMetaResponse
¶
Bases: BaseModel
Container for OpenAPI response definitions.
This class allows defining multiple responses for different status codes. It is used to define all possible responses for an API endpoint in the OpenAPI schema.
Attributes:
Name | Type | Description |
---|---|---|
responses |
dict[str, OpenAPIMetaResponseItem]
|
Map of status codes to response definitions. |
default_error_response |
type[BaseErrorResponse]
|
Default error response class for validation errors. Must be a subclass of BaseErrorResponse. |
Examples:
>>> from flask_x_openapi_schema.models.responses import OpenAPIMetaResponse, OpenAPIMetaResponseItem
>>> from pydantic import BaseModel
>>>
>>> class UserResponse(BaseModel):
... id: str
... name: str
>>> class ErrorResponse(BaseModel):
... error: str
... code: int
>>> responses = OpenAPIMetaResponse(
... responses={
... "200": OpenAPIMetaResponseItem(
... model=UserResponse, description="User details retrieved successfully"
... ),
... "404": OpenAPIMetaResponseItem(model=ErrorResponse, description="User not found"),
... }
... )
Source code in src/flask_x_openapi_schema/models/responses.py
to_openapi_dict()
¶
Convert the response container to an OpenAPI responses object.
Returns:
Name | Type | Description |
---|---|---|
dict |
dict[str, Any]
|
An OpenAPI responses object dictionary. |
Source code in src/flask_x_openapi_schema/models/responses.py
OpenAPIMetaResponseItem
¶
Bases: BaseModel
Represents a single response item in an OpenAPI specification.
This class allows defining a response with either a Pydantic model or a simple message. It is used to define the response for a specific status code in the OpenAPI schema.
Attributes:
Name | Type | Description |
---|---|---|
model |
type[BaseModel] | None
|
Pydantic model for the response. |
description |
str
|
Response description. |
content_type |
str
|
Response content type. |
headers |
dict[str, Any] | None
|
Response headers. |
examples |
dict[str, Any] | None
|
Response examples. |
msg |
str | None
|
Simple message for responses without a model. |
Examples:
>>> from flask_x_openapi_schema.models.responses import OpenAPIMetaResponseItem
>>> from pydantic import BaseModel
>>>
>>> class UserResponse(BaseModel):
... id: str
... name: str
>>> response_item = OpenAPIMetaResponseItem(
... model=UserResponse, description="User details", content_type="application/json"
... )
Source code in src/flask_x_openapi_schema/models/responses.py
to_openapi_dict()
¶
Convert the response item to an OpenAPI response object.
Returns:
Name | Type | Description |
---|---|---|
dict |
dict[str, Any]
|
An OpenAPI response object dictionary. |
Source code in src/flask_x_openapi_schema/models/responses.py
create_response(model=None, description='Successful response', status_code=200, content_type='application/json', headers=None, examples=None, msg=None)
¶
Create a response definition for use with OpenAPIMetaResponse.
This is a helper function to create a response definition for a specific status code. It returns a dictionary that can be used to build an OpenAPIMetaResponse object.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
model
|
type[BaseModel] | None
|
Pydantic model for the response. |
None
|
description
|
str
|
Response description. |
'Successful response'
|
status_code
|
int | str
|
HTTP status code. |
200
|
content_type
|
str
|
Response content type. |
'application/json'
|
headers
|
dict[str, Any] | None
|
Response headers. |
None
|
examples
|
dict[str, Any] | None
|
Response examples. |
None
|
msg
|
str | None
|
Simple message for responses without a model. |
None
|
Returns:
Name | Type | Description |
---|---|---|
dict |
dict[str, OpenAPIMetaResponseItem]
|
A dictionary with the status code as key and response item as value. |
Examples:
>>> from flask_x_openapi_schema.models.responses import create_response, OpenAPIMetaResponse
>>> from pydantic import BaseModel
>>>
>>> class UserResponse(BaseModel):
... id: str
... name: str
>>>
>>> user_response = create_response(model=UserResponse, description="User details", status_code=200)
>>>
>>> not_found_response = create_response(msg="User not found", description="User not found", status_code=404)
>>>
>>> responses = OpenAPIMetaResponse(responses={**user_response, **not_found_response})
Source code in src/flask_x_openapi_schema/models/responses.py
error_response(description, status_code=400, model=None, content_type='application/json', headers=None, examples=None, msg=None)
¶
Create an error response definition for use with OpenAPIMetaResponse.
This is a convenience function to create an error response with a description.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
description
|
str
|
Response description. |
required |
status_code
|
int | str
|
HTTP status code. |
400
|
model
|
type[BaseModel] | None
|
Optional Pydantic model for the response. |
None
|
content_type
|
str
|
Response content type. |
'application/json'
|
headers
|
dict[str, Any] | None
|
Response headers. |
None
|
examples
|
dict[str, Any] | None
|
Response examples. |
None
|
msg
|
str | None
|
Simple message for responses without a model. |
None
|
Returns:
Name | Type | Description |
---|---|---|
dict |
dict[str, OpenAPIMetaResponseItem]
|
A dictionary with the status code as key and response item as value. |
Source code in src/flask_x_openapi_schema/models/responses.py
success_response(model, description='Successful response', status_code=200, content_type='application/json', headers=None, examples=None)
¶
Create a success response definition for use with OpenAPIMetaResponse.
This is a convenience function to create a success response with a model.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
model
|
type[BaseModel]
|
Pydantic model for the response. |
required |
description
|
str
|
Response description. |
'Successful response'
|
status_code
|
int | str
|
HTTP status code. |
200
|
content_type
|
str
|
Response content type. |
'application/json'
|
headers
|
dict[str, Any] | None
|
Response headers. |
None
|
examples
|
dict[str, Any] | None
|
Response examples. |
None
|
Returns:
Name | Type | Description |
---|---|---|
dict |
dict[str, OpenAPIMetaResponseItem]
|
A dictionary with the status code as key and response item as value. |