Skip to main content

Tools to make ASGI Applications

Project description

asgi-tools – Tools to make ASGI Applications

Features:

  • Supports Asyncio and Trio libraries

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

  • Response – Send HTTP (text, html, json, stream, file, http errors) 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

  • StaticFilesMiddleware – Serve static files from URL prefixes

  • 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 return it as JSON response:

import json
from asgi_tools import Request, Response

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

    # Parse scope
    request = Request(scope, receive, send)
    request_data = {

        # Get full URL
        "url": str(request.url),

        "charset": request.charset,

        # Get headers
        "headers": {**request.headers},

        # Get query params
        "query": dict(request.query),

        # Get cookies
        "cookies": dict(request.cookies),

    }

    # Create a response (ResponseHTML, ResponseText, ResponseJSON, ResponseStream, ResponseFile, ResponseRedirect also available)
    response = Response(json.dumps(request_data), content_type="application/json")

    # Send ASGI messages
    return await response(scope, receive, send)

Response/Request Middlewares

Automatically convert a scope into a asgi_tools.Request

from asgi_tools import RequestMiddleware, ResponseHTML

async def app(request, receive, send):
    # We will get a parsed request here
    data = await request.json()
    response = ResponseHTML(data['name'])
    return await response(request, receive, send)

app = RequestMiddleware(app)

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

from asgi_tools import ResponseMiddleware

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

app = ResponseMiddleware(app)

Router Middleware

Route HTTP requests

from http_router import Router
from asgi_tools import RouterMiddleware, RequestMiddleware, ResponseMiddleware

router = Router()

@router.route('/page1')
async def page1(request, receive, send):
    return 'page1'

@router.route('/page2')
async def page2(request, receive, send):
    return 'page2'

# TODO

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.6.3-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: asgi_tools-0.6.3-py3-none-any.whl
  • Upload date:
  • Size: 11.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for asgi_tools-0.6.3-py3-none-any.whl
Algorithm Hash digest
SHA256 648e53360c5e7a723575e0232a9dc9feb6ee8d7ca5d6b9bffca074e6b7aba6fd
MD5 4ccdfb7578960482186846271538d924
BLAKE2b-256 f89c9ef8412c34ee7aff581d029084f3c6bbd32d5a3b9e61ed239b461a713d11

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