Skip to content
This repository has been archived by the owner on Jan 2, 2022. It is now read-only.
/ urouter Public archive

Universal layered router configurator (inspired by go-chi/chi)

License

Notifications You must be signed in to change notification settings

theruziev/urouter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

uRouter

https://img.shields.io/travis/com/theruziev/urouter.svg?style=flat-square https://img.shields.io/codecov/c/github/theruziev/urouter.svg?style=flat-square

Installation

pip install urouter

Supported web frameworks

Quickstart

Define handler in router

from aiohttp import web
from urouter.exporters.aiohttp_exporter import AioHttpRouter
app = web.Application()

 async def handler(request):
    return web.Response(text="Hello World")

router = AioHttpRouter(app)

router.get("/home", handler)

# At this point aiohttp is ready to register all routes
router.export()

Define global middleware for all routes

from aiohttp import web
from urouter.exporters.aiohttp_exporter import AioHttpRouter
app = web.Application()

@web.middleware
async def info_middleware(request, handler):
    # some operation before handle request
    response = await handler(request)
    return response

 async def handler(request):
    return web.Response(text="Hello World")

router = (AioHttpRouter(app)
            .use(info_middleware))

# Register handler
router.get("/home", handler)

# At this point aiohttp is ready to register all routes
router.export()

Define inline middleware (run only for specific handler)

from aiohttp import web
from urouter.exporters.aiohttp_exporter import AioHttpRouter
app = web.Application()

@web.middleware
async def info_middleware(request, handler):
    # some operation before handle request
    response = await handler(request)
    return response

 async def handler(request):
    return web.Response(text="Hello World")

router = AioHttpRouter(app)

# Middleware registered only for `/home` route
router.include(info_middleware).get("/home", handler)

# At this point aiohttp is ready to register all routes
router.export()

Define subrouter

from aiohttp import web
from urouter.exporters.aiohttp_exporter import AioHttpRouter
app = web.Application()

@web.middleware
async def info_middleware(request, handler):
    # some operation before handle request
    response = await handler(request)
    return response

 async def handler(request):
    return web.Response(text="Hello World")

 async def sub_handler(request):
    return web.Response(text="Hello World")


router = AioHttpRouter(app)

router.include(info_middleware).get("/home", handler)

# Create new router
subrouter = router.make_router()
subrouter.get("/hello", sub_handler)

# All registered router become starts with prefix `/sub/`
# `/hello` becomes `/sub/hello`
router.mount("/sub", subrouter)

# At this point aiohttp is ready to register all routes
router.export()

Private/Public router

from aiohttp import web
from urouter.exporters.aiohttp_exporter import AioHttpRouter
app = web.Application()

async def auth_middleware(request, handler):

    return web.HTTPForbidden()

async def public(request):
    return web.Response(text="Hello World")

async def private(request):
    return web.Response(text="Private Zone")

router = AioHttpRouter(app)
private_route = router.make_router().use(auth_middleware)

# Adding public handler
router.get("/home", public)

# Adding public handler
private_route.get("/private", private)

# Mount private router to main router
router.mount("/", private_route)

# At this point aiohttp is ready to register all routes
router.export()

About

Universal layered router configurator (inspired by go-chi/chi)

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published