+import logging
import threading
import time
-from watchdog.events import FileSystemEventHandler
+from watchdog.events import DirDeletedEvent, FileDeletedEvent, FileSystemEventHandler
from watchdog.observers import Observer
class DirTrigger(FileSystemEventHandler):
- COOL_TIME = 10
- MAX_TIME = 86400
- def __init__(self, dir_path):
+ def __init__(self, dir_path, cool_time, max_time):
+ self._dir_path = dir_path
+ self._cool_time = cool_time
+ self._max_time = max_time
self._got_event = False
self._last_event_time = 0.0
self._last_reset_time = 0.0
self._observer.schedule(self, path=dir_path, recursive=True)
def start(self):
- self._observer.start()
+ try:
+ self._observer.start()
+ except Exception as e:
+ logging.warning("Error starting file observer for %s: %s", self._dir_path, str(e))
def stop(self):
self._observer.stop()
def is_triggering(self):
self._lock.acquire()
try:
+ now = time.time()
return ( self._got_event and
- (time.time() - self._last_event_time > DirTrigger.COOL_TIME) ) or \
- time.time() - self._last_reset_time > DirTrigger.MAX_TIME
+ (now - self._last_event_time > self._cool_time) ) or \
+ now - self._last_reset_time > self._max_time
finally:
self._lock.release()
def reset(self):
- self._got_event = False
- self._last_reset_time = time.time()
+ self._lock.acquire()
+ try:
+ self._got_event = False
+ self._last_reset_time = time.time()
+ finally:
+ self._lock.release()
def on_any_event(self, event):
+ if event.event_type == FileDeletedEvent or event.event_type == DirDeletedEvent:
+ return
+
self._lock.acquire()
try:
self._got_event = True