Skip to content
Snippets Groups Projects
dmFileSystemEventHandler.py 3.6 KiB
Newer Older
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

    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)
        self.logger.debug('File system directory modified event: %s' % (event.__dict__))
        self.processEvent(event)

    def processEvent(self, event):
            self.logger.debug('Processing directory event: %s , src path: %s ,  latest files: %s' % (event.__dict__, event.src_path, files))
                files = glob.glob(os.path.join(event.src_path,'*.*'))
                if len(files) > 0:
                    filePath = max(files, key=os.path.getctime)
                    self.logger.debug('Latest file: %s' % (filePath))
                    self.fileSystemObserver.fileUpdated(filePath, self.dataDirectory, self.experiment)
            except Exception, ex:
                self.logger.error('Exception occured when searching for file in directory %s: %s' % (event.__dict__, ex))
            filePath = event.src_path
            self.logger.debug('Processing file event: %s' % (event.__dict__))
            self.fileSystemObserver.fileUpdated(filePath, self.dataDirectory, self.experiment)
        
####################################################################
# 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()