2018-03-03 16:15:21 +00:00
|
|
|
from watchdog.observers import Observer
|
|
|
|
from watchdog.events import FileSystemEventHandler
|
|
|
|
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
|
2018-03-03 21:44:05 +00:00
|
|
|
self._history = []
|
2018-03-03 16:15:21 +00:00
|
|
|
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:
|
2018-03-03 21:44:05 +00:00
|
|
|
self._history = ifile.readlines()
|
2018-03-03 16:15:21 +00:00
|
|
|
|
|
|
|
def watch(self):
|
|
|
|
self.observer.start()
|
|
|
|
|
|
|
|
def stop(self):
|
|
|
|
self.observer.stop()
|
|
|
|
self.observer.join()
|