4 from watchdog.events import DirDeletedEvent, FileDeletedEvent, FileSystemEventHandler
 
   5 from watchdog.observers import Observer
 
   7 class DirTrigger(FileSystemEventHandler):
 
   9     def __init__(self, dir_path, cool_time, max_time):
 
  10         self._got_event = False
 
  11         self._last_event_time = 0.0
 
  12         self._last_reset_time = 0.0
 
  13         self._cool_time = cool_time
 
  14         self._max_time = max_time
 
  15         self._lock = threading.Lock()
 
  16         self._observer = Observer()
 
  17         self._observer.schedule(self, path=dir_path, recursive=True)
 
  21             self._observer.start()
 
  22         except Exception as e:
 
  23             logging.warning("Error starting file observer for %s: %s", dir_path, str(e))
 
  28     def is_triggering(self):
 
  32             return ( self._got_event and
 
  33                      (now - self._last_event_time > self._cool_time) ) or \
 
  34                      now - self._last_reset_time > self._max_time
 
  41             self._got_event = False
 
  42             self._last_reset_time = time.time()
 
  46     def on_any_event(self, event):
 
  47         if event.event_type == FileDeletedEvent or event.event_type == DirDeletedEvent:
 
  52             self._got_event = True
 
  53             self._last_event_time = time.time()