mirror of
https://github.com/avatao-content/baseimage-tutorial-framework
synced 2025-06-28 20:35:12 +00:00
Refactor callback subscription stuff to a mixin
This commit is contained in:
@ -2,6 +2,8 @@ from watchdog.observers import Observer
|
||||
from watchdog.events import PatternMatchingEventHandler
|
||||
from os.path import dirname
|
||||
|
||||
from tfw.components.mixins.callback_mixin import CallbackMixin
|
||||
|
||||
|
||||
class CallbackEventHandler(PatternMatchingEventHandler):
|
||||
def __init__(self, files, *callbacks):
|
||||
@ -13,12 +15,12 @@ class CallbackEventHandler(PatternMatchingEventHandler):
|
||||
callback()
|
||||
|
||||
|
||||
class HistoryMonitor:
|
||||
class HistoryMonitor(CallbackMixin):
|
||||
def __init__(self, histfile):
|
||||
CallbackMixin.__init__(self)
|
||||
self.histfile = histfile
|
||||
self._history = []
|
||||
self._last_length = len(self._history)
|
||||
self._callbacks = []
|
||||
self.observer = Observer()
|
||||
self.observer.schedule(CallbackEventHandler([self.histfile],
|
||||
self._fetch_history,
|
||||
@ -29,10 +31,6 @@ class HistoryMonitor:
|
||||
def history(self):
|
||||
return self._history
|
||||
|
||||
@property
|
||||
def callbacks(self):
|
||||
return self._callbacks
|
||||
|
||||
def _fetch_history(self):
|
||||
self._last_length = len(self._history)
|
||||
with open(self.histfile, 'r') as ifile:
|
||||
@ -40,8 +38,7 @@ class HistoryMonitor:
|
||||
|
||||
def _invoke_callbacks(self):
|
||||
if self._last_length < len(self._history):
|
||||
for callback in self.callbacks:
|
||||
callback(self.history)
|
||||
self._execute_callbacks(self.history)
|
||||
|
||||
def watch(self):
|
||||
self.observer.start()
|
||||
|
17
lib/tfw/components/mixins/callback_mixin.py
Normal file
17
lib/tfw/components/mixins/callback_mixin.py
Normal file
@ -0,0 +1,17 @@
|
||||
from functools import partial
|
||||
|
||||
|
||||
class CallbackMixin:
|
||||
def __init__(self):
|
||||
self._callbacks = []
|
||||
|
||||
def subscribe_callback(self, callback, *args, **kwargs):
|
||||
fun = partial(callback, *args, **kwargs)
|
||||
self._callbacks.append(fun)
|
||||
|
||||
def unsubscribe_callback(self, callback):
|
||||
self._callbacks.remove(callback)
|
||||
|
||||
def _execute_callbacks(self, *args, **kwargs):
|
||||
for callback in self._callbacks:
|
||||
callback(*args, **kwargs)
|
Reference in New Issue
Block a user