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

Uploaded Python 3

File details

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

File metadata

  • Download URL: asgi_tools-0.5.1-py3-none-any.whl
  • Upload date:
  • Size: 11.7 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.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ad2924c73c8ddc827389f54b8e4f49227169a4d40ccdf6f31a2e1f79baf7cbb4
MD5 fab5112de7b854fa4acd782a629b8a2c
BLAKE2b-256 91a77bd7860f807308e2963c3a6eecfcd3bcdc9cf6d2f49a9a9a723c005b2eb1

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