From 26716825a9b604d5c927a26a1d01d86a36ef5ac1 Mon Sep 17 00:00:00 2001 From: Dirk Alders Date: Sat, 19 Apr 2025 11:34:42 +0200 Subject: [PATCH] Initial FileObserver class implemented --- __init__.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 1 + 2 files changed, 46 insertions(+) create mode 100644 requirements.txt diff --git a/__init__.py b/__init__.py index c0d93f4..f9dfae2 100644 --- a/__init__.py +++ b/__init__.py @@ -40,6 +40,8 @@ import os from functools import partial import sys import time +from watchdog.observers import Observer +from watchdog.events import FileSystemEventHandler try: @@ -126,6 +128,49 @@ def filelist(path='.', expression='*', rekursive=True): return li +class FileObserver(FileSystemEventHandler): + OBSERVE_MODIFIED = 1 + OBSERVE_CREATED = 2 + OBSERVE_DELETED = 4 + OBSERVE_ALL = OBSERVE_MODIFIED | OBSERVE_CREATED | OBSERVE_DELETED + + def __init__(self): + super().__init__() + # + self.__callbacks__ = {} + # + self.observer = Observer() + self.observer.start() + + def observe(self, filepath, when, callback, *args, **kwargs): + if filepath not in self.__callbacks__: + self.__callbacks__[filepath] = [] + self.__callbacks__[filepath].append( (when, callback, args, kwargs) ) + self.observer.schedule(self, path=os.path.dirname(filepath), recursive=True) + + def __callback_logic__(self, etype, event): + if event.src_path in self.__callbacks__: + for when, cb, args, kwargs in self.__callbacks__[event.src_path]: + if when & etype != 0: + cb(event, *args, **kwargs) + # TODO: LOG + + def on_modified(self, event): + self.__callback_logic__(self.OBSERVE_MODIFIED, event) + + def on_created(self, event): + self.__callback_logic__(self.OBSERVE_CREATED, event) + + def on_deleted(self, event): + self.__callback_logic__(self.OBSERVE_DELETED, event) + + def stop(self): + self.observer.stop() + + def join(self): + self.observer.join() + + def is_writeable(path): """ Method to get the Information, if a file or folder is writable. diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e59495e --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +watchdog