Skip to main content

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().

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aiohttp_route_decorator-0.1.4.tar.gz (3.8 kB view details)

Uploaded Source

File details

Details for the file aiohttp_route_decorator-0.1.4.tar.gz.

File metadata

File hashes

Hashes for aiohttp_route_decorator-0.1.4.tar.gz
Algorithm Hash digest
SHA256 d03fa077255852c26609c6134f342bfd5028b7b4ce19bf7927f55a04684c653c
MD5 a02ac34d701c579c11f39d4c9c02adab
BLAKE2b-256 4fb63af0444d36812b68367c3bb8ff65d0ccf5ba855ce28cda5ce10ff465021a

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.4 This release

1 file

0.1.3

1 file

0.1.2

1 file

0.1.1

1 file

0.1.0

1 file

0.0.1

1 file

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page