lightning-fast, high-performance event handle framework
Project description
A lightweight event framework
Documentation: https://molto0504.github.io/tiny-listener
Source Code: https://github.com/molto0504/tiny-listener
Introduction
Tiny-listener is a lightweight and flexible event framework.
Requirements
Python 3.8+
Installation
$ pip install tiny-listener
Why use tiny-listener
- ✔ Pure Python.
- ✔ Lightning-fast, based on native coroutine.
- ✔ 100% test coverage.
Example
Consider we want to write a program keep listening message received from somewhere (e.g. http request or message queue), when message arrived, we want to execute a series of operations in a certain order, e.g.
- step 1: save user data to database
- step 2: send email to user
In the development process, we often encounter such problems:
- the source of step 1 and step 2 may be different
- step 2 may depend on the result of step 1, that is to say, step 2 may need to wait for step 1 to complete
- there are many messages, many events, and it is not easy to maintain
Tiny-listener may help you solve these problems:
Create a file example.py with:
from tiny_listener import Event, Listener, Param
class App(Listener):
async def listen(self):
ctx = self.new_ctx()
ctx.trigger_event("step 2: send email to alice@tl.com")
ctx.trigger_event("step 1: save Alice's data to database", data={"age": 35})
app = App()
@app.on_event("step 1: save {username}'s data to database")
async def step_1(event: Event, username: Param):
age = event.data["age"]
print(f"Step-1: Save data done!, {username=}, {age=}")
@app.on_event("step 2: send email to {email}")
async def step_2(event: Event, email: Param):
await event.wait_event_done("step_1")
print(f"Step-2: Send email done!, {email=}")
Run it:
$ tiny-listener example:app
>>> Save data done!, username='Alice', age=35
>>> Send email done!, email='alice@tl.com'
How it works
- Create your own Listener and listen something(e.g. port, queue ...):
from tiny_listener import Event, Listener, Param
class App(Listener):
async def listen(self):
ctx = self.new_ctx()
ctx.trigger_event("step 2: send email to alice@tl.com")
ctx.trigger_event("step 1: save Alice's data to database", data={"age": 35})
- Add event handler to your listener:
app = App()
@app.on_event("step 1: save {username}'s data to database")
async def step_1(event: Event, username: Param):
age = event.data["age"]
print(f"Step-1: Save data done!, {username=}, {age=}")
@app.on_event("step 2: send email to {email}")
async def step_2(event: Event, email: Param):
await event.wait_event_done("step_1")
print(f"Step-2: Send email done!, {email=}")
- Run listener with command:
$ tiny-listener example:app
- Tiny-listener will dispatch every event automatically:
>>> Step-1: Save data done!, username='Alice', age=35
>>> Step-2: Send email done!, email='alice@tl.com'
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tiny-listener-1.2.1.tar.gz.
File metadata
- Download URL: tiny-listener-1.2.1.tar.gz
- Upload date:
- Size: 11.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.8.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e2f448a6f9ffe98a4a7ec0faccc33d82452074337799a926ca93bd0931bc6c70
|
|
| MD5 |
c82630b372c17a2307638b355cf7c859
|
|
| BLAKE2b-256 |
be2bc1740f15784dbbe8c6e345a74ea1e7f3ed6c881b28616f49403584f2bd9b
|
File details
Details for the file tiny_listener-1.2.1-py3-none-any.whl.
File metadata
- Download URL: tiny_listener-1.2.1-py3-none-any.whl
- Upload date:
- Size: 28.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.8.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd71e5a0eab6664608e9cb485cbfda697622188c08bddfa1e411bac33f93352e
|
|
| MD5 |
0617189e2796c7d961cf75b299d33dfb
|
|
| BLAKE2b-256 |
6e2e42fd25f9073c9142b559b04c7076257fc17785e0123e1cae515ab10a7eb2
|