Skip to main content

OpenAPI specification generator for TurboGears2 controllers

Project description

OpenAPI specification generator for TurboGears2 controllers.

This extension automatically generates OpenAPI specifications from TurboGears controllers by introspecting @validate decorators and docstrings.

Installation

pip install tgext.apispec

Usage

Basic usage in your TurboGears application:

from tg import expose
from tg.controllers import TGController
from tgext.apispec.openapi import get_spec

class RootController(TGController):
    @expose("json")
    def openapi(self):
        # Each call builds the complete specification.
        return get_spec(self).to_dict()

# The root controller is mounted at /. Child controllers are discovered
# recursively.

Controller Example

from tg import expose, validate
from tg.controllers import RestController
from tg.validation import Convert, RequireValue

class MoviesController(RestController):
    @expose('json')
    @validate({
        'title': RequireValue(),
        'year': Convert(int, default=None),
    })
    def post(self, title, year=None):
        """Create a new movie.

        ---
        tags: [movies]
        responses:
          201:
            description: Movie created
          412:
            description: Validation error
        """
        # Your implementation
        ...

The extension will automatically:

  • Extract parameter types from @validate decorators

  • Parse docstrings for descriptions and metadata using a --- separator

  • Generate proper OpenAPI schema for each endpoint

Features

  • Automatic Parameter Extraction: Extracts parameter types from @validate decorators

  • Docstring Support: Uses docstrings for descriptions, tags, and response definitions

  • RestController Support: Properly handles RestController methods (get_all, get_one, post, put, delete)

  • Type Conversion: Converts TG validators to OpenAPI types (int, float, bool, string, email, date, datetime)

  • JSON Endpoints Only: Only generates spec for JSON-exposed endpoints

Docstring Format

Use a --- separator in your docstring to add OpenAPI metadata:

def my_action(self):
    """My action description.

    ---
    tags: [my_tag]
    responses:
      200:
        description: Success
      404:
        description: Not found
    """

Supported docstring metadata:

  • tags: List of tags for the endpoint

  • responses: Response definitions

  • description: Endpoint description, automatically extracted from the first part of the docstring

Development

The package targets TurboGears 2.5.1, which is expected to come from the TurboGears development branch until that version is released.

python -m pip install "TurboGears2 @ git+https://github.com/TurboGears/tg2.git@development"
python -m pip install -e ".[testing,lint]"
python -m pytest
python -m ruff format --check .
python -m ruff check .

License

MIT License. See LICENSE 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

tgext_apispec-0.1.0.tar.gz (8.9 kB view details)

Uploaded Source

Built Distribution

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

tgext_apispec-0.1.0-py3-none-any.whl (6.6 kB view details)

Uploaded Python 3

File details

Details for the file tgext_apispec-0.1.0.tar.gz.

File metadata

  • Download URL: tgext_apispec-0.1.0.tar.gz
  • Upload date:
  • Size: 8.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.20

File hashes

Hashes for tgext_apispec-0.1.0.tar.gz
Algorithm Hash digest
SHA256 8b8f9009bef48374a126fc8ccdbfdc128ab0a6774f3c95eb6cf8637e63b5d548
MD5 1d19e1f3dea691d2753488a99a3b38a7
BLAKE2b-256 39750b47c708a3a1109452377311d27f4bf0e91800b01769c50affd6da3d20f4

See more details on using hashes here.

File details

Details for the file tgext_apispec-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: tgext_apispec-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 6.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.20

File hashes

Hashes for tgext_apispec-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 749bbeaf121147831ab7ea540f02ae9cf04d334f501060d3d697bc4df537b786
MD5 c53eb9ef7dbc48b0c072863264899286
BLAKE2b-256 65a26560db42a4636cecbd9eed23df592154d6e43b961d01e830acc33195ad08

See more details on using hashes here.

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