Skip to content
Snippets Groups Projects
Forked from DM / dm-docs
261 commits behind, 392 commits ahead of the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
dmFileSystemEventHandler.py 3.14 KiB
#!/usr/bin/env python

import os
import glob

from watchdog.events import FileSystemEventHandler

from dm.common.utility.loggingManager import LoggingManager

class DmFileSystemEventHandler(FileSystemEventHandler):

    def __init__(self, fileSystemObserver, dataDirectory, experiment):
        FileSystemEventHandler.__init__(self)
        self.logger = LoggingManager.getInstance().getLogger(self.__class__.__name__)
        self.fileSystemObserver = fileSystemObserver
        self.dataDirectory = dataDirectory
        self.experiment = experiment

    def dispatch(self, event):
        FileSystemEventHandler.dispatch(self, event)

    def on_any_event(self, event):
        FileSystemEventHandler.on_any_event(self, event)
        self.logger.debug('File system any_event event: %s' % (event.__dict__))

    def on_created(self, event):
        FileSystemEventHandler.on_created(self, event)
        self.logger.debug('File system created event: %s' % (event.__dict__))

    def on_moved(self, event):
        FileSystemEventHandler.on_moved(self, event)
        self.logger.debug('File system moved event: %s' % (event.__dict__))

    def on_deleted(self, event):
        FileSystemEventHandler.on_deleted(self, event)
        self.logger.debug('File system deleted event: %s' % (event.__dict__))

    def on_modified(self, event):
        FileSystemEventHandler.on_modified(self, event)
        if event.is_directory:
	    filePath = max(glob.glob(event.src_path+'*.*'), key=os.path.getctime)
            self.logger.debug('File system directory modified event: %s , latest file: %s' % (event.__dict__, filePath))
            self.fileSystemObserver.fileUpdated(filePath, self.dataDirectory, self.experiment)
        else:
	    filePath = event.src_path
            self.logger.debug('File system modified event: %s' % (event.__dict__))
            self.fileSystemObserver.fileUpdated(filePath, self.dataDirectory, self.experiment)
        
    def on_moved(self, event):
        FileSystemEventHandler.on_moved(self, event)

####################################################################
# Testing

if __name__ == '__main__':
    import sys
    import time
    import logging
    from watchdog.observers import Observer
    from watchdog.observers.polling import PollingObserver
    from watchdog.observers.api import ObservedWatch
    from watchdog.observers.api import EventQueue
    from watchdog.observers.api import EventEmitter
    from watchdog.events import LoggingEventHandler
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')
    path = sys.argv[1] if len(sys.argv) > 1 else '.'
    eventHandler = DmFileSystemEventHandler()

    observer = PollingObserver()
    observedWatch = observer.schedule(eventHandler, path, recursive=True)
    print 'OBSERVED WATCH: ', observedWatch

    #observer.add_handler_for_watch(eventHandler2, observedWatch)
    #observer._clear_emitters()
    print observer.emitters

    observer.start()
    try:
        while True:
            time.sleep(1)
            print time.time()
    except KeyboardInterrupt:
        observer.stop()
    observer.join()