aiohttp-valera-validator


Nameaiohttp-valera-validator JSON
Version 0.1.1 PyPI version JSON
download
home_pagehttps://github.com/tsv1/aiohttp-valera-validator
SummaryRequest validation for aiohttp
upload_time2024-10-13 15:17:45
maintainerNone
docs_urlNone
authorNikita Tsvetkov
requires_python>=3.8
licenseApache-2.0
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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"
}
        
Elapsed time: 0.32635s