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 (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
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
Built Distribution
File details
Details for the file asgi_tools-0.8.5-py3-none-any.whl
.
File metadata
- Download URL: asgi_tools-0.8.5-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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0b5d9ac37ed237573c48705b579f3e62d684d698facdbe22124b8da8789e5e49 |
|
MD5 | ccfc4a800964d80db0e8efe0ed75d0cb |
|
BLAKE2b-256 | f96faa4faca5a404ad7584754b449e41411559c0425585b535bd62f86b0f367c |