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:
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.3.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3941811faf0674935f5625afa42d7c5b2dfe6975bb5c1f71bc599a1a56b52b83 |
|
MD5 | 5272ea8f6879ae7bb17ab7721bc7fb6d |
|
BLAKE2b-256 | 80899bb8bd519a2679ee5ceedddf07b06230dd3548b39ff10cfecffb2edcd0f4 |