Refactor callback subscription stuff to a mixin

This commit is contained in:
Kristóf Tóth
2018-03-07 10:12:58 +01:00
parent 6db4c80671
commit 6a6236e704
5 changed files with 29 additions and 21 deletions

View File

@ -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()

View 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)