Observers (objetto.observers)
Observer mixin class.
Action Observer Class
- class objetto.observers.ActionObserver
Mixin/abstract class for observing an object for actions.
>>> from objetto import Application, Object, attribute >>> from objetto.observers import ActionObserver >>> class Person(Object): ... name = attribute(str, default="Albert") ... >>> class PersonObserver(ActionObserver): ... ... def __observe__(self, action, phase): ... print((action.change.name, phase.value)) ... >>> app = Application() >>> person = Person(app) >>> observer = PersonObserver() >>> token = observer.start_observing(person) >>> person.name = "Einstein" ('Update Attributes', 'PRE') ('Update Attributes', 'POST')
- abstract __observe__(action, phase)
Observe an action (and its execution phase) from an object.
- Parameters
action (objetto.objects.Action) – Action.
phase (
objetto.constants.PREorobjetto.constants.POST) – Phase.
- Raises
NotImplementedError – Abstract method not implemented.
- start_observing(obj)
Start observing an object for actions.
- Parameters
obj (objetto.objects.Object) – Object.
- Returns
Observer token.
- Return type
- Raises
TypeError – Invalid ‘obj’ parameter type.
RuntimeError – Can’t start observing while object is initializing.
- stop_observing(obj)
Stop observing an object for actions.
- Parameters
obj (objetto.objects.Object) – Object.
- Raises
TypeError – Invalid ‘obj’ parameter type.
Action Observer Token Class
- class objetto.observers.ActionObserverToken(subject, observer)
Allows control over observers’ order/priority.
- Inherits from:
Note
This class can’t be instantiated directly. A token should be retrieved when an action observer starts observing an object.
>>> from objetto import Application, Object, attribute >>> from objetto.constants import POST >>> from objetto.observers import ActionObserver >>> observed_names = [] ... >>> class Person(Object): ... name = attribute(str, default="Albert") ... >>> class PersonObserver(ActionObserver): ... def __init__(self, this, dependency=None): ... self.this = this ... self.dependency = dependency ... ... def __observe__(self, action, phase): ... if self.dependency: ... self.dependency.wait() ... if phase is POST: ... observed_names.append( ... "{} {}".format(self.this, action.change.new_values["name"]) ... ) ... >>> app = Application() >>> person = Person(app) >>> observer_a = PersonObserver("A") >>> token_a = observer_a.start_observing(person) >>> observer_b = PersonObserver("B", dependency=token_a) >>> token_b = observer_b.start_observing(person) >>> person.name = "Einstein" >>> observed_names # note how A will always observe the change before B does ['A Einstein', 'B Einstein']
- wait()
Wait for the associated observer to finish observing before continuing.
- property observer
Action observer.
- Return type
objetto.observers.ActionObserver or None
Action Observer Exception Data
- class objetto.observers.ActionObserverExceptionData(**initial)
Describes an exception raised by an observer while observing an action.
- Inherits from:
- observer : Data Attribute
Action observer.
- action : Data Attribute
Action.
- phase : Data Attribute
Phase.
- exception_type : Data Attribute
Exception type.
- Type
type[BaseException] or None
- exception : Data Attribute
Exception.
- Type
BaseException or None
- traceback : Data Attribute
Traceback.
- Type
types.TracebackType or None