Skip to main content

An async web framework for humans

Project description

Installation

pip install aioserver

Getting Started

Start a test server with the examples in the Usage section below:

make test

Make requests against the running test server:

curl -v localhost:8080
curl -v localhost:8080/found
curl -v localhost:8080/not-found
curl -v localhost:8080/server-error

Usage

Create Application

from aioserver import Application

app = Application()

Basic Routes

@app.get('/')
async def index(request):
    return {'message': 'Hello, world!'}

@app.get('/found')
async def found(request):
    return 302, {'Location': 'https://www.example.com/'}, {'message': 'Found'}

@app.get('/not-found')
async def not_found(request):
    return 404, {'message': 'Not Found'}

@app.get('/server-error')
async def server_error(request):
    return 500

CORS Headers

@app.cors('*')
@app.get('/cross-origin-resource-sharing')
async def cross_origin_resource_sharing(request):
    return {'message': 'Greetings from a different origin!'}

@app.cors('*', ['X-Custom-Header'])
@app.get('/cross-origin-header-sharing')
async def cross_origin_header_sharing(request):
    return 200, {'X-Custom-Header': 'share-this-header-too'}, {'message': 'Hello!'}

Session Cookie

from aioserver.middleware import hours

@app.get('/session-cookie')
@app.session(max_age=24 * hours)
async def session_cookie(request):
    print(f'session uuid {request.session}')
    return 200, {'message': 'Session UUID set as cookie for 24 hours.'}

Custom Middleware

Route-specific middleware:

@app.middleware
async def always_ok(request, handler):
    response = await handler(request)
    response.set_status(200, 'OK')
    return response

@always_ok
@app.get('/not-found-but-still-ok')
async def not_found_but_still_ok(request):
    return 404, {'message': 'Not found but still OK!'}

Global middleware:

async def strict_transport_security(request, handler):
    response = await handler(request)
    response.headers['Strict-Transport-Security'] = 'max-age=31536000'
    return response

app.use(strict_transport_security)

Run Application

app.run(host='127.0.0.1', port=8080)

Changelog

v0.2.0

  • Decorator-based request handlers

v0.4.0

  • Allow handler to specify HTTP response status
  • Allow handler to specify additional HTTP headers

v0.5.0

  • Serialize XML ElementTree as text/xml response

v0.6.0

  • Decorator-based CORS

v0.6.2

  • Fix project description

v0.7.0

  • Route-specific middleware using decorators
  • Global middleware using app.use(...)
  • Refactor CORS headers as middleware
  • Add session cookie as middleware

v0.7.1

  • Package as a module instead of as a single file

v0.7.2

  • Update existing routes when adding new middleware

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

aioserver-0.7.2.tar.gz (6.9 kB view details)

Uploaded Source

Built Distribution

aioserver-0.7.2-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file aioserver-0.7.2.tar.gz.

File metadata

  • Download URL: aioserver-0.7.2.tar.gz
  • Upload date:
  • Size: 6.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.8.5

File hashes

Hashes for aioserver-0.7.2.tar.gz
Algorithm Hash digest
SHA256 e61ece63dc84cb8596b8d0bf76dbb1c19b2eb5fc1b43f26b898250d8a54e32d8
MD5 62cfc890e3562d522e850adfabdc88e5
BLAKE2b-256 331b817b179b76f922e3e9051c83777a620ea822e580b00b9629ff8396cb88e2

See more details on using hashes here.

File details

Details for the file aioserver-0.7.2-py3-none-any.whl.

File metadata

  • Download URL: aioserver-0.7.2-py3-none-any.whl
  • Upload date:
  • Size: 8.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.8.5

File hashes

Hashes for aioserver-0.7.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6d5f47f68109f2875de969a49b6519feba64d304bf06b38378d2a768dd73173b
MD5 3b87b5e56acd6df965de48693df1273d
BLAKE2b-256 311807a2010875f46873690aa71747a992542ae0e4e60f40f2a781c81d635f92

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