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 (html, json) 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
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 build a http response:
from asgi_tools import Request, Response
template = "... any template for the HTML content here ..."
async def app(scope, receive, send):
if scope['type'] != 'http':
return
# Parse the given scope
request = Request(scope, receive, send)
# Render the page
body = template.render(
# Get full URL
url=request.url,
charset=request.charset,
# Get headers
headers=request.headers,
# Get query params
query=request.query,
# Get cookies
cookies=request.cookies,
# Get a decoded request body (the methods: request.body, request.form, request.json also available)
text=await request.text(),
)
# Render a response as HTML (HTMLResponse, PlainTextResponse, JSONResponse, StreamResponse, RedirectResponse also available)
return await Response(body, content_type="text/html")(scope, receive, send)
Response/Request Middlewares
Automatically convert a scope into a asgi_tools.Request
from asgi_tools import RequestMiddleware
async def base_app(request, receive, send):
assert request.url
assert request.headers
# ...
app = RequestMiddleware(base_app)
Automatically parse an result from asgi apps and convert it into a asgi_tools.Response
from asgi_tools import ResponseMiddleware
async def base_app(request, receive, send):
return "Hello World!"
app = ResponseMiddleware(base_app)
Router Middleware
Route HTTP requests
from asgi_tools import RouterMiddleware, ResponseMiddleware
async def index_and_default(*args):
return "Hello from Index"
async def page1(*args):
return "Hello from Page1"
async def page2(*args):
return "Hello from Page2"
app = ResponseMiddleware(RouterMiddleware(index_and_default, routes={'/page1': page1, '/page2': page2}))
Alternative usage
from asgi_tools import RouterMiddleware, ResponseMiddleware
async def index_and_default(*args):
return "Hello from Index"
router = RouterMiddleware(index_and_default)
@router.route('/page1')
async def page1(*args):
return "Hello from Page1"
@router.route('/page2')
async def page2(*args):
return "Hello from Page2"
app = ResponseMiddleware(router)
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
Hashes for asgi_tools-0.0.20-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | af938f14f5f42be7c04b05c607e90faabf7143f5a0cf0413fa8abedcef835848 |
|
MD5 | a004a82bb57290ec90e6b4a93d0752b9 |
|
BLAKE2b-256 | 0c5e21c091005f8ee88fe721e58c9e8c4c7cd6a8414591e0af7da3f90d8a7b14 |