Skip to main content

Toolkit for building ASGI applications and libraries

Project description

Asgikit - ASGI Toolkit

Asgikit is a toolkit for building asgi applications and frameworks.

It is intended to be a minimal library and provide the building blocks for other libraries.

The examples directory contain usage examples of several use cases

Features:

  • Request
    • Headers
    • Cookies
    • Body (bytes, str, json, stream)
    • Form
  • Response
    • Plain text
    • Json
    • Streaming
    • File
  • Websockets

Request and Response

Asgikit Request and Response were designed to be have minimal interfaces, so they only provide very few methods to read from the request and write to the response. In particular, the Response works differently from most tools, in which you do not return a response, but you write data into it.

It is provided several functions to interact with the request and the response, for instance, to read form data from the request and write json to the response.

This strategy allows for simpler extensibility. For example, to parse json from the request using an alternative json parser, you just need to write a function that reads the request. Similarly, to write another data format into the response, you just write a function that writes to the response.

Custom JSON encoder and decoder

By default, asgikit uses json.dumps and json.loads for dealing with JSON. If you want to use other libraries like orjson, just define the environment variable ASGIKIT_JSON_ENCODER of the module compatible with json, or the full path to the functions that perform encoding and decoding, in that order:

ASGIKIT_JSON_ENCODER=orjson
# or
ASGIKIT_JSON_ENCODER=msgspc.json.encode,msgspc.json.encode

Example request and response

from asgikit.requests import Request, read_json
from asgikit.responses import respond_json


async def main(scope, receive, send):
  request = Request(scope, receive, send)

  # request method
  method = request.method

  # request path
  path = request.path

  # request headers
  headers = request.headers

  # read body as json
  body_json = await read_json(request)

  data = {
    "lang": "Python",
    "async": True,
    "platform": "asgi",
    "method": method,
    "path": path,
    "headers": dict(headers.items()),
    "body": body_json,
  }

  # send json response
  await respond_json(request.response, data)

Example websocket

from asgikit.requests import Request
from asgikit.errors.websocket import WebSocketDisconnectError

async def app(scope, receive, send):
    request = Request(scope, receive, send)
    ws = request.websocket
    await ws.accept()

    while True:
        try:
            message = await ws.receive()
            await ws.send(message)
        except WebSocketDisconnectError:
            print("Client disconnect")
            break

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

asgikit-0.9.0.tar.gz (12.1 kB view details)

Uploaded Source

Built Distribution

asgikit-0.9.0-py3-none-any.whl (15.2 kB view details)

Uploaded Python 3

File details

Details for the file asgikit-0.9.0.tar.gz.

File metadata

  • Download URL: asgikit-0.9.0.tar.gz
  • Upload date:
  • Size: 12.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for asgikit-0.9.0.tar.gz
Algorithm Hash digest
SHA256 01d24e361166bf20f015879ddf52aa01a7882ce161f0568705703b10772d0d71
MD5 072cf38e65955eaa22359d7a008dc47e
BLAKE2b-256 729419a93f109c87043b0ecf8738d5ade890df8598177fb98161cd8154199833

See more details on using hashes here.

File details

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

File metadata

  • Download URL: asgikit-0.9.0-py3-none-any.whl
  • Upload date:
  • Size: 15.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for asgikit-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9e0c41574f663cd27562c650564330cab7f85f124120830061d87d511a344028
MD5 68ff252906ca0b8d345abeceda5e8ea5
BLAKE2b-256 ef485aa9b10a14cc3a2083d10a8331290deec3085df7d7b1419ebf5e0ab0f9ca

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