Skip to main content

Tools to make ASGI Applications

Project description

asgi-tools – Tools to make ASGI Applications

Features:

  • Request – Parse ASGI scope, get url, headers, cookies, read a request’s data/json/form-data

  • Response – Send HTTP (html, json) responses

  • RequestMiddleware – Parse a scope and insert the parsed request into the scope

  • ResponseMiddleware – Parse responses and convert them into ASGI messages

  • RouterMiddleware – Route HTTP requests

  • LifespanMiddleware – Process a lifespan cycle

  • AppMiddleware – A combined (request, response, router, lifespan) middleware to quikly create ASGI apps

Tests Status PYPI Version

Requirements

  • python >= 3.7

Installation

asgi-tools should be installed using pip:

pip install asgi-tools

Usage

asgi_tools.Request, asgi_tools.Response

Parse HTTP Request data from a scope and build a http response:

from asgi_tools import Request, Response


template = "... any template for the HTML content here ..."


async def app(scope, receive, send):
 if scope['type'] != 'http':
     return

 # Parse the given scope
 request = Request(scope, receive, send)
 # Render the page
 body = template.render(

     # Get full URL
     url=request.url,

     charset=request.charset,

     # Get headers
     headers=request.headers,

     # Get query params
     query=request.query,

     # Get cookies
     cookies=request.cookies,

     # Get a decoded request body (the methods: request.body, request.form, request.json also available)
     text=await request.text(),

 )

 # Render a response as HTML (HTMLResponse, PlainTextResponse, JSONResponse, StreamResponse, RedirectResponse also available)
 return await Response(body, content_type="text/html")(scope, receive, send)

Response/Request Middlewares

Automatically convert a scope into a asgi_tools.Request

from asgi_tools import RequestMiddleware


async def base_app(request, receive, send):
    assert request.url
    assert request.headers
    # ...

app = RequestMiddleware(base_app)

Automatically parse an result from asgi apps and convert it into a asgi_tools.Response

from asgi_tools import ResponseMiddleware


async def base_app(request, receive, send):
    return "Hello World!"

app = ResponseMiddleware(base_app)

Router Middleware

Route HTTP requests

from asgi_tools import RouterMiddleware, ResponseMiddleware


async def index_and_default(*args):
    return "Hello from Index"


async def page1(*args):
    return "Hello from Page1"


async def page2(*args):
    return "Hello from Page2"


app = ResponseMiddleware(RouterMiddleware(index_and_default, routes={'/page1': page1, '/page2': page2}))

Alternative usage

from asgi_tools import RouterMiddleware, ResponseMiddleware


async def index_and_default(*args):
    return "Hello from Index"


router = RouterMiddleware(index_and_default)


@router.route('/page1')
async def page1(*args):
    return "Hello from Page1"


@router.route('/page2')
async def page2(*args):
    return "Hello from Page2"


app = ResponseMiddleware(router)

Bug tracker

If you have any suggestions, bug reports or annoyances please report them to the issue tracker at https://github.com/klen/asgi-tools/issues

Contributing

Development of the project happens at: https://github.com/klen/asgi-tools

License

Licensed under a MIT license.

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.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

asgi_tools-0.0.19-py3-none-any.whl (10.1 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page