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

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
from kombu.messaging import Exchange, Queue, Consumer
from kombu.messaging import Exchange, Queue, Consumer
from kombu.connection import BrokerConnection
import json
import os
@ -7,12 +7,12 @@ import copy
import traceback
from media.monitor.exceptions import BadSongFile
from media.monitor.metadata import Metadata
from media.monitor.log import Loggable
from media.monitor.syncdb import AirtimeDB
from media.monitor.metadata import Metadata
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.monitor.bootstrap import Bootstrapper
from media.monitor.listeners import FileMediator
from api_clients import api_client as apc
@ -39,7 +39,7 @@ class AirtimeNotifier(Loggable):
self.connection = BrokerConnection(cfg["rabbitmq_host"],
cfg["rabbitmq_user"], cfg["rabbitmq_password"],
cfg["rabbitmq_vhost"])
channel = self.connection.channel()
channel = self.connection.channel()
consumer = Consumer(channel, schedule_queue)
consumer.register_callback(self.handle_message)
consumer.consume()
@ -63,12 +63,12 @@ class AirtimeNotifier(Loggable):
class AirtimeMessageReceiver(Loggable):
def __init__(self, cfg, manager):
self.dispatch_table = {
'md_update' : self.md_update,
'new_watch' : self.new_watch,
'md_update' : self.md_update,
'new_watch' : self.new_watch,
'remove_watch' : self.remove_watch,
'rescan_watch' : self.rescan_watch,
'change_stor' : self.change_storage,
'file_delete' : self.file_delete,
'change_stor' : self.change_storage,
'file_delete' : self.file_delete,
}
self.cfg = cfg
self.manager = manager
@ -99,9 +99,9 @@ class AirtimeMessageReceiver(Loggable):
raise ValueError("You must provide either directory_id or \
directory")
sdb = AirtimeDB(apc.AirtimeApiClient.create_right_config())
if directory: directory = os.path.normpath(directory)
if directory_id == None: directory_id = sdb.to_id(directory)
if directory == None: directory = sdb.to_directory(directory_id)
if directory : directory = os.path.normpath(directory)
if directory_id == None : directory_id = sdb.to_id(directory)
if directory == None : directory = sdb.to_directory(directory_id)
try:
bs = Bootstrapper( sdb, self.manager.watch_signal() )
bs.flush_watch( directory=directory, last_ran=self.cfg.last_ran() )
@ -181,6 +181,11 @@ class AirtimeMessageReceiver(Loggable):
try:
self.logger.info("Attempting to delete '%s'" %
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'])
os.unlink(msg['filepath'])
if not os.path.exists(msg['filepath']):
@ -189,11 +194,11 @@ class AirtimeMessageReceiver(Loggable):
except Exception as e:
self.logger.info("Failed to delete '%s'" % msg['filepath'])
self.logger.info("Error: " % str(e))
else:
else: # validation for filepath existence failed
self.logger.info("Attempting to delete file '%s' that does not \
exist. Full request coming:" % msg['filepath'])
self.logger.info(msg)
else:
else: # we did not get the special 'delete' tag. no deleting
self.logger.info("No clippy confirmation, ignoring event. \
Out of curiousity we will print some details.")
self.logger.info(msg)

View File

@ -95,11 +95,11 @@ class BaseEvent(Loggable):
# nothing to see here, please move along
def morph_into(self, evt):
self.logger.info("Morphing %s into %s" % ( str(self), str(evt) ) )
self._raw_event = evt
self.path = evt.path
self.add_safe_pack_hook(evt._pack_hook)
self.__class__ = evt.__class__
self._raw_event = evt
self.path = evt.path
self.__class__ = evt.__class__
evt._morph_target = True
self.add_safe_pack_hook(evt._pack_hook)
return self
class FakePyinotify(object):
@ -186,7 +186,7 @@ class DeleteDirWatch(BaseEvent):
super(DeleteDirWatch, self).__init__(*args, **kwargs)
def pack(self):
req_dict = {}
req_dict['mode'] = u'delete_dir'
req_dict['mode'] = u'delete_dir'
req_dict['MDATA_KEY_FILEPATH'] = unicode( self.path + "/" )
return [req_dict]

View File

@ -36,13 +36,12 @@ from media.monitor.log import Loggable, get_logger
# OrganizeListener('watch_signal') <= wrong
# OrganizeListener(signal='watch_signal') <= right
# TODO : remove this FileMediator stuff it's not used anywhere and it's too
# complicated
class FileMediator(object):
"""
FileMediator is used an intermediate mechanism that filters out certain
events.
"""
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()
@staticmethod
@ -51,31 +50,10 @@ class FileMediator(object):
def ignore(path): FileMediator.ignored_set.add(path)
@staticmethod
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 wrapped(self, event, *args,**kwargs):
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):
FileMediator.logger.info("Ignoring: '%s' (once)" % event.pathname)
FileMediator.unignore(event.pathname)

View File

@ -2,20 +2,22 @@
import sys
import os
from media.monitor.manager import Manager
from media.monitor.bootstrap import Bootstrapper
from media.monitor.log import get_logger, setup_logging
from media.monitor.config import MMConfig
from media.monitor.toucher import ToucherThread
from media.monitor.syncdb import AirtimeDB
from media.monitor.exceptions import FailedToObtainLocale, FailedToSetLocale, \
NoConfigFile
from media.monitor.airtime import AirtimeNotifier, AirtimeMessageReceiver
from media.monitor.watchersyncer import WatchSyncer
from media.monitor.eventdrainer import EventDrainer
from media.monitor.manager import Manager
from media.monitor.bootstrap import Bootstrapper
from media.monitor.log import get_logger, setup_logging
from media.monitor.config import MMConfig
from media.monitor.toucher import ToucherThread
from media.monitor.syncdb import AirtimeDB
from media.monitor.exceptions import FailedToObtainLocale, \
FailedToSetLocale, \
NoConfigFile
from media.monitor.airtime import AirtimeNotifier, \
AirtimeMessageReceiver
from media.monitor.watchersyncer import WatchSyncer
from media.monitor.eventdrainer import EventDrainer
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