from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler from collections import deque from os.path import dirname class CallbackEventHandler(FileSystemEventHandler): def __init__(self, *callbacks): super().__init__() self.callbacks = callbacks def on_modified(self, event): for callback in self.callbacks: callback() class HistoryMonitor: def __init__(self, histfile): self.histfile = histfile self._history = deque() self.observer = Observer() self.observer.schedule(CallbackEventHandler(self._fetch_history), dirname(self.histfile)) @property def history(self): return self._history def _fetch_history(self): with open(self.histfile, 'r') as ifile: self._history = deque(ifile.readlines()) def watch(self): self.observer.start() def stop(self): self.observer.stop() self.observer.join()