aiohttp @route decorator that doesn't need the app singleton
Project description
aiohttp_route_decorator
The library provides @route decorator for aiohttp.web, resembling the contract of Flask @app.route.
The imaginary aiohttp @app.route decorator is discouraged for multiple reasons; this one tries to solve part of those problems (the app doesn’t need to be global at the very least).
Installation
pip install aiohttp_route_decorator
Usage
Create a route object in each of your handler modules, and decorate the handlers:
# myapp/handlers.py
from aiohttp_route_decorator import RouteCollector
route = RouteCollector()
@route('/')
async def index(request):
return web.Response(body=b'OK')
@route('/publish', method='POST')
async def publish(request):
return web.Response(body=b'OK')
@route('/login', methods=['GET', 'POST'], name='login')
async def login(request):
if request.method == 'POST':
return web.Response(body=b'OK')
return web.Response(body=b'Login')
When you init the application, push the collected routes into app.router:
from aiohttp import web
from myapp import handlers
def run():
app = web.Application()
handlers.route.add_to_router(app.router)
web.run_app(app)
Non-decorator use
If you prefer to keep your routes together, you can construct the list manually after your handers:
from aiohttp_route_decorator import RouteCollector, Route
async def index(request):
return web.Response(body=b'OK')
async def publish(request):
return web.Response(body=b'OK')
async def login(request):
if request.method == 'POST':
return web.Response(body=b'OK')
return web.Response(body=b'Login')
routes = RouteCollector([
Route('/', index),
Route('/publish', publish, method='POST'),
Route('/login', login, methods=['GET', 'POST'], name='login'),
])
Prefixed routes
You can provide common route prefix that will be prepended to all routes:
from aiohttp_route_decorator import RouteCollector
routes = RouteCollector(prefix='/app')
@route('/')
async def index(request):
return web.Response(body=b'OK')
@route('/publish', method='POST')
async def publish(request):
return web.Response(body=b'OK')
...
handlers.route.add_to_router(app.router)
# /app/ -> index
# /app/publish -> publish
You can also provide the prefix within add_to_router() call instead:
from aiohttp_route_decorator import RouteCollector
routes = RouteCollector()
@route('/')
async def index(request):
return web.Response(body=b'OK')
@route('/publish', method='POST')
async def publish(request):
return web.Response(body=b'OK')
...
handlers.route.add_to_router(app.router, prefix='/app')
# /app/ -> index
# /app/publish -> publish
…or use both:
from aiohttp_route_decorator import RouteCollector
routes = RouteCollector(prefix='/app')
@route('/')
async def index(request):
return web.Response(body=b'OK')
@route('/publish', method='POST')
async def publish(request):
return web.Response(body=b'OK')
...
handlers.route.add_to_router(app.router, prefix='/project')
# /project/app/ -> index
# /project/app/publish -> publish
The non-decorator version of RouteCollector can also accept prefix:
from aiohttp_route_decorator import RouteCollector, Route
async def index(request):
return web.Response(body=b'OK')
async def publish(request):
return web.Response(body=b'OK')
routes = RouteCollector(prefix='/app', routes=[
Route('/', index),
Route('/publish', publish, method='POST'),
])
Parameters reference
route(path, *, method='GET', methods=None, name=None, **kwargs)
path (str) — route path. Should be started with slash ('/').
method (str) — HTTP method for route. Should be one of 'GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS' or '*' for any method.
methods (List[str]) — optional shortcut for creating several routes with different HTTP methods at once. If used, should be a list of acceptable values for method argument.
name (str) — optional route name.
kwargs — other parameters to be passed to aiohttp.web.Resource.add_route().
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Hashes for aiohttp_route_decorator-0.1.4.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | d03fa077255852c26609c6134f342bfd5028b7b4ce19bf7927f55a04684c653c |
|
MD5 | a02ac34d701c579c11f39d4c9c02adab |
|
BLAKE2b-256 | 4fb63af0444d36812b68367c3bb8ff65d0ccf5ba855ce28cda5ce10ff465021a |