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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8b8f9009bef48374a126fc8ccdbfdc128ab0a6774f3c95eb6cf8637e63b5d548
|
|
| MD5 |
1d19e1f3dea691d2753488a99a3b38a7
|
|
| BLAKE2b-256 |
39750b47c708a3a1109452377311d27f4bf0e91800b01769c50affd6da3d20f4
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
749bbeaf121147831ab7ea540f02ae9cf04d334f501060d3d697bc4df537b786
|
|
| MD5 |
c53eb9ef7dbc48b0c072863264899286
|
|
| BLAKE2b-256 |
65a26560db42a4636cecbd9eed23df592154d6e43b961d01e830acc33195ad08
|