Aio application runner
Project description
Application runner for the aio asyncio framework
Build status
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 1 argument the name of the scheduler
@asyncio.coroutine
def example_scheduler(name):
# 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 configuration example:
[server:example]
protocol = my.example.ServerProtocol
address = 127.0.0.1
port = 8888
Protocol example code:
class ServerProtocol(asyncio.Protocol):
def connection_made(self, transport):
self.transport = transport
def data_received(self, data):
# do stuff
self.transport.close()
If you need further control over how the protocol is created and attached you can specify a factory method
Factory configuration example:
[server:example]
factory = my.example.server_factory
address = 127.0.0.1
port = 8080
Factory code example:
@asyncio.coroutine
def server_factory(name, protocol, address, port):
loop = asyncio.get_event_loop()
return (
yield from loop.create_server(
ServerProtocol, address, port))
Signals
Any section in the configuration that starts with listen: will subscribe listed functions to given events
An example listen configuration section
[listen:example]
example-signal = my.example.listener
And an example listener function
@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
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 Distribution
File details
Details for the file aio.app-0.0.4.tar.gz
.
File metadata
- Download URL: aio.app-0.0.4.tar.gz
- Upload date:
- Size: 7.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 748023e056ac9752b52995f9696ea79ca0d7129d682dc214716b86be61c27d27 |
|
MD5 | 13a868424627e82a4ab8ebc7f655d64d |
|
BLAKE2b-256 | aec4b90d71612ed46eeae515acab88756a5276471144502fffa0e46ebc909c7b |