Skip to main content

aiohttp-valera-validator

⚠️ This package has been renamed to aiohttp-d42-validator. The aiohttp-valera-validator package on PyPI is no longer maintained. For updates and improvements, please use aiohttp-d42-validator going forward.

PyPI PyPI - Downloads Python Version

Request validation for aiohttp (via valera).

Installation

$ pip3 install aiohttp-valera-validator

Usage

from aiohttp.web import Application, json_response, route, run_app
from district42 import schema
from aiohttp_valera_validator import validate

ParamsSchema = schema.dict({
    "q": schema.str.len(1, ...)
})

@validate(params=ParamsSchema)
async def handler(request):
    q = request.query["q"]
    return json_response({"q": q})


app = Application()
app.add_routes([route("GET", "/users", handler)])
run_app(app)
// http /users?q=Bob
{
    "q": "Bob"
}
// http /users
{
    "errors": [
        "Value <class 'str'> at _['q'] must have at least 1 element, but it has 0 elements"
    ]
}

Docs

Query params validation

from district42 import schema
from aiohttp_valera_validator import validate

# schema.dict is strict by default (all keys must be present)
ParamsSchema = schema.dict({
    "q": schema.str.len(1, ...)
})

@routes.get("/users")
@validate(params=ParamsSchema)
async def handler(request):
    q = request.query["q"]
    return json_response({"q": q})

Headers validation

from district42 import schema
from aiohttp_valera_validator import validate
from multidict import istr

# "..." means that there can be any other keys
# headers are case-insensitive, so we use istr for
HeadersSchema = schema.dict({
    istr("User-Agent"): schema.str.len(1, ...),
    ...: ...
})

@routes.get("/users")
@validate(headers=HeadersSchema)
async def handler(request):
    user_agent = request.headers["User-Agent"]
    return json_response({"user_agent": user_agent})

JSON body validation

from district42 import schema
from aiohttp_valera_validator import validate

BodySchema = schema.dict({
    "id": schema.int.min(1),
    "name": schema.str.len(1, ...),
})

@routes.post("/users")
@validate(json=BodySchema)
async def handler(request):
    payload = await request.json()
    return json_response({
        "id": payload["id"],
        "name": payload["name"]
    })

URL segments validation

Segments — is a variable part of URL path (aiohttp uses match_info for it)

from district42 import schema
from aiohttp_valera_validator import validate

SegmentsSchema = schema.dict({
    "user_id": schema.str.regex(r"[1-9][0-9]*"),
})

@routes.get("/users/{user_id}")
@validate(segments=SegmentsSchema)
async def handler(request):
    user_id = int(request.match_info["user_id"])
    return json_response({"user_id": user_id})

Custom response

from http import HTTPStatus
from aiohttp.web import Request, Response
from aiohttp_valera_validator import validate as validate_orig

class validate(validate_orig):
    def create_error_response(self, request: Request, errors: List[str]) -> Response:
        status = HTTPStatus.UNPROCESSABLE_ENTITY
        body = "<ul>" + "".join(f"<li>{error}</li>" for error in errors) + "</ul>"
        return Response(status=status, text=body, headers={"Content-Type": "text/html"})

—

Fore more information read valera docs.

Metadata

Release files for aiohttp-valera-validator 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aiohttp-valera-validator 0.1.1
File Size Uploaded
aiohttp_valera_validator-0.1.1.tar.gz 8.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aiohttp-valera-validator 0.1.1
File Interpreter ABI Platform
aiohttp_valera_validator-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 17.1 kB

Release files / aiohttp_valera_validator-0.1.1.tar.gz

Download URL aiohttp_valera_validator-0.1.1.tar.gz
Size 8.7 kB
Tags Source
SHA-256 checksum
How to use checksums
fe4af5e0c5ec247a3205c93eee9f42e94cf1426c390980df101b8d0c7aa1da15
BLAKE2b-256 checksum
How to use checksums
aee36f2bcba42393a1bf3b7b250a34cb20c98d267f77ae9bfbd3df6d36004ef8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.11.10

Release files / aiohttp_valera_validator-0.1.1-py3-none-any.whl

Download URL aiohttp_valera_validator-0.1.1-py3-none-any.whl
Size 8.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9a390baf7240d2e63befa92da8d7982e5a850a6089b7550c7ff02bab90c3cdaa
BLAKE2b-256 checksum
How to use checksums
48052c4eac9095885f9ef60c7b5c9bb8bbd6fc866a2f408fb0d40fff5aa0de06
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.11.10

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page