The App class
The main App
class manages the asyncio loop, the servers and events.
It can be imported using:
from mara import App
API reference
- class mara.app.app.App
Orchestrate servers, clients and tasks
- add_server(server: AbstractServer) AbstractServer
Add a new Server instance to the async loop
The server will start listening when the app is
run()
. If it is already running, it will start listening immediately.
- add_timer(timer: AbstractTimer) AbstractTimer
Add a new Timer instance to the async loop
The timer will start when the app is
run()
. If it is already running, it will start immediately.Returns the timer instance. Because timer instances are callable decorators, you can use this as a decorator to define a timer and its function in one:
@app.add_timer(PeriodicTimer(every=1)) async def tick(timer): ...
which is shorthand for:
async def tick(timer): ... timer = PeriodicTimer(every=60) app.add_timer(timer) timer(tick)
- listen(event_class: type[Event], handler: event_manager.HandlerType | None = None, **filters: event_manager.FilterType)
Bind a handler callback to the specified event class, and to its subclasses
- Parameters
event_class (Type[Event]) – The Event class to listen for
handler (Awaitable | None) – The handler, if not being decorated
**filters – Key value pairs to match against inbound events
Can be called directly:
app.listen(Event, handler)
or can be called as a decorator with no handler argument:
@app.listen(Event) async def callback(event): ...
- remove_server(server: AbstractServer)
Stop and remove the specified Server instance
- run(debug=True)
Start the main app async loop
This will start any Servers which have been added with
add_server()
- property status
Get the status of the app and its servers
Difference between this and self._status is when the app loop is RUNNING, this will return STARTING until all servers are listening
- stop()
This will ask the main loop to stop, shutting down all servers, connections and other async tasks.