Compare commits
2 Commits
v1.4.1
...
add_code_c
Author | SHA1 | Date | |
---|---|---|---|
|
b9519bb868 | ||
|
913f50298c |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,6 +1,9 @@
|
||||
.coverage
|
||||
.idea/
|
||||
.pytest_cache
|
||||
__pycache__
|
||||
aiohttp_pydantic.egg-info/
|
||||
build/
|
||||
coverage.xml
|
||||
dist/
|
||||
|
||||
|
@@ -2,11 +2,14 @@ language: python
|
||||
python:
|
||||
- '3.8'
|
||||
script:
|
||||
- pytest tests/
|
||||
- pytest --cov-report=xml --cov=aiohttp_pydantic tests/
|
||||
install:
|
||||
- pip install -U setuptools wheel pip
|
||||
- pip install -r test_requirements.txt
|
||||
- pip install -r requirements/test.txt
|
||||
- pip install -r requirements/ci.txt
|
||||
- pip install .
|
||||
after_success:
|
||||
- codecov
|
||||
deploy:
|
||||
provider: pypi
|
||||
username: __token__
|
||||
@@ -16,4 +19,4 @@ deploy:
|
||||
on:
|
||||
tags: true
|
||||
branch: main
|
||||
python: '3.8'
|
||||
python: '3.8'
|
||||
|
10
README.rst
10
README.rst
@@ -1,6 +1,16 @@
|
||||
Aiohttp pydantic - Aiohttp View to validate and parse request
|
||||
=============================================================
|
||||
|
||||
.. image:: https://travis-ci.org/Maillol/aiohttp-pydantic.svg?branch=main
|
||||
:target: https://travis-ci.org/Maillol/aiohttp-pydantic
|
||||
|
||||
.. image:: https://img.shields.io/pypi/v/aiohttp-pydantic
|
||||
:target: https://img.shields.io/pypi/v/aiohttp-pydantic
|
||||
:alt: Latest PyPI package version
|
||||
|
||||
.. image:: https://codecov.io/gh/Maillol/aiohttp-pydantic/branch/add_code_coverage/graph/badge.svg
|
||||
:target: https://codecov.io/gh/Maillol/aiohttp-pydantic
|
||||
:alt: codecov.io status for master branch
|
||||
|
||||
Aiohttp pydantic is an `aiohttp view`_ to easily parse and validate request.
|
||||
You define using the function annotations what your methods for handling HTTP verbs expects and Aiohttp pydantic parses the HTTP request
|
||||
|
@@ -1,3 +1,4 @@
|
||||
from inspect import getdoc
|
||||
import typing
|
||||
from typing import List, Type
|
||||
|
||||
@@ -67,6 +68,9 @@ def _add_http_method_to_oas(
|
||||
oas_operation: OperationObject = getattr(oas_path, http_method)
|
||||
handler = getattr(view, http_method)
|
||||
path_args, body_args, qs_args, header_args = _parse_func_signature(handler)
|
||||
description = getdoc(handler)
|
||||
if description:
|
||||
oas_operation.description = description
|
||||
|
||||
if body_args:
|
||||
oas_operation.request_body.content = {
|
||||
|
@@ -9,8 +9,14 @@ from aiohttp.web_exceptions import HTTPMethodNotAllowed
|
||||
from aiohttp.web_response import StreamResponse
|
||||
from pydantic import ValidationError
|
||||
|
||||
from .injectors import (AbstractInjector, BodyGetter, HeadersGetter,
|
||||
MatchInfoGetter, QueryGetter, _parse_func_signature)
|
||||
from .injectors import (
|
||||
AbstractInjector,
|
||||
BodyGetter,
|
||||
HeadersGetter,
|
||||
MatchInfoGetter,
|
||||
QueryGetter,
|
||||
_parse_func_signature,
|
||||
)
|
||||
|
||||
|
||||
class PydanticView(AbstractView):
|
||||
|
7
requirements/ci.txt
Normal file
7
requirements/ci.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
certifi==2020.11.8
|
||||
chardet==3.0.4
|
||||
codecov==2.1.10
|
||||
coverage==5.3
|
||||
idna==2.10
|
||||
requests==2.25.0
|
||||
urllib3==1.26.2
|
13
requirements/test.txt
Normal file
13
requirements/test.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
attrs==20.3.0
|
||||
coverage==5.3
|
||||
iniconfig==1.1.1
|
||||
packaging==20.4
|
||||
pluggy==0.13.1
|
||||
py==1.9.0
|
||||
pyparsing==2.4.7
|
||||
pytest==6.1.2
|
||||
pytest-aiohttp==0.3.0
|
||||
pytest-cov==2.10.1
|
||||
six==1.15.0
|
||||
toml==0.10.2
|
||||
typing-extensions==3.7.4.3
|
@@ -35,8 +35,8 @@ install_requires =
|
||||
swagger-ui-bundle
|
||||
|
||||
[options.extras_require]
|
||||
test = pytest; pytest-aiohttp
|
||||
|
||||
test = pytest==6.1.2; pytest-aiohttp==0.3.0; pytest-cov==2.10.1
|
||||
ci = pytest==6.1.2; pytest-aiohttp==0.3.0; pytest-cov==2.10.1; codecov==2.1.10
|
||||
|
||||
[options.packages.find]
|
||||
exclude =
|
||||
|
@@ -1,3 +0,0 @@
|
||||
pytest==6.1.1
|
||||
pytest-aiohttp==0.3.0
|
||||
typing_extensions>=3.6.5
|
@@ -15,9 +15,13 @@ class Pet(BaseModel):
|
||||
|
||||
class PetCollectionView(PydanticView):
|
||||
async def get(self) -> r200[List[Pet]]:
|
||||
"""
|
||||
Get a list of pets
|
||||
"""
|
||||
return web.json_response()
|
||||
|
||||
async def post(self, pet: Pet) -> r201[Pet]:
|
||||
"""Create a Pet"""
|
||||
return web.json_response()
|
||||
|
||||
|
||||
@@ -52,6 +56,7 @@ async def test_generated_oas_should_have_pets_paths(generated_oas):
|
||||
|
||||
async def test_pets_route_should_have_get_method(generated_oas):
|
||||
assert generated_oas["paths"]["/pets"]["get"] == {
|
||||
"description": "Get a list of pets",
|
||||
"responses": {
|
||||
"200": {
|
||||
"content": {
|
||||
@@ -71,12 +76,13 @@ async def test_pets_route_should_have_get_method(generated_oas):
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
async def test_pets_route_should_have_post_method(generated_oas):
|
||||
assert generated_oas["paths"]["/pets"]["post"] == {
|
||||
"description": "Create a Pet",
|
||||
"requestBody": {
|
||||
"content": {
|
||||
"application/json": {
|
||||
|
Reference in New Issue
Block a user