Skip to main content

Generate a schema and validate user input from types

Project description

https://github.com/aio-libs/aiohttp-apischema/workflows/CI/badge.svg https://codecov.io/gh/aio-libs/aiohttp-apischema/branch/master/graph/badge.svg https://img.shields.io/pypi/v/aiohttp-apischema.svg https://readthedocs.org/projects/aiohttp-apischema/badge/?version=latest

API schema generation and input validation for aiohttp.web.

Installation

Install from PyPI:

pip install aiohttp-apischema

Developing

Install requirement and launch tests:

pip install -r requirements-dev.txt
pytest

Basic usage

First create a SchemaGenerator instance:

from aiohttp_apischema import SchemaGenerator
SCHEMA = SchemaGenerator()

Then decorate endpoint handlers which should be included in the schema:

from aiohttp_apischema import APIResponse

@SCHEMA.api()
async def foo(request: web.Request) -> APIResponse[list[str], Literal[200]]:
    return APIResponse(["foo"])

Or for Class Based Views:

@SCHEMA.api_view()
class Handler(web.View):
    async def get(self) -> APIResponse[int, Literal[200]] | APIResponse[None, Literal[404]]:
        bar_id = int(self.request.match_info["id"])
        if bar_id == 1:
            return APIResponse(42)
        return APIResponse[None, Literal[404]](None, status=404)

Then call the setup method when building your app:

app = web.Application()
app.router.add_get("/foo", foo)
app.router.add_view(r"/bar/{id:\d+}", Handler)
SCHEMA.setup(app)

You can now view the docs under the /swagger/ path.

Validation usage

Validation of the request body is achieved by adding a positional parameter:

async def handler(request: web.Request, body: dict[int, str]) -> APIResponse[int, Literal[200]]:
    # body has been validated, so we can be sure the keys are int now.
    return APIResponse(sum(body.keys()))

License

aiohttp_apischema is offered under the Apache 2 license.

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

aiohttp_apischema-0.0.1.tar.gz (3.1 MB view hashes)

Uploaded Source

Built Distribution

aiohttp_apischema-0.0.1-py3-none-any.whl (3.1 MB view hashes)

Uploaded Python 3

Supported by

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