Skip to main content

lightning-fast, high-performance event handle framework

Project description

FastAPI

A lightweight event framework

Test Package version Supported Python versions


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'

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tiny-listener-1.2.1.tar.gz (11.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tiny_listener-1.2.1-py3-none-any.whl (28.7 kB view details)

Uploaded Python 3

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

Hashes for tiny-listener-1.2.1.tar.gz
Algorithm Hash digest
SHA256 e2f448a6f9ffe98a4a7ec0faccc33d82452074337799a926ca93bd0931bc6c70
MD5 c82630b372c17a2307638b355cf7c859
BLAKE2b-256 be2bc1740f15784dbbe8c6e345a74ea1e7f3ed6c881b28616f49403584f2bd9b

See more details on using hashes here.

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

Hashes for tiny_listener-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 fd71e5a0eab6664608e9cb485cbfda697622188c08bddfa1e411bac33f93352e
MD5 0617189e2796c7d961cf75b299d33dfb
BLAKE2b-256 6e2e42fd25f9073c9142b559b04c7076257fc17785e0123e1cae515ab10a7eb2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page