Metadata-Version: 2.1
Name: pypeeper
Version: 0.2
Summary: A minimalist, single-threaded and broadcast-routed observable pattern.
Home-page: https://github.com/rolandshoemaker/py-peeper
Author: Jonatan Rivilla Alamo
Author-email: jonrivala@gmail.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Description-Content-Type: text/markdown

# Py-Peeper
A very simple, minimalist, single-threaded and broadcast-routed approach to the observable pattern in Python.

## Installation
```pip install pypeeper```


### Usage
#### Implementing an Observable class
Every class can be converted to observable just by subclassing it from
Observer. If class attribute "pattern" is overwritten with a valid regex
expression, only matching attributes defined within the class constructor will
be observed. Otherwise, all attributes will be observed.
```
from pypeeper import Observable, Observer

class AnyClass(Observable):

    def __init__(self):
        self.attribute_a = False
        self.whatever_attr = 0

    def set_attribute(self, value):
        self.attribute_a = value
```
#### Implementing an Observer class
Any class can be Observer of all Observable classes defined as shown above. To
define how the class should react on Observable's changes, just override
"notify" method from Observer class.
```
class ObserverClass(Observer):

    def notify(self, class_name, object_id, attribute_name, old, new):
        print(class_name, object_id, attribute_name, old, new)

```
#### Instantiate and play
```
my_observable = ObservableClass()
my_observer = ObserverClass()

my_observable.set_attribute(True)
my_observable.attribute_a = 10
my_observable.whatever_attr = None
```
#### Console output
```
>>> ObservableClass 2448221506696 attribute_a False True
>>> ObservableClass 2448221506696 attribute_a True 10
>>> ObservableClass 2448221506696 whatever_attr 0 None
```

