cc-4105: major code reformatting effort

This commit is contained in:
Rudi Grinberg 2012-08-13 17:31:54 -04:00
parent 5d33ca7c6f
commit 3af6036d9e
4 changed files with 44 additions and 59 deletions

View file

@ -181,6 +181,11 @@ class AirtimeMessageReceiver(Loggable):
try: try:
self.logger.info("Attempting to delete '%s'" % self.logger.info("Attempting to delete '%s'" %
msg['filepath']) msg['filepath'])
# We use FileMediator to ignore any paths with
# msg['filepath'] so that we do not send a duplicate delete
# 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']) FileMediator.ignore(msg['filepath'])
os.unlink(msg['filepath']) os.unlink(msg['filepath'])
if not os.path.exists(msg['filepath']): if not os.path.exists(msg['filepath']):
@ -189,11 +194,11 @@ class AirtimeMessageReceiver(Loggable):
except Exception as e: except Exception as e:
self.logger.info("Failed to delete '%s'" % msg['filepath']) self.logger.info("Failed to delete '%s'" % msg['filepath'])
self.logger.info("Error: " % str(e)) self.logger.info("Error: " % str(e))
else: else: # validation for filepath existence failed
self.logger.info("Attempting to delete file '%s' that does not \ self.logger.info("Attempting to delete file '%s' that does not \
exist. Full request coming:" % msg['filepath']) exist. Full request coming:" % msg['filepath'])
self.logger.info(msg) self.logger.info(msg)
else: else: # we did not get the special 'delete' tag. no deleting
self.logger.info("No clippy confirmation, ignoring event. \ self.logger.info("No clippy confirmation, ignoring event. \
Out of curiousity we will print some details.") Out of curiousity we will print some details.")
self.logger.info(msg) self.logger.info(msg)

View file

@ -97,9 +97,9 @@ class BaseEvent(Loggable):
self.logger.info("Morphing %s into %s" % ( str(self), str(evt) ) ) self.logger.info("Morphing %s into %s" % ( str(self), str(evt) ) )
self._raw_event = evt self._raw_event = evt
self.path = evt.path self.path = evt.path
self.add_safe_pack_hook(evt._pack_hook)
self.__class__ = evt.__class__ self.__class__ = evt.__class__
evt._morph_target = True evt._morph_target = True
self.add_safe_pack_hook(evt._pack_hook)
return self return self
class FakePyinotify(object): class FakePyinotify(object):

View file

@ -36,13 +36,12 @@ from media.monitor.log import Loggable, get_logger
# OrganizeListener('watch_signal') <= wrong # OrganizeListener('watch_signal') <= wrong
# OrganizeListener(signal='watch_signal') <= right # OrganizeListener(signal='watch_signal') <= right
# TODO : remove this FileMediator stuff it's not used anywhere and it's too
# complicated
class FileMediator(object): class FileMediator(object):
"""
FileMediator is used an intermediate mechanism that filters out certain
events.
"""
ignored_set = set([]) # for paths only ignored_set = set([]) # for paths only
# TODO : unify ignored and skipped.
# for "special" conditions. could be generalized but too lazy now.
skip_checks = set([])
logger = get_logger() logger = get_logger()
@staticmethod @staticmethod
@ -51,31 +50,10 @@ class FileMediator(object):
def ignore(path): FileMediator.ignored_set.add(path) def ignore(path): FileMediator.ignored_set.add(path)
@staticmethod @staticmethod
def unignore(path): FileMediator.ignored_set.remove(path) def unignore(path): FileMediator.ignored_set.remove(path)
@staticmethod
def skip_next(*what_to_skip,**kwargs):
# Poor man's default arguments
if 'key' not in kwargs: kwargs['key'] = 'maskname'
for skip in what_to_skip:
# standard nasty hack, too long to explain completely in comments
# but the gist of it is:
# 1. python's scoping rules are sometimes strange.
# 2. workaround is very similar to what you do in javascript when
# you write stuff like (function (x,y) { console.log(x+y); })(2,4)
# to be avoid clobbering peoples' namespace.
skip_check = (lambda skip:
lambda v: getattr(v,kwargs['key']) == skip)(skip)
FileMediator.skip_checks.add( skip_check )
def mediate_ignored(fn): def mediate_ignored(fn):
def wrapped(self, event, *args,**kwargs): def wrapped(self, event, *args,**kwargs):
event.pathname = unicode(event.pathname, "utf-8") event.pathname = unicode(event.pathname, "utf-8")
skip_events = [s_check for s_check in FileMediator.skip_checks
if s_check(event)]
for s_check in skip_events:
FileMediator.skip_checks.remove( s_check )
# Only process skip_checks one at a time
FileMediator.logger.info("Skip checked: '%s'" % str(event))
return
if FileMediator.is_ignored(event.pathname): if FileMediator.is_ignored(event.pathname):
FileMediator.logger.info("Ignoring: '%s' (once)" % event.pathname) FileMediator.logger.info("Ignoring: '%s' (once)" % event.pathname)
FileMediator.unignore(event.pathname) FileMediator.unignore(event.pathname)

View file

@ -8,14 +8,16 @@ from media.monitor.log import get_logger, setup_logging
from media.monitor.config import MMConfig from media.monitor.config import MMConfig
from media.monitor.toucher import ToucherThread from media.monitor.toucher import ToucherThread
from media.monitor.syncdb import AirtimeDB from media.monitor.syncdb import AirtimeDB
from media.monitor.exceptions import FailedToObtainLocale, FailedToSetLocale, \ from media.monitor.exceptions import FailedToObtainLocale, \
FailedToSetLocale, \
NoConfigFile NoConfigFile
from media.monitor.airtime import AirtimeNotifier, AirtimeMessageReceiver from media.monitor.airtime import AirtimeNotifier, \
AirtimeMessageReceiver
from media.monitor.watchersyncer import WatchSyncer from media.monitor.watchersyncer import WatchSyncer
from media.monitor.eventdrainer import EventDrainer from media.monitor.eventdrainer import EventDrainer
from media.update.replaygainupdater import ReplayGainUpdater from media.update.replaygainupdater import ReplayGainUpdater
import media.monitor.pure as mmp
import media.monitor.pure as mmp
from api_clients import api_client as apc from api_clients import api_client as apc