Pait is a python api interface tool, which can also be called a python api interface type (type hint)
Project description
pait
Pait is a python api interface tool, which can also be called a python api interface type (type hint)
pait enables your python network framework to have type checking and parameter type conversion like fastapi (power by pydantic)
Installation
pip install pait
Usage
IDE Support
While pydantic will work well with any IDE out of the box.
Currently only supports starlette
and flask
(more python web frameworks will be supported in the future)
starlette
use example
import uvicorn
from typing import Optional
from starlette.applications import Starlette
from starlette.routing import Route
from starlette.requests import Request
from starlette.responses import JSONResponse
from pait.field import Body, Query
from pait.web.starletter import params_verify
from pydantic import (
BaseModel,
conint,
constr,
)
class PydanticModel(BaseModel):
uid: conint(gt=10, lt=1000)
user_name: constr(min_length=2, max_length=4)
class PydanticOtherModel(BaseModel):
age: conint(gt=1, lt=100)
@params_verify()
async def demo_post(
request: Request,
model: PydanticModel = Body(),
other_model: PydanticOtherModel = Body()
):
"""Test Method:Post request, Pydantic Model and request"""
print(request)
return_dict = model.dict()
return_dict.update(other_model.dict())
return JSONResponse({'result': model.dict()})
@params_verify()
async def demo_get2(
model: PydanticModel = Query(),
other_model: PydanticOtherModel = Query()
):
"""Test Method:Post request, Pydantic Model"""
return_dict = model.dict()
return_dict.update(other_model.dict())
return JSONResponse({'result': return_dict})
@params_verify()
async def demo_get(
uid: conint(gt=10, lt=1000) = Query(),
user_name: constr(min_length=2, max_length=4) = Query(),
email: Optional[str] = Query(default='example@xxx.com'),
model: PydanticOtherModel = Query()
):
"""Text Pydantic Model and Field"""
_dict = {
'uid': uid,
'user_name': user_name,
'email': email,
'age': model.age
}
return JSONResponse({'result': _dict})
app = Starlette(
routes=[
Route('/api', demo_get, methods=['GET']),
Route('/api1', demo_post, methods=['POST']),
Route('/api2', demo_get2, methods=['GET']),
]
)
uvicorn.run(app)
flask
use example
import uvicorn
from typing import Optional
from starlette.applications import Starlette
from starlette.routing import Route
from starlette.requests import Request
from starlette.responses import JSONResponse
from pait.field import Body, Query
from pait.web.starletter import params_verify
from pydantic import (
BaseModel,
conint,
constr,
)
class PydanticModel(BaseModel):
uid: conint(gt=10, lt=1000)
user_name: constr(min_length=2, max_length=4)
class PydanticOtherModel(BaseModel):
age: conint(gt=1, lt=100)
@params_verify()
async def demo_post(
request: Request,
model: PydanticModel = Body(),
other_model: PydanticOtherModel = Body()
):
"""Test Method:Post request, Pydantic Model and request"""
print(request)
return_dict = model.dict()
return_dict.update(other_model.dict())
return JSONResponse({'result': model.dict()})
@params_verify()
async def demo_get2(
model: PydanticModel = Query(),
other_model: PydanticOtherModel = Query()
):
"""Test Method:Post request, Pydantic Model"""
return_dict = model.dict()
return_dict.update(other_model.dict())
return JSONResponse({'result': return_dict})
@params_verify()
async def demo_get(
uid: conint(gt=10, lt=1000) = Query(),
user_name: constr(min_length=2, max_length=4) = Query(),
email: Optional[str] = Query(default='example@xxx.com'),
model: PydanticOtherModel = Query()
):
"""Text Pydantic Model and Field"""
_dict = {
'uid': uid,
'user_name': user_name,
'email': email,
'age': model.age
}
return JSONResponse({'result': _dict})
app = Starlette(
routes=[
Route('/api', demo_get, methods=['GET']),
Route('/api1', demo_post, methods=['POST']),
Route('/api2', demo_get2, methods=['GET']),
]
)
uvicorn.run(app)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
pait-0.1.0.tar.gz
(5.6 kB
view details)
Built Distribution
pait-0.1.0-py3-none-any.whl
(12.6 kB
view details)
File details
Details for the file pait-0.1.0.tar.gz
.
File metadata
- Download URL: pait-0.1.0.tar.gz
- Upload date:
- Size: 5.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.48.0 CPython/3.5.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1bddaf408dc05026bfd81777c9ef5cf1a1fd53b259975f59e3d52d821c5485b6 |
|
MD5 | d2634ae079ef8b09da7a58bbc66b4e0b |
|
BLAKE2b-256 | fc270f9bfa49c4b2a8ad4eb7893612ff2a3b52e4cf928ed47cd896e5cc975010 |
File details
Details for the file pait-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: pait-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.48.0 CPython/3.5.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4e2ddddfde5faf844f346a8939376ba680483bf7f35c33db3d2cb9b203360461 |
|
MD5 | e35cbaa926790a2ba3cda61f55cd356c |
|
BLAKE2b-256 | 0151d7ea828c007591d4a6720c1c3040800ee50f00b1ee055751cf14c3af76d7 |