Skip to main content

A lightweight ASGI framework

Project description

bareASGI

A lightweight ASGI framework (read the documentation)

Status

Work in progress.

Overview

This is a bare ASGI web server framework. The goal is to provide a minimal implementation, with other facilities (serving static files, CORS, sessions, etc.) being implemented by optional packages.

Some of the features provided by web frameworks are not required for a given app, or conflict with the version or varient required for a given solution.

See also:

Functionality

The framework supports:

  • Http,
  • WebSockets,
  • A basic method and path based router,
  • Middleware.

Examples

These examples use uvicorn as the ASGI server.

Simple Client

Here is a simple example which returns some text.

import uvicorn
from bareasgi import Application, text_writer

async def http_request_callback(scope, info, matches, content):
    return 200, [(b'content-type', b'text/plain')], text_writer('This is not a test')

app = Application()
app.http_router.add({'GET'}, '/{rest:path}', http_request_callback)

uvicorn.run(app, port=9009)

Rest Server

Here is a simple rest server.

import uvicorn
import json
from bareasgi import Application, text_reader, text_writer

async def get_info(scope, info, matches, content):
    text = json.dumps(info)
    return 200, [(b'content-type', b'application/json')], text_writer(text)

async def set_info(scope, info, matches, content):
    text = await text_reader(content)
    data = json.loads(text)
    info.update(data)
    return 204, None, None

app = Application(info={'name': 'Michael Caine'})
app.http_router.add({'GET'}, '/info', get_info)
app.http_router.add({'POST'}, '/info', set_info)

uvicorn.run(app, port=9009)

WebSockets

A WebSocket example can be found in the examples folder. Here is the handler.

async def test_callback(scope, info, matches, web_socket):
    await web_socket.accept()

    try:
        while True:
            text = await web_socket.receive()
            if text is None:
                break
            await web_socket.send('You said: ' + text)
    except Exception as error:
        print(error)

    await web_socket.close()

Middleware

Here is a simple middleware example.

import uvicorn
from bareasgi import Application, text_writer

async def first_middleware(scope, info, matches, content, handler):
    info['message'] = 'This is first the middleware. '
    response = await handler(scope, info, matches, content)
    return response


async def second_middleware(scope, info, matches, content, handler):
    info['message'] += 'This is the second middleware.'
    response = await handler(scope, info, matches, content)
    return response


async def http_request_callback(scope, info, matches, content):
    return 200, [(b'content-type', b'text/plain')], text_writer(info['message'])


app = Application(middlewares=[first_middleware, second_middleware])
app.http_router.add({'GET'}, '/test', http_request_callback)

uvicorn.run(app, port=9009)

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

bareasgi-3.1.0.tar.gz (12.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bareasgi-3.1.0-py3-none-any.whl (19.5 kB view details)

Uploaded Python 3

File details

Details for the file bareasgi-3.1.0.tar.gz.

File metadata

  • Download URL: bareasgi-3.1.0.tar.gz
  • Upload date:
  • Size: 12.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.3

File hashes

Hashes for bareasgi-3.1.0.tar.gz
Algorithm Hash digest
SHA256 e5e998f9df746ab622e87d70f6b0e3986cd0e82f2cefd46f8bf3c93e16abbf88
MD5 24a4215daed49a9c527a64faf9b0dca7
BLAKE2b-256 88c3b877d7947d6d187fc9b080aab6d723ab7ee6bc91a6ff9d422bc4c89b961d

See more details on using hashes here.

File details

Details for the file bareasgi-3.1.0-py3-none-any.whl.

File metadata

  • Download URL: bareasgi-3.1.0-py3-none-any.whl
  • Upload date:
  • Size: 19.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.3

File hashes

Hashes for bareasgi-3.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3075b06abaaef986ccc3ca88f632f163bcd17dddb9ce3e8da63baa20f1d4a596
MD5 3bf814369d12f1b07e1564ba98f170a6
BLAKE2b-256 3b73ec325004c2ec1cfc1ab2ab210a1f29ee4519e15f1b602418e3d6f5700709

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page