cc-4105: major code reformatting effort
This commit is contained in:
parent
5d33ca7c6f
commit
3af6036d9e
|
@ -1,5 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from kombu.messaging import Exchange, Queue, Consumer
|
from kombu.messaging import Exchange, Queue, Consumer
|
||||||
from kombu.connection import BrokerConnection
|
from kombu.connection import BrokerConnection
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
@ -7,12 +7,12 @@ import copy
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
from media.monitor.exceptions import BadSongFile
|
from media.monitor.exceptions import BadSongFile
|
||||||
from media.monitor.metadata import Metadata
|
from media.monitor.metadata import Metadata
|
||||||
from media.monitor.log import Loggable
|
from media.monitor.log import Loggable
|
||||||
from media.monitor.syncdb import AirtimeDB
|
from media.monitor.syncdb import AirtimeDB
|
||||||
from media.monitor.exceptions import DirectoryIsNotListed
|
from media.monitor.exceptions import DirectoryIsNotListed
|
||||||
from media.monitor.bootstrap import Bootstrapper
|
from media.monitor.bootstrap import Bootstrapper
|
||||||
from media.monitor.listeners import FileMediator
|
from media.monitor.listeners import FileMediator
|
||||||
|
|
||||||
from api_clients import api_client as apc
|
from api_clients import api_client as apc
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ class AirtimeNotifier(Loggable):
|
||||||
self.connection = BrokerConnection(cfg["rabbitmq_host"],
|
self.connection = BrokerConnection(cfg["rabbitmq_host"],
|
||||||
cfg["rabbitmq_user"], cfg["rabbitmq_password"],
|
cfg["rabbitmq_user"], cfg["rabbitmq_password"],
|
||||||
cfg["rabbitmq_vhost"])
|
cfg["rabbitmq_vhost"])
|
||||||
channel = self.connection.channel()
|
channel = self.connection.channel()
|
||||||
consumer = Consumer(channel, schedule_queue)
|
consumer = Consumer(channel, schedule_queue)
|
||||||
consumer.register_callback(self.handle_message)
|
consumer.register_callback(self.handle_message)
|
||||||
consumer.consume()
|
consumer.consume()
|
||||||
|
@ -63,12 +63,12 @@ class AirtimeNotifier(Loggable):
|
||||||
class AirtimeMessageReceiver(Loggable):
|
class AirtimeMessageReceiver(Loggable):
|
||||||
def __init__(self, cfg, manager):
|
def __init__(self, cfg, manager):
|
||||||
self.dispatch_table = {
|
self.dispatch_table = {
|
||||||
'md_update' : self.md_update,
|
'md_update' : self.md_update,
|
||||||
'new_watch' : self.new_watch,
|
'new_watch' : self.new_watch,
|
||||||
'remove_watch' : self.remove_watch,
|
'remove_watch' : self.remove_watch,
|
||||||
'rescan_watch' : self.rescan_watch,
|
'rescan_watch' : self.rescan_watch,
|
||||||
'change_stor' : self.change_storage,
|
'change_stor' : self.change_storage,
|
||||||
'file_delete' : self.file_delete,
|
'file_delete' : self.file_delete,
|
||||||
}
|
}
|
||||||
self.cfg = cfg
|
self.cfg = cfg
|
||||||
self.manager = manager
|
self.manager = manager
|
||||||
|
@ -99,9 +99,9 @@ class AirtimeMessageReceiver(Loggable):
|
||||||
raise ValueError("You must provide either directory_id or \
|
raise ValueError("You must provide either directory_id or \
|
||||||
directory")
|
directory")
|
||||||
sdb = AirtimeDB(apc.AirtimeApiClient.create_right_config())
|
sdb = AirtimeDB(apc.AirtimeApiClient.create_right_config())
|
||||||
if directory: directory = os.path.normpath(directory)
|
if directory : directory = os.path.normpath(directory)
|
||||||
if directory_id == None: directory_id = sdb.to_id(directory)
|
if directory_id == None : directory_id = sdb.to_id(directory)
|
||||||
if directory == None: directory = sdb.to_directory(directory_id)
|
if directory == None : directory = sdb.to_directory(directory_id)
|
||||||
try:
|
try:
|
||||||
bs = Bootstrapper( sdb, self.manager.watch_signal() )
|
bs = Bootstrapper( sdb, self.manager.watch_signal() )
|
||||||
bs.flush_watch( directory=directory, last_ran=self.cfg.last_ran() )
|
bs.flush_watch( directory=directory, last_ran=self.cfg.last_ran() )
|
||||||
|
@ -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)
|
||||||
|
|
|
@ -95,11 +95,11 @@ class BaseEvent(Loggable):
|
||||||
# nothing to see here, please move along
|
# nothing to see here, please move along
|
||||||
def morph_into(self, evt):
|
def morph_into(self, evt):
|
||||||
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):
|
||||||
|
@ -186,7 +186,7 @@ class DeleteDirWatch(BaseEvent):
|
||||||
super(DeleteDirWatch, self).__init__(*args, **kwargs)
|
super(DeleteDirWatch, self).__init__(*args, **kwargs)
|
||||||
def pack(self):
|
def pack(self):
|
||||||
req_dict = {}
|
req_dict = {}
|
||||||
req_dict['mode'] = u'delete_dir'
|
req_dict['mode'] = u'delete_dir'
|
||||||
req_dict['MDATA_KEY_FILEPATH'] = unicode( self.path + "/" )
|
req_dict['MDATA_KEY_FILEPATH'] = unicode( self.path + "/" )
|
||||||
return [req_dict]
|
return [req_dict]
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -2,20 +2,22 @@
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from media.monitor.manager import Manager
|
from media.monitor.manager import Manager
|
||||||
from media.monitor.bootstrap import Bootstrapper
|
from media.monitor.bootstrap import Bootstrapper
|
||||||
from media.monitor.log import get_logger, setup_logging
|
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, \
|
||||||
NoConfigFile
|
FailedToSetLocale, \
|
||||||
from media.monitor.airtime import AirtimeNotifier, AirtimeMessageReceiver
|
NoConfigFile
|
||||||
from media.monitor.watchersyncer import WatchSyncer
|
from media.monitor.airtime import AirtimeNotifier, \
|
||||||
from media.monitor.eventdrainer import EventDrainer
|
AirtimeMessageReceiver
|
||||||
|
from media.monitor.watchersyncer import WatchSyncer
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue