diff --git a/lib/tfw/components/directory_monitor.py b/lib/tfw/components/directory_monitor.py index d1fc797..d690c47 100644 --- a/lib/tfw/components/directory_monitor.py +++ b/lib/tfw/components/directory_monitor.py @@ -1,10 +1,8 @@ from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler -from os.path import exists, isdir from tfw.networking.event_handlers.server_connector import ServerUplinkConnector from tfw.components.decorators import RateLimiter -from tfw.event_handler_base import TriggerlessEventHandler from tfw.config.logs import logging log = logging.getLogger(__name__) @@ -67,65 +65,3 @@ class DirectoryMonitor: self.directorymonitor.pause() def __exit__(self, exc_type, exc_val, exc_tb): self.directorymonitor.resume() - - -class DirectoryMonitoringEventHandler(TriggerlessEventHandler): - def __init__(self, key, directory): - super().__init__(key) - self._directory = directory - self._monitor = None - self.reload_monitor() - self.commands = {'pause': self.pause, - 'resume': self.resume, - 'ignore': self.ignore, - 'selectdir': self.selectdir} - - @property - def directory(self): - return self._directory - - @directory.setter - def directory(self, directory): - if not exists(directory) or not isdir(directory): raise EnvironmentError('No such directory!') - self._directory = directory - - @property - def monitor(self): - return self._monitor - - def reload_monitor(self): - if self._monitor: - try: self._monitor.stop() - except KeyError: logging.debug('Working directory was removed – ignoring...') - self._monitor = DirectoryMonitor(self._directory) - self._monitor.watch() # This runs on a separate thread - - def handle_event(self, key, message): - try: - message['data'] = self.commands[message['data']['command']](message['data']) - return message - except KeyError: - log.error('IGNORING MESSAGE: Invalid message received: {}'.format(message)) - - def pause(self, data): - self.monitor.pause() - return data - - def resume(self, data): - self.monitor.resume() - return data - - def ignore(self, data): - self.monitor.ignore += data['ignore'] - return data - - def selectdir(self, data): - try: - self.directory = data['directory'] - self.reload_monitor() - return data - except EnvironmentError: - log.error('Failed to switch directory!') - - def cleanup(self): - self.monitor.stop() diff --git a/lib/tfw/components/directory_monitoring_event_handler.py b/lib/tfw/components/directory_monitoring_event_handler.py new file mode 100644 index 0000000..afceaaf --- /dev/null +++ b/lib/tfw/components/directory_monitoring_event_handler.py @@ -0,0 +1,68 @@ +from os.path import isdir, exists + +from tfw.components.directory_monitor import DirectoryMonitor +from tfw.event_handler_base import TriggerlessEventHandler +from tfw.config.logs import logging +log = logging.getLogger(__name__) + + +class DirectoryMonitoringEventHandler(TriggerlessEventHandler): + def __init__(self, key, directory): + super().__init__(key) + self._directory = directory + self._monitor = None + self.reload_monitor() + self.commands = {'pause': self.pause, + 'resume': self.resume, + 'ignore': self.ignore, + 'selectdir': self.selectdir} + + @property + def directory(self): + return self._directory + + @directory.setter + def directory(self, directory): + if not exists(directory) or not isdir(directory): raise EnvironmentError('No such directory!') + self._directory = directory + + @property + def monitor(self): + return self._monitor + + def reload_monitor(self): + if self._monitor: + try: self._monitor.stop() + except KeyError: logging.debug('Working directory was removed – ignoring...') + self._monitor = DirectoryMonitor(self._directory) + self._monitor.watch() # This runs on a separate thread + + def handle_event(self, key, message): + try: + message['data'] = self.commands[message['data']['command']](message['data']) + return message + except KeyError: + log.error('IGNORING MESSAGE: Invalid message received: {}'.format(message)) + + def pause(self, data): + self.monitor.pause() + return data + + def resume(self, data): + self.monitor.resume() + return data + + def ignore(self, data): + self.monitor.ignore += data['ignore'] + return data + + def selectdir(self, data): + try: + self.directory = data['directory'] + self.reload_monitor() + return data + except EnvironmentError: + log.error('Failed to switch directory!') + + def cleanup(self): + self.monitor.stop()