From ebca3fa9f5f9d3ddb3b3c582da0199865ff75d56 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Mon, 19 Nov 2012 20:13:00 -0500 Subject: [PATCH] refactored file mediator to play nice with saas --- .../media-monitor2/media/monitor/airtime.py | 5 ++- .../media-monitor2/media/monitor/listeners.py | 33 ++++++++----------- .../media/saas/airtimeinstance.py | 5 +++ 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/python_apps/media-monitor2/media/monitor/airtime.py b/python_apps/media-monitor2/media/monitor/airtime.py index 11436009a..fa23d2fbd 100644 --- a/python_apps/media-monitor2/media/monitor/airtime.py +++ b/python_apps/media-monitor2/media/monitor/airtime.py @@ -13,9 +13,8 @@ from media.monitor.log import Loggable from media.monitor.syncdb import AirtimeDB from media.monitor.exceptions import DirectoryIsNotListed from media.monitor.bootstrap import Bootstrapper -from media.monitor.listeners import FileMediator -from media.saas.thread import apc +from media.saas.thread import apc, user class AirtimeNotifier(Loggable): """ @@ -192,7 +191,7 @@ class AirtimeMessageReceiver(Loggable): # request that we'd normally get form pyinotify. But right # now event contractor would take care of this sort of # thing anyway so this might not be necessary after all - FileMediator.ignore(msg['filepath']) + user().file_mediator.ignore(msg['filepath']) os.unlink(msg['filepath']) # Verify deletion: if not os.path.exists(msg['filepath']): diff --git a/python_apps/media-monitor2/media/monitor/listeners.py b/python_apps/media-monitor2/media/monitor/listeners.py index 081d0c4a4..c268319e8 100644 --- a/python_apps/media-monitor2/media/monitor/listeners.py +++ b/python_apps/media-monitor2/media/monitor/listeners.py @@ -6,38 +6,31 @@ from functools import wraps import media.monitor.pure as mmp from media.monitor.pure import IncludeOnly from media.monitor.events import OrganizeFile, NewFile, MoveFile, DeleteFile, \ - DeleteDir, EventRegistry, MoveDir,\ + DeleteDir, MoveDir,\ DeleteDirWatch -from media.monitor.log import Loggable, get_logger -from media.saas.thread import getsig +from media.monitor.log import Loggable +from media.saas.thread import getsig, user # Note: Because of the way classes that inherit from pyinotify.ProcessEvent # interact with constructors. you should only instantiate objects from them # using keyword arguments. For example: # OrganizeListener('watch_signal') <= wrong # OrganizeListener(signal='watch_signal') <= right -class FileMediator(object): - """ - FileMediator is used an intermediate mechanism that filters out certain - events. - """ - ignored_set = set([]) # for paths only - logger = get_logger() - - @staticmethod - def is_ignored(path): return path in FileMediator.ignored_set - @staticmethod - def ignore(path): FileMediator.ignored_set.add(path) - @staticmethod - def unignore(path): FileMediator.ignored_set.remove(path) +class FileMediator(Loggable): + """ FileMediator is used an intermediate mechanism that filters out + certain events. """ + def __init__(self) : self.ignored_set = set([]) # for paths only + def is_ignored(self,path) : return path in self.ignored_set + def ignore(self, path) : self.ignored_set.add(path) + def unignore(self, path) : self.ignored_set.remove(path) def mediate_ignored(fn): @wraps(fn) def wrapped(self, event, *args,**kwargs): event.pathname = unicode(event.pathname, "utf-8") - if FileMediator.is_ignored(event.pathname): - FileMediator.logger.info("Ignoring: '%s' (once)" % event.pathname) - FileMediator.unignore(event.pathname) + if user().file_mediator.is_ignored(event.pathname): + user().file_mediator.logger.info("Ignoring: '%s' (once)" % event.pathname) + user().file_mediator.unignore(event.pathname) else: return fn(self, event, *args, **kwargs) return wrapped diff --git a/python_apps/media-monitor2/media/saas/airtimeinstance.py b/python_apps/media-monitor2/media/saas/airtimeinstance.py index eed54101a..6293fe61d 100644 --- a/python_apps/media-monitor2/media/saas/airtimeinstance.py +++ b/python_apps/media-monitor2/media/saas/airtimeinstance.py @@ -5,6 +5,7 @@ from media.monitor.exceptions import NoConfigFile from media.monitor.pure import LazyProperty from media.monitor.config import MMConfig from media.monitor.owners import Owner +from media.monitor.listeners import FileMediator from api_clients.api_client import AirtimeApiClient # poor man's phantom types... @@ -51,3 +52,7 @@ class AirtimeInstance(object): @LazyProperty def owner(self): return Owner() + @LazyProperty + def file_mediator(self): + return FileMediator() +