Skip to main content

aiohttp simple pydantic validator

Project description

aiohttp-validator

Downloads License Python Versions Build status Code coverage

aiohttp simple pydantic http request validator

Installation

pip install aiohttp-validator

A Simple Example

import datetime as dt
from typing import Any, Dict, List, TypedDict
from uuid import UUID

import pydantic
from aiohttp import web

import aiohttp_validator as validator

routes = web.RouteTableDef()


@routes.get('/posts')
@validator.validated()
async def get_posts(request: web.Request, tags: List[str], limit: pydantic.conint(gt=0, le=100), offset: int = 0):
    assert isinstance(tags, list)
    assert isinstance(limit, int)
    assert isinstance(offset, int)
    # your code here ...

    return web.Response(status=200)


class RequestHeaders(TypedDict):
    requestId: int


class User(pydantic.BaseModel):
    name: str
    surname: str


class Post(pydantic.BaseModel):
    title: str
    text: str
    timestamp: float
    author: User
    tags: List[str] = pydantic.Field(default_factory=list)


@routes.post('/posts/{section}/{date}')
@validator.validated(config=pydantic.ConfigDict(extra='forbid'))
async def create_post(request: web.Request, body: Post, headers: RequestHeaders, section: str, date: dt.date):
    assert isinstance(body, Post)
    assert isinstance(headers, dict)
    assert isinstance(date, dt.date)
    assert isinstance(section, str)
    # your code here ...

    return web.Response(status=201)


class AuthCookies(pydantic.BaseModel):
    tokenId: UUID


@routes.post('/users')
@validator.validated(config=pydantic.ConfigDict(extra='forbid'))
async def create_user(request: web.Request, body: Dict[str, Any], headers: RequestHeaders, cookies: AuthCookies):
    assert isinstance(body, dict)
    assert isinstance(headers, RequestHeaders)
    assert isinstance(cookies, AuthCookies)
    # your code here ...

    return web.Response(status=201)

app = web.Application()
app.add_routes(routes)

web.run_app(app, port=8080)

If any path or query parameter name are clashes with body, headers or cookies argument for some reason the last can be renamed:

@routes.post('/{cookies}')
@validator.validated(cookies_argname='_cookies')
async def method(request: web.Request, body: Dict[str, Any], _cookies: AuthCookies, cookies: str):
    # your code here ...

    return web.Response(status=201)

If any argname is None the corresponding request part will not be passed to the function and argname can be used as a path or query parameter.

@routes.post('/{body}/{headers}')
@validator.validated(body_argname=None, headers_argname=None, cookies_argname=None)
async def method(request: web.Request, body: str, headers: str, cookies: str = ''):
    # your code here ...

    return web.Response(status=201)

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_validator-0.2.0.tar.gz (4.9 kB view details)

Uploaded Source

Built Distribution

aiohttp_validator-0.2.0-py3-none-any.whl (5.5 kB view details)

Uploaded Python 3

File details

Details for the file aiohttp_validator-0.2.0.tar.gz.

File metadata

  • Download URL: aiohttp_validator-0.2.0.tar.gz
  • Upload date:
  • Size: 4.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.11.5 Linux/6.2.0-1012-azure

File hashes

Hashes for aiohttp_validator-0.2.0.tar.gz
Algorithm Hash digest
SHA256 b7a4393f926b185f76fbd21393266132ab2800c87d421db71ec83573ed704b98
MD5 fc5d8eb0cc5157efb6d21b89630d43d8
BLAKE2b-256 22af07328359555d13b3035352e9ca96c635842ff82392cbcedceb86fd606a7b

See more details on using hashes here.

File details

Details for the file aiohttp_validator-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: aiohttp_validator-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 5.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.11.5 Linux/6.2.0-1012-azure

File hashes

Hashes for aiohttp_validator-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e6ec79e3e0453c1108ed9d553aeb8e324a050c5a445143ad48199fe258648d10
MD5 e3687d90aeaeb6d2e494cd9cff8c2a6c
BLAKE2b-256 d6df286e3b60867bca44c819055d8707bf4bea27ba25e931e2e88885be4973a0

See more details on using hashes here.

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