Let you implement observer pattern from the box
Project description
observerutil is simple and powerful observer pattern tool.
How to install
You could install from PyPi:
$ python3 -m pip install observerutil
Any callable can become observer
from typing import Any
from observerutil import Observers
def func_a():
...
def func_b():
...
observers = Observers([func_a])
observers.add(func_b)
observers.notify()
It is possible to provide any args and kwargs to observer
from typing import Any
from observerutil import Observers
def func_a(message: int):
...
observers = Observers()
observers.add(func_a)
# Distribute message to func_a.
# Any exceptions will be ignored.
message = 0
observers.notify(message)
from typing import Any
from observerutil import Observers
def func_a(**kwargs):
...
observers = Observers()
observers.add(func_a)
# Distribute kwargs to func_a.
# Any exceptions will be ignored.
observers.notify(user_id=123, role='client')
But in this case any exception will be ignored. If you would like to catch exceptions then use Observer with error handler.
from typing import Any
from observerutil import Observer, Observers, ErrorHandler
def func_a(message: int):
print(100 / message)
def write_exception_to_logs(exc: Exception):
...
observer = Observer(func_a, error_handler=write_exception_to_logs)
observers = Observers()
observers.add(func_a)
message = 0
observers.notify(message)
If you would like to adapt message for observers in the collection then add message adapter
from typing import Any
from observerutil import Observers
def func_a(message: int):
print(100 / message)
# parameters_adapter has to implement IParametersAdapter interface
def convert_to_int(*args, **kwargs):
# exception of adapter is not catched by Observers instance.
# add try...except here by self if required.
return [int(arg) for arg in args], kwargs
observers = Observers(parameters_adapter=convert_to_int)
observers.add(func_a)
message = '2'
observers.notify(message)
More elegant way to convert each arg
from typing import Any
from observerutil import Observers, AdaptEachArg
def func_a(message: int):
print(100 / message)
observers = Observers(parameters_adapter=AdaptEachArg(int))
observers.add(func_a)
message = '2'
observers.notify(message)
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
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 observerutil-0.2.1.tar.gz.
File metadata
- Download URL: observerutil-0.2.1.tar.gz
- Upload date:
- Size: 7.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
74b212cc5a475cc94aff9cf43149e2cd8dab5a9a2344b88b1bc13626466ee3d8
|
|
| MD5 |
e443c626f337a9dc788e04c1d6536680
|
|
| BLAKE2b-256 |
5b574518c44bc146ed3e5626c1a827b37057c9f03df91e617cc0def564ad1e4b
|
File details
Details for the file observerutil-0.2.1-py3-none-any.whl.
File metadata
- Download URL: observerutil-0.2.1-py3-none-any.whl
- Upload date:
- Size: 7.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
92c8d7ae924555c6141aaa77a39e985851c8b48a86f262ae81e98208ab891c1f
|
|
| MD5 |
344566f8a05175a6d60115eff9192f77
|
|
| BLAKE2b-256 |
00d7bbd96d6d84ff4ed4c6d36b87ba0352bd1c34552dcc4fe85b6303e68de5de
|