Python implementation for the Events Management system (aka Observer pattern)
Project description
Events Manager
Python implementation of the Events Management system (aka Observer pattern).
Getting started
Requirements
- Python >= 3.8
Installation
pip install events-manager
Usage
Listening and emitting an Event
Listener is invoked when the event is emitted.
from asyncio import run, sleep
from events_manager import Event, emit, listen
class FooEvent(Event):
pass
def foo_listener(event: FooEvent):
print(f"'foo_listener' invoked with {event}")
async def main():
listen(FooEvent, foo_listener)
print("Emitting event...")
emit(FooEvent())
# do the other stuff...
await sleep(1)
if __name__ == '__main__':
run(main())
Output:
Emitting event...
'foo_listener' invoked with <__main__.FooEvent object at 0x7fdce6f5a0a0>
Process finished with exit code 0
sync
and async
listeners
from asyncio import run, sleep
from events_manager import Event, emit, listen
class FooEvent(Event):
pass
async def foo_listener(event: FooEvent):
print(f"'foo_listener' invoked with {event}")
async def main():
listen(FooEvent, foo_listener)
print("Emitting event...")
emit(FooEvent())
# do the other stuff...
await sleep(1)
if __name__ == '__main__':
run(main())
Output:
Emitting event...
'foo_listener' invoked with <__main__.FooEvent object at 0x7f81e76ad0a0>
Process finished with exit code 0
args
and kwargs
support
The listen
method supports also args
and kwargs
that will be passed to the listened listener.
from asyncio import run, sleep
from events_manager import Event, emit, listen
class FooEvent(Event):
pass
async def foo_listener(event: FooEvent, bar, baz):
print(f"'foo_listener' invoked with {event}, {bar} and {baz}")
async def main():
listen(FooEvent, foo_listener, False, 'bar', baz='baz')
print("Emitting event...")
emit(FooEvent())
# do the other stuff...
await sleep(1)
if __name__ == '__main__':
run(main())
Output:
Emitting event...
'foo_listener' invoked with <__main__.FooEvent object at 0x7fdbd0fa50d0>, bar and baz
Process finished with exit code 0
Register a listener with @on
decorator
Instead of calling listen
method, you can also use the @on
decorator.
from asyncio import run, sleep
from events_manager import Event, emit, on
class FooEvent(Event):
pass
@on(FooEvent)
def foo_listener(event: FooEvent):
print(f"'foo_listener' invoked with {event}")
async def main():
print("Emitting event...")
emit(FooEvent())
# do the other stuff...
await sleep(1)
if __name__ == '__main__':
run(main())
Output:
Emitting event...
'foo_listener' invoked with <__main__.FooEvent object at 0x7fa0a9a47100>
Process finished with exit code 0
Unregister a listener
Call unregister
method passing the event type that you want to stop listening and the listener.
from asyncio import run, sleep
from events_manager import Event, emit, listen, unregister
class FooEvent(Event):
pass
def foo_listener(event: FooEvent):
print(f"'foo_listener' invoked with {event}")
async def main():
listen(FooEvent, foo_listener)
print("Emitting first event...")
emit(FooEvent())
# let the event be processed
await sleep(1)
unregister(FooEvent, foo_listener)
print("Emitting second event...")
emit(FooEvent())
# do the other stuff...
await sleep(1)
if __name__ == '__main__':
run(main())
Output:
Emitting first event...
'foo_listener' invoked with <__main__.FooEvent object at 0x7f92c79b9070>
Emitting second event...
Process finished with exit code 0
Development
Run Tests
./test
Style Check
./lint
License
Distributed under the MIT License. See LICENSE
file for more information.
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
Built Distribution
File details
Details for the file events-manager-0.2.2.tar.gz
.
File metadata
- Download URL: events-manager-0.2.2.tar.gz
- Upload date:
- Size: 5.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.17
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8c78c93263f1d97cb8275f98a8dab687036bdfa43168119639b99a3ab530a3c6 |
|
MD5 | 58218ab34a23b63c86f937409d677797 |
|
BLAKE2b-256 | 6f11ee3e723ca1e459bf14ca8b2c2033b032b1831884832de1c9c6f4c262ddaa |
File details
Details for the file events_manager-0.2.2-py3-none-any.whl
.
File metadata
- Download URL: events_manager-0.2.2-py3-none-any.whl
- Upload date:
- Size: 4.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.17
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 48d433ff12701c4e774d9f202df0ef27fa2ce76905f46eb1d2f3c37980c0f858 |
|
MD5 | 8266219db33e4e2e48b1c3353b7b5a4c |
|
BLAKE2b-256 | ebf70a3237b253414f52a57a436f7087f9dfeeee1a59c817f055cafd7a6ae919 |