aiohug
Project description
Goals:
- Unpack aiohttp (>=3.1) request to arguments with annotations
- Validate handlers arguments
- Generate swagger specification
Posts:
Examples
Arguments from path and query
from aiohttp import web from aiohug import RouteTableDef routes = RouteTableDef() @routes.get("/hello/{name}/") async def hello(name: fields.String(), greeting: fields.String() = "Hello"): return {"msg": f"{greeting}, {name}"} app = web.Application() app.add_routes(routes) if __name__ == "__main__": web.run_app(app)
There is no request object in handler signature anymore - only required arguments.
Body with schema
from aiohttp import web from aiohug import RouteTableDef routes = RouteTableDef() class PayloadSchema(Schema): count = fields.Int() @routes.get("/") async def with_body(body: PayloadSchema()): return body app = create_app() app.add_routes(routes) client = await test_client(app) resp = await client.get("/", json={"count": "5", "another": 7}) assert await resp.json() == {"count": 5}
Another shortcuts
@routes.post("/ping/") async def ping(): return 201, "pong"
Swagger
Use aiohug_swagger package.
Decorators
Because of the way aiohttp routing works all decorators to resource handlers must be applied BEFORE aiohug’s routing decorator, i.e.
def some_decorator(func): @wraps(func) def wrapper(request, *args, **kwargs): # Some logic for decorator return func(*args, **kwargs) return wrapper @routes.get("/ping/") @some_decorator async def hello(): return "pong"
Moreover, make sure to decorate wrapper functions with wraps decorator from functools module - otherwise aiohug won’t be able to access original handler’s arguments and annotations.
Why aiohug?
It’s just hug API implementation for aiohttp
TODO:
- don’t pass default arguments
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.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size aiohug-0.7.1.tar.gz (7.4 kB) | File type Source | Python version None | Upload date | Hashes View |