Skip to main content

A powerful utility for automatically generating OpenAPI schemas from Flask-RESTful resources, Flask.MethodView classes, and Pydantic models.

Project description

Flask-X-OpenAPI-Schema

Python Version from PEP 621 TOML License GitHub uv Code style: ruff CI Codecov

A powerful utility for automatically generating OpenAPI schemas support Flask(MethodView) and Flask-RESTful(Resource) applications and Pydantic models to simplify API documentation with minimal effort.

📚 Documentation

Full documentation is available in the docs directory.

🚀 Quick Start

# Install the package
uv pip install flask-x-openapi-schema

# With Flask-RESTful support
uv pip install flask-x-openapi-schema[flask-restful]

✨ Features

  • Framework Support: Works with both Flask and Flask-RESTful applications
  • Auto-Generation: Generate OpenAPI schemas from Flask-RESTful resources and Flask.MethodView classes
  • Pydantic Integration: Seamlessly convert Pydantic models to OpenAPI schemas
  • Smart Parameter Handling: Inject request parameters from Pydantic models with configurable prefixes
  • Type Safety: Preserve type annotations for better IDE support and validation
  • Multiple Formats: Output schemas in YAML or JSON format
  • Internationalization: Built-in i18n support for API documentation with thread-safe language switching
  • File Upload Support: Simplified handling of file uploads with validation
  • Flexible Architecture: Modular design with framework-specific implementations
  • Performance Optimized: Caching of static information for improved performance

📦 Installation

Development Setup

This project uses uv for package management and ruff for linting and formatting and need just for project management:

# Install all dependencies including development ones
just sync-all-deps

# Format and lint code
just format-and-lintfix

🛠️ Basic Usage

See the Usage Guide for more detailed examples.

Flask.MethodView Example

(diy) see and run example

Flask-RESTful Example

(diy) see and run example

📋 Key Features

Framework-Specific Implementations

The library provides separate implementations for Flask and Flask-RESTful:

# For Flask.MethodView
from flask_x_openapi_schema.x.flask import openapi_metadata

# For Flask-RESTful
from flask_x_openapi_schema.x.flask_restful import openapi_metadata

Parameter Binding with Special Prefixes

The library binds parameters with special prefixes default, and can custom by yourself:

  • _x_body: Request body from JSON
  • _x_query: Query parameters
  • _x_path_<param_name>: Path parameters
  • _x_file: File uploads

Custom Parameter Prefixes

from flask_x_openapi_schema import ConventionalPrefixConfig, configure_prefixes

# Create a custom configuration
custom_config = ConventionalPrefixConfig(
    request_body_prefix="req_body",
    request_query_prefix="req_query",
    request_path_prefix="req_path",
    request_file_prefix="req_file"
)

# Configure globally
configure_prefixes(custom_config)

# Or per-function
@openapi_metadata(
    summary="Test endpoint",
    prefix_config=custom_config
)
def my_function(req_body: MyModel, req_query: QueryModel):
    # Use custom prefixes
    return {"message": "Success"}

I18n Support

from flask_x_openapi_schema import I18nStr, set_current_language

# Set the current language
set_current_language("zh-Hans")

@openapi_metadata(
    summary=I18nStr({
        "en-US": "Get an item",
        "zh-Hans": "获取一个项目",
        "ja-JP": "アイテムを取得する"
    }),
    ...
)
def get(self, item_id):
    # ...

File Upload Support

from flask_x_openapi_schema import ImageUploadModel

@openapi_metadata(
    summary="Upload an image"
)
def post(self, _x_file: ImageUploadModel):
    # File is automatically injected and validated
    return {"filename": _x_file.file.filename}

Response Models

from flask_x_openapi_schema import BaseRespModel
from pydantic import Field

class ItemResponse(BaseRespModel):
    id: str = Field(..., description="Item ID")
    name: str = Field(..., description="Item name")
    price: float = Field(..., description="Item price")

    # Will be automatically converted to a Flask response
    # return ItemResponse(id="123", name="Example", price=10.99), 200

🧪 Testing and Coverage

This project uses pytest for testing and pytest-cov for coverage reporting:

# Run tests with coverage report
just test

# View HTML coverage report
# Open htmlcov/index.html in your browser

📊 Benchmarking

The project includes benchmarking tools to measure performance:

# Run benchmarks and generate report
just benchmark

📖 More Docs

🧩 Components

  • Core: Base functionality shared across all implementations
    • Schema Generator: Converts resources to OpenAPI schemas
    • Configuration: Configurable parameter prefixes and settings
    • Cache: Performance optimization for schema generation
  • Framework-Specific:
    • Flask: Support for Flask.MethodView classes
    • Flask-RESTful: Support for Flask-RESTful resources
  • Models:
    • Base Models: Type-safe response handling
    • File Models: Simplified file upload handling
  • Internationalization:
    • I18nStr: Multilingual string support
    • Language Management: Thread-safe language switching
  • Utilities: Helper functions for schema creation and manipulation

📝 License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flask_x_openapi_schema-0.0.1.tar.gz (44.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flask_x_openapi_schema-0.0.1-py3-none-any.whl (57.9 kB view details)

Uploaded Python 3

File details

Details for the file flask_x_openapi_schema-0.0.1.tar.gz.

File metadata

  • Download URL: flask_x_openapi_schema-0.0.1.tar.gz
  • Upload date:
  • Size: 44.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for flask_x_openapi_schema-0.0.1.tar.gz
Algorithm Hash digest
SHA256 b3a28b50b96679a488e1e6339afc89e0b2a23d9104ad23a8aee715b18edc6cda
MD5 942dac4327b32f231b6c4a537d95f0c2
BLAKE2b-256 a6008248593bddccd1e1022e93f4ed423374c372924a1351df2d4a6d81ea4124

See more details on using hashes here.

Provenance

The following attestation bundles were made for flask_x_openapi_schema-0.0.1.tar.gz:

Publisher: cd.yaml on StrayDragon/flask-x-openapi-schema

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file flask_x_openapi_schema-0.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for flask_x_openapi_schema-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c6851fc1c8fb950ee3afcfb007fbc0d17bd3d407d18ab56d3c41fa6ad0953374
MD5 88ba67ecb1e80e46663250e311e4088e
BLAKE2b-256 2cfb477a2f7e0e666cdb86aa556cf75e201f816387e65c06bbde43d6d6eaa716

See more details on using hashes here.

Provenance

The following attestation bundles were made for flask_x_openapi_schema-0.0.1-py3-none-any.whl:

Publisher: cd.yaml on StrayDragon/flask-x-openapi-schema

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page