# aiohttp-valera-validator
⚠️ This package has been renamed to [aiohttp-d42-validator](https://pypi.org/project/aiohttp-d42-validator/). The [aiohttp-valera-validator](https://pypi.org/project/aiohttp-valera-validator/) package on PyPI is no longer maintained. For updates and improvements, please use [aiohttp-d42-validator](https://pypi.org/project/aiohttp-d42-validator/) going forward.
[![PyPI](https://img.shields.io/pypi/v/aiohttp-valera-validator.svg?style=flat-square)](https://pypi.python.org/pypi/aiohttp-valera-validator/)
[![PyPI - Downloads](https://img.shields.io/pypi/dm/aiohttp-valera-validator?style=flat-square)](https://pypi.python.org/pypi/aiohttp-valera-validator/)
[![Python Version](https://img.shields.io/pypi/pyversions/aiohttp-valera-validator.svg?style=flat-square)](https://pypi.python.org/pypi/aiohttp-valera-validator/)
Request validation for [aiohttp](https://docs.aiohttp.org/en/stable/) (via [valera](https://github.com/d42-schemas/valera)).
## Installation
```shell
$ pip3 install aiohttp-valera-validator
```
## Usage
```python
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)
```
```javascript
// http /users?q=Bob
{
"q": "Bob"
}
```
```javascript
// http /users
{
"errors": [
"Value <class 'str'> at _['q'] must have at least 1 element, but it has 0 elements"
]
}
```
## Docs
### Query params validation
```python
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
```python
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
```python
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](https://docs.aiohttp.org/en/stable/web_quickstart.html#variable-resources) `match_info` for it)
```python
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
```python
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](https://github.com/d42-schemas/valera).
Raw data
{
"_id": null,
"home_page": "https://github.com/tsv1/aiohttp-valera-validator",
"name": "aiohttp-valera-validator",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": null,
"author": "Nikita Tsvetkov",
"author_email": "tsv1@fastmail.com",
"download_url": "https://files.pythonhosted.org/packages/ae/e3/6f2bcba42393a1bf3b7b250a34cb20c98d267f77ae9bfbd3df6d36004ef8/aiohttp_valera_validator-0.1.1.tar.gz",
"platform": null,
"description": "# aiohttp-valera-validator\n\n\u26a0\ufe0f This package has been renamed to [aiohttp-d42-validator](https://pypi.org/project/aiohttp-d42-validator/). The [aiohttp-valera-validator](https://pypi.org/project/aiohttp-valera-validator/) package on PyPI is no longer maintained. For updates and improvements, please use [aiohttp-d42-validator](https://pypi.org/project/aiohttp-d42-validator/) going forward.\n\n[![PyPI](https://img.shields.io/pypi/v/aiohttp-valera-validator.svg?style=flat-square)](https://pypi.python.org/pypi/aiohttp-valera-validator/)\n[![PyPI - Downloads](https://img.shields.io/pypi/dm/aiohttp-valera-validator?style=flat-square)](https://pypi.python.org/pypi/aiohttp-valera-validator/)\n[![Python Version](https://img.shields.io/pypi/pyversions/aiohttp-valera-validator.svg?style=flat-square)](https://pypi.python.org/pypi/aiohttp-valera-validator/)\n\nRequest validation for [aiohttp](https://docs.aiohttp.org/en/stable/) (via [valera](https://github.com/d42-schemas/valera)).\n\n## Installation\n\n```shell\n$ pip3 install aiohttp-valera-validator\n```\n\n## Usage\n\n```python\nfrom aiohttp.web import Application, json_response, route, run_app\nfrom district42 import schema\nfrom aiohttp_valera_validator import validate\n\nParamsSchema = schema.dict({\n \"q\": schema.str.len(1, ...)\n})\n\n@validate(params=ParamsSchema)\nasync def handler(request):\n q = request.query[\"q\"]\n return json_response({\"q\": q})\n\n\napp = Application()\napp.add_routes([route(\"GET\", \"/users\", handler)])\nrun_app(app)\n```\n\n```javascript\n// http /users?q=Bob\n{\n \"q\": \"Bob\"\n}\n```\n\n```javascript\n// http /users\n{\n \"errors\": [\n \"Value <class 'str'> at _['q'] must have at least 1 element, but it has 0 elements\"\n ]\n}\n```\n\n## Docs\n\n### Query params validation\n\n```python\nfrom district42 import schema\nfrom aiohttp_valera_validator import validate\n\n# schema.dict is strict by default (all keys must be present)\nParamsSchema = schema.dict({\n \"q\": schema.str.len(1, ...)\n})\n\n@routes.get(\"/users\")\n@validate(params=ParamsSchema)\nasync def handler(request):\n q = request.query[\"q\"]\n return json_response({\"q\": q})\n```\n\n### Headers validation\n\n```python\nfrom district42 import schema\nfrom aiohttp_valera_validator import validate\nfrom multidict import istr\n\n# \"...\" means that there can be any other keys\n# headers are case-insensitive, so we use istr for\nHeadersSchema = schema.dict({\n istr(\"User-Agent\"): schema.str.len(1, ...),\n ...: ...\n})\n\n@routes.get(\"/users\")\n@validate(headers=HeadersSchema)\nasync def handler(request):\n user_agent = request.headers[\"User-Agent\"]\n return json_response({\"user_agent\": user_agent})\n```\n\n### JSON body validation\n\n```python\nfrom district42 import schema\nfrom aiohttp_valera_validator import validate\n\nBodySchema = schema.dict({\n \"id\": schema.int.min(1),\n \"name\": schema.str.len(1, ...),\n})\n\n@routes.post(\"/users\")\n@validate(json=BodySchema)\nasync def handler(request):\n payload = await request.json()\n return json_response({\n \"id\": payload[\"id\"],\n \"name\": payload[\"name\"]\n })\n```\n\n### URL segments validation\n\nSegments \u2014 is a variable part of URL path (aiohttp [uses](https://docs.aiohttp.org/en/stable/web_quickstart.html#variable-resources) `match_info` for it)\n\n```python\nfrom district42 import schema\nfrom aiohttp_valera_validator import validate\n\nSegmentsSchema = schema.dict({\n \"user_id\": schema.str.regex(r\"[1-9][0-9]*\"),\n})\n\n@routes.get(\"/users/{user_id}\")\n@validate(segments=SegmentsSchema)\nasync def handler(request):\n user_id = int(request.match_info[\"user_id\"])\n return json_response({\"user_id\": user_id})\n```\n\n### Custom response\n\n```python\nfrom http import HTTPStatus\nfrom aiohttp.web import Request, Response\nfrom aiohttp_valera_validator import validate as validate_orig\n\nclass validate(validate_orig):\n def create_error_response(self, request: Request, errors: List[str]) -> Response:\n status = HTTPStatus.UNPROCESSABLE_ENTITY\n body = \"<ul>\" + \"\".join(f\"<li>{error}</li>\" for error in errors) + \"</ul>\"\n return Response(status=status, text=body, headers={\"Content-Type\": \"text/html\"})\n```\n\n\u2014\n\nFore more information read [valera docs](https://github.com/d42-schemas/valera).\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "Request validation for aiohttp",
"version": "0.1.1",
"project_urls": {
"Homepage": "https://github.com/tsv1/aiohttp-valera-validator"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "48052c4eac9095885f9ef60c7b5c9bb8bbd6fc866a2f408fb0d40fff5aa0de06",
"md5": "58d3413ebfed5d3088b19b05d268991f",
"sha256": "9a390baf7240d2e63befa92da8d7982e5a850a6089b7550c7ff02bab90c3cdaa"
},
"downloads": -1,
"filename": "aiohttp_valera_validator-0.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "58d3413ebfed5d3088b19b05d268991f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 8364,
"upload_time": "2024-10-13T15:17:44",
"upload_time_iso_8601": "2024-10-13T15:17:44.163668Z",
"url": "https://files.pythonhosted.org/packages/48/05/2c4eac9095885f9ef60c7b5c9bb8bbd6fc866a2f408fb0d40fff5aa0de06/aiohttp_valera_validator-0.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "aee36f2bcba42393a1bf3b7b250a34cb20c98d267f77ae9bfbd3df6d36004ef8",
"md5": "a4b8aa4ec2816690efab98364a609eb6",
"sha256": "fe4af5e0c5ec247a3205c93eee9f42e94cf1426c390980df101b8d0c7aa1da15"
},
"downloads": -1,
"filename": "aiohttp_valera_validator-0.1.1.tar.gz",
"has_sig": false,
"md5_digest": "a4b8aa4ec2816690efab98364a609eb6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 8731,
"upload_time": "2024-10-13T15:17:45",
"upload_time_iso_8601": "2024-10-13T15:17:45.269006Z",
"url": "https://files.pythonhosted.org/packages/ae/e3/6f2bcba42393a1bf3b7b250a34cb20c98d267f77ae9bfbd3df6d36004ef8/aiohttp_valera_validator-0.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-13 15:17:45",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "tsv1",
"github_project": "aiohttp-valera-validator",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"lcname": "aiohttp-valera-validator"
}