Skip to main content

Aeros web server, based on Quart/Flask

Project description

Aeros Documentation

Aeros is a production-grade ASGI (Asynchronous Server Gateway Interface) package containing wrappers for widely used Web and API functions.

Features

  • High-performance web server
    • Async request handling
    • Supports multi-threading
  • Production-grade ASGI (async WSGI)
  • In-Python code API
  • Easy Framework based on Flask/Quart

Why use Aeros over Flask and Quart?

While Flask is one of the most popular and frequently used frameworks, it doesn't come with a full WSGI server. Therefore, you will need an additional module like Waitress or Gunicorn. Quart shares the same features as Flask, but you can get more performance out of it, since it supports asynchronous request handling. But as for Flask, you will need a WSGI (an ASGI in this case) to deploy your Quart app into production. The most popular ASGI at the moment is called Hypercorn and is installed together with Quart.

But Hypercorn does only support deployment from console. Meaning, you will have to invoke a start command like: hypercorn <file>:<app_variable_name> to start your server. This makes it hard to deploy a multi-thread web server.

Aeros combines all the benefits from Quart and Hypercorn, while maintaining the in-Python API, making it easy to create an application that can be run from custom code, not by shell.

A more detailed overview of pros and cons can be found here:

Framework Async Production-grade Easy to use In-Python API
Flask ✕ ✕ ✕ ✓
Flask + Waitress ✕ ✓ ✕ ✓
Flask + Gunicorn ✓ ✓ ✕ ✓
Quart ✓ ✕ ✓ ✕
Quart + Hypercorn ✓ ✓ ✓ ✕
Aeros ✓ ✓ ✓ ✓

Getting started

This basic code snippet should get you ready for more. Remember that routed methods (the ones that are called on an HTTP endpoint) must be defined with async def, not def!

from Aeros import WebServer
from Aeros.misc import jsonify

app = WebServer(__name__, host="0.0.0.0", port=80)


@app.route("/")
async def home():
    return jsonify({"response": "ok"})


if __name__ == '__main__':
    app.start("-w 2")  # worker threads (for more arguments see hypercorn documentation)

Using sync methods in async methods

If you need to execute a synchronous method in an HTTP request handler and need to wait for its response, you should use sync_to_async from asgiref.sync. This method can also be imported from Aeros.misc:

from Aeros.misc import sync_to_async
import time

@sync_to_async
def sync_method():
    time.sleep(2)
    return "ok"

@app.route("/")
async def home():
    status = sync_method()
    return jsonify({"response": status})

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

Aeros-0.0.9.tar.gz (4.8 kB view details)

Uploaded Source

Built Distribution

Aeros-0.0.9-py3-none-any.whl (5.1 kB view details)

Uploaded Python 3

File details

Details for the file Aeros-0.0.9.tar.gz.

File metadata

  • Download URL: Aeros-0.0.9.tar.gz
  • Upload date:
  • Size: 4.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.3.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.6

File hashes

Hashes for Aeros-0.0.9.tar.gz
Algorithm Hash digest
SHA256 43dff6cfa6083cf09314ce2f51984025a61604b9944d0af4ea0b90f5fb0ea47a
MD5 3b24c7289c760621a2cf7648c98c4efb
BLAKE2b-256 12d7d8b0a57af1bc9d8ce66b4736d1e7c173f3e124f49fcf136f2b6e8783c5ca

See more details on using hashes here.

File details

Details for the file Aeros-0.0.9-py3-none-any.whl.

File metadata

  • Download URL: Aeros-0.0.9-py3-none-any.whl
  • Upload date:
  • Size: 5.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.3.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.6

File hashes

Hashes for Aeros-0.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 c7deb206e7c4c2dc954b051bfc0b1fd11809fde735c0caf2f278c3db8fbc9013
MD5 421e5f9f6055fb6c405aa735ca62ffaf
BLAKE2b-256 32a561016a4b7822035051cda6c8e47c16359fed4b164b3002f2824d895e40d0

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