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

Uploaded Python 3

File details

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

File metadata

  • Download URL: asgi_tools-0.9.0-py3-none-any.whl
  • Upload date:
  • Size: 12.2 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.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8699118c77fafe424465af4b9e52ec9077ee9ba89705424216329540f948a21e
MD5 c7842ee5e2e828947b7a87cb398dcb18
BLAKE2b-256 a8c211f9fab3151f4ea351292fb0a74c02cc4134d381eee67a4030fb886a0245

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