Object notification tool that implements observer design pattern at runtime
Project description
notifyr - Create observers in runtime
PyPi: https://pypi.org/project/notifyr/
Description
Notifyr is a package that enables simple class observed-observer schema at runtime. Instead of building the whole observation and notification toolchain, just use python decorators and notifyr will take care of the rest.
Inspired by the Observer Design Pattern, notifyr adds the necessary methods to your classes without inheritance.
Decorators
Function decorators:
@target
- Indicates that the decorated function is targeted and will trigger the observers
update()
everytime it runs.
- Indicates that the decorated function is targeted and will trigger the observers
Class decorators:
@observed
- Adds
.observers
list attribute. - Adds
.attach(obj)
method that appendsobj
to the observers list. - Adds
.notify()
method that notifies the observers everytime the targeted functions are called
- Adds
@observer('function_name')
- Adds
update()
method that executes class'sfunction_name()
passing, as arguments,self
and everything that the targeted function received (including theself
argument).
- Adds
Usage
Original Code:
class Dog(object):
def __init__(self, name):
self.name = name
def bark(self):
print('Woof')
def sleep(self):
print(self.name, 'is now asleep: ZZzzzzZzzZ...')
class Person(object):
def __init__(self, name):
self.name = name
def educate_dog(self, dog):
print(self.name + ':','Sleep,', dog.name)
dog.sleep()
Suppose we want a person to educate a dog every time the animal barks:
from notifyr.agents import observed, observer
from notifyr.functions import target
@observed
class Dog(object):
def __init__(self, name):
self.name = name
@target
def bark(self):
print('Woof')
def sleep(self):
print(self.name, 'is now asleep: ZZzzzzZzzZ...')
@observer('educate_dog')
class Person(object):
def __init__(self, name):
self.name = name
def educate_dog(self, dog):
print(self.name + ':','Sleep,', dog.name)
dog.sleep()
And now, it is possible to archieve this by magically calling bark()
after attaching a person to a dog:
d = Dog('Tobby')
p = Person('Victor')
d.attach(p) # Victor is now observing Tobby
d.bark()
# Woof
# Victor: Sleep, Tobby
# Tobby is now asleep: ZZzzzzZzzZ...
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
File details
Details for the file notifyr-1.1.tar.gz
.
File metadata
- Download URL: notifyr-1.1.tar.gz
- Upload date:
- Size: 2.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.5.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5c189dfdca2976ebfe4f5e80903f8c7d7e7cbb397d0821ef0f550221f2c14e34 |
|
MD5 | 94ebc49e95e3ddce144d66bf26546fb3 |
|
BLAKE2b-256 | 2c2645ec3a162795fddebd4463cd4ec4c92dcf0b1172bf1cc4eeba82e107563b |
File details
Details for the file notifyr-1.1-py3-none-any.whl
.
File metadata
- Download URL: notifyr-1.1-py3-none-any.whl
- Upload date:
- Size: 15.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.5.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4ab83ec7a42e3d7eef567c6a9997da8616cb04fc7c61cb7507fe57b1a338f9ce |
|
MD5 | bf23c46d1b3cde4f78fd3983280e021a |
|
BLAKE2b-256 | c02f4f033d42529f502fbdf49a0d6e90c4e8dac5e708d0efcd49a48ed742579f |