Skip to main content

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.

Class decorators:

  • @observed
    • Adds .observers list attribute.
    • Adds .attach(obj) method that appends obj to the observers list.
    • Adds .notify() method that notifies the observers everytime the targeted functions are called
  • @observer('function_name')
    • Adds update() method that executes class's function_name() passing, as arguments, self and everything that the targeted function received (including the self argument).

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


Download files

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

Source Distribution

notifyr-1.1.tar.gz (2.5 kB view details)

Uploaded Source

Built Distribution

notifyr-1.1-py3-none-any.whl (15.1 kB view details)

Uploaded Python 3

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

Hashes for notifyr-1.1.tar.gz
Algorithm Hash digest
SHA256 5c189dfdca2976ebfe4f5e80903f8c7d7e7cbb397d0821ef0f550221f2c14e34
MD5 94ebc49e95e3ddce144d66bf26546fb3
BLAKE2b-256 2c2645ec3a162795fddebd4463cd4ec4c92dcf0b1172bf1cc4eeba82e107563b

See more details on using hashes here.

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

Hashes for notifyr-1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4ab83ec7a42e3d7eef567c6a9997da8616cb04fc7c61cb7507fe57b1a338f9ce
MD5 bf23c46d1b3cde4f78fd3983280e021a
BLAKE2b-256 c02f4f033d42529f502fbdf49a0d6e90c4e8dac5e708d0efcd49a48ed742579f

See more details on using hashes here.

Supported by

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