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 details)

Uploaded Python 3

File details

Details for the file asgi_tools-0.0.19-py3-none-any.whl.

File metadata

  • Download URL: asgi_tools-0.0.19-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.9.0

File hashes

Hashes for asgi_tools-0.0.19-py3-none-any.whl
Algorithm Hash digest
SHA256 98444a6bcda27d7c7645185144664f4307d7be231e0c82bb80094d3a64b108ec
MD5 826c14f7ccba1017fb466d9b05d189fb
BLAKE2b-256 4a89a0b270650169aa8794a79d14429fc29c3b40c78a9ef03bee177d4541a6ec

See more details on using hashes here.

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