Skip to main content

Aio application runner

Project description

Application runner for the aio asyncio framework

Build status

https://travis-ci.org/phlax/aio.app.svg?branch=master

Installation

Install with:

pip install aio.app

Configuration

By default the aio command will look for the following configuration files

  • aio.conf

  • etc/aio.conf

  • /etc/aio.conf

Once it has found a config file it uses that one

A custom configuration file can also be provide with “-c”, eg

aio -c custom.conf run

A basic configuration with the 2 provided commands, test and run is

[aio:commands]
run: aio.app.cmd.cmd_run
test: aio.app.testing.cmd.cmd_test

aio run

With the above configuration the app server can be run with

aio run

On startup the app server sets up the following

  • Configuration - system-wide read-only configuration

  • Modules - known modules

  • Schedulers - functions called at set times

  • Servers - listening on tcp/udp or other type of socket

  • Signals - functions called in response to events

Configuration

The system configuration is importable from aio.app

from aio.app import config

Modules

You can list any modules that should be imported at runtime in the configuration

[aio]
modules = aio.app
        aio.signals

The system modules can be accessed from aio.app

from aio.app import modules

Schedulers

Any sections in the configuration that start with schedule: will create a scheduler.

Specify the frequency and the function to call. The function should be a co-routine.

[schedule:example]
every: 2
func: my.scheduler.example_scheduler

The scheduler function takes no arguments

@asyncio.coroutine
def example_scheduler():
    # do something
    pass

Servers

Any sections in the configuration that start with server: will create a server

The server requires either a factory or a protocol to start

Protocol example:

[server:example]
protocol: my.example.ServerProtocol
address: 127.0.0.1
port: 8888
class ServerProtocol(asyncio.Protocol):

    def connection_made(self, transport):
        self.transport = transport

    def data_received(self, data):
        # do stuff
        pass

Factory example:

[server:example]
factory: my.example.server_factory
address: 127.0.0.1
port: 8888
@asyncio.coroutine
def server_factory(name, address, port):
    return (
        yield from asyncio.get_event_loop().create_server(
           ServerProtocol,
        address, port))

Signals

Any section in the configuration that starts with listen: will subscribe listed functions to given events

[listen:example]
example-signal: my.example.listener
@asyncio.coroutine
def listener(signal, message):
    print(message)

yield from app.signals.emit(
    'example-signal', "BOOM!")

You can add multiple subscriptions within the section

[listen:example]
example-signal: my.example.listener
example-signal-2: my.example.listener2

You can also subscribe multiple functions to a signal

[listen:example]
example-signal: my.example.listener
               my.example.listener2

Dependencies

aio.app depends on the following packages

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

aio.app-0.0.1.tar.gz (7.1 kB view hashes)

Uploaded Source

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