From 586c435cc2ecb625d4a73b17d69958688a06109b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krist=C3=B3f=20T=C3=B3th?= Date: Sat, 14 Apr 2018 20:36:43 +0200 Subject: [PATCH] Refactor watchdog Observer handling to a mixin --- lib/tfw/components/directory_monitor.py | 13 +++---------- lib/tfw/components/history_monitor.py | 14 +++----------- lib/tfw/components/mixins/__init__.py | 1 + lib/tfw/components/mixins/observer_mixin.py | 16 ++++++++++++++++ 4 files changed, 23 insertions(+), 21 deletions(-) create mode 100644 lib/tfw/components/mixins/observer_mixin.py diff --git a/lib/tfw/components/directory_monitor.py b/lib/tfw/components/directory_monitor.py index 630ee07..cad2860 100644 --- a/lib/tfw/components/directory_monitor.py +++ b/lib/tfw/components/directory_monitor.py @@ -3,31 +3,24 @@ from functools import wraps -from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler as FileSystemWatchdogEventHandler from tfw.networking.event_handlers import ServerUplinkConnector from tfw.components.decorators import RateLimiter +from tfw.components.mixins import ObserverMixin from tfw.config.logs import logging LOG = logging.getLogger(__name__) -class DirectoryMonitor: +class DirectoryMonitor(ObserverMixin): def __init__(self, directory): - self.observer = Observer() + ObserverMixin.__init__(self) self.eventhandler = WebideReloadWatchdogEventHandler() self.observer.schedule(self.eventhandler, directory, recursive=True) self.pause, self.resume = self.eventhandler.pause, self.eventhandler.resume - def watch(self): - self.observer.start() - - def stop(self): - self.observer.stop() - self.observer.join() - @property def ignore(self): return self.eventhandler.ignore diff --git a/lib/tfw/components/history_monitor.py b/lib/tfw/components/history_monitor.py index 1665ad9..2540c3f 100644 --- a/lib/tfw/components/history_monitor.py +++ b/lib/tfw/components/history_monitor.py @@ -6,10 +6,9 @@ from re import findall from re import compile as compileregex from abc import ABC, abstractmethod -from watchdog.observers import Observer from watchdog.events import PatternMatchingEventHandler -from tfw.components.mixins import CallbackMixin +from tfw.components.mixins import CallbackMixin, ObserverMixin from tfw.components.decorators import RateLimiter @@ -24,13 +23,13 @@ class CallbackEventHandler(PatternMatchingEventHandler, ABC): callback() -class HistoryMonitor(CallbackMixin, ABC): +class HistoryMonitor(CallbackMixin, ObserverMixin, ABC): def __init__(self, histfile): CallbackMixin.__init__(self) + ObserverMixin.__init__(self) self.histfile = histfile self._history = [] self._last_length = len(self._history) - self.observer = Observer() self.observer.schedule(CallbackEventHandler([self.histfile], self._fetch_history, self._invoke_callbacks), @@ -60,13 +59,6 @@ class HistoryMonitor(CallbackMixin, ABC): if self._last_length < len(self._history): self._execute_callbacks(self.history) - def watch(self): - self.observer.start() - - def stop(self): - self.observer.stop() - self.observer.join() - class BashMonitor(HistoryMonitor): @property diff --git a/lib/tfw/components/mixins/__init__.py b/lib/tfw/components/mixins/__init__.py index 8003c33..0cf040e 100644 --- a/lib/tfw/components/mixins/__init__.py +++ b/lib/tfw/components/mixins/__init__.py @@ -3,3 +3,4 @@ from .supervisor_mixin import SupervisorMixin from .callback_mixin import CallbackMixin +from .observer_mixin import ObserverMixin diff --git a/lib/tfw/components/mixins/observer_mixin.py b/lib/tfw/components/mixins/observer_mixin.py new file mode 100644 index 0000000..4101d96 --- /dev/null +++ b/lib/tfw/components/mixins/observer_mixin.py @@ -0,0 +1,16 @@ +# Copyright (C) 2018 Avatao.com Innovative Learning Kft. +# All Rights Reserved. See LICENSE file for details. + +from watchdog.observers import Observer + + +class ObserverMixin: + def __init__(self): + self.observer = Observer() + + def watch(self): + self.observer.start() + + def stop(self): + self.observer.stop() + self.observer.join()