removed hardcoded signals in the code.

This commit is contained in:
Rudi Grinberg 2012-11-19 16:07:26 -05:00
parent 6101e9dfe3
commit 4acb7d92db
8 changed files with 35 additions and 30 deletions

View File

@ -2,6 +2,7 @@ import os
from pydispatch import dispatcher from pydispatch import dispatcher
from media.monitor.events import NewFile, DeleteFile, ModifyFile from media.monitor.events import NewFile, DeleteFile, ModifyFile
from media.monitor.log import Loggable from media.monitor.log import Loggable
from media.saas.thread import getsig
import media.monitor.pure as mmp import media.monitor.pure as mmp
class Bootstrapper(Loggable): class Bootstrapper(Loggable):
@ -16,7 +17,7 @@ class Bootstrapper(Loggable):
watch_signal - the signals should send events for every file on. watch_signal - the signals should send events for every file on.
""" """
self.db = db self.db = db
self.watch_signal = watch_signal self.watch_signal = getsig(watch_signal)
def flush_all(self, last_ran): def flush_all(self, last_ran):
""" """

View File

@ -8,6 +8,7 @@ from media.monitor.pure import LazyProperty
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.exceptions import BadSongFile from media.monitor.exceptions import BadSongFile
from media.saas.thread import getsig
class PathChannel(object): class PathChannel(object):
""" """
@ -15,7 +16,7 @@ class PathChannel(object):
used as a named tuple used as a named tuple
""" """
def __init__(self, signal, path): def __init__(self, signal, path):
self.signal = signal self.signal = getsig(signal)
self.path = path self.path = path
# TODO : Move this to it's file. Also possible unsingleton and use it as a # TODO : Move this to it's file. Also possible unsingleton and use it as a

View File

@ -3,6 +3,7 @@ from pydispatch import dispatcher
import abc import abc
from media.monitor.log import Loggable from media.monitor.log import Loggable
from media.saas.thread import getsig
import media.monitor.pure as mmp import media.monitor.pure as mmp
# Defines the handle interface # Defines the handle interface
@ -21,10 +22,10 @@ class ReportHandler(Handles):
""" """
__metaclass__ = abc.ABCMeta __metaclass__ = abc.ABCMeta
def __init__(self, signal, weak=False): def __init__(self, signal, weak=False):
self.signal = signal self.signal = getsig(signal)
self.report_signal = "badfile" self.report_signal = getsig("badfile")
def dummy(sender, event): self.handle(sender,event) def dummy(sender, event): self.handle(sender,event)
dispatcher.connect(dummy, signal=signal, sender=dispatcher.Any, dispatcher.connect(dummy, signal=self.signal, sender=dispatcher.Any,
weak=weak) weak=weak)
def report_problem_file(self, event, exception=None): def report_problem_file(self, event, exception=None):
@ -38,7 +39,7 @@ class ProblemFileHandler(Handles, Loggable):
""" """
def __init__(self, channel, **kwargs): def __init__(self, channel, **kwargs):
self.channel = channel self.channel = channel
self.signal = self.channel.signal self.signal = getsig(self.channel.signal)
self.problem_dir = self.channel.path self.problem_dir = self.channel.path
def dummy(sender, event, exception): def dummy(sender, event, exception):
self.handle(sender, event, exception) self.handle(sender, event, exception)

View File

@ -9,7 +9,7 @@ from media.monitor.events import OrganizeFile, NewFile, MoveFile, DeleteFile, \
DeleteDir, EventRegistry, MoveDir,\ DeleteDir, EventRegistry, MoveDir,\
DeleteDirWatch DeleteDirWatch
from media.monitor.log import Loggable, get_logger from media.monitor.log import Loggable, get_logger
from media.saas.thread import getsig
# Note: Because of the way classes that inherit from pyinotify.ProcessEvent # Note: Because of the way classes that inherit from pyinotify.ProcessEvent
# interact with constructors. you should only instantiate objects from them # interact with constructors. you should only instantiate objects from them
# using keyword arguments. For example: # using keyword arguments. For example:
@ -45,7 +45,7 @@ class BaseListener(object):
def __str__(self): def __str__(self):
return "Listener(%s), Signal(%s)" % \ return "Listener(%s), Signal(%s)" % \
(self.__class__.__name__, self. signal) (self.__class__.__name__, self. signal)
def my_init(self, signal): self.signal = signal def my_init(self, signal): self.signal = getsig(signal)
class OrganizeListener(BaseListener, pyinotify.ProcessEvent, Loggable): class OrganizeListener(BaseListener, pyinotify.ProcessEvent, Loggable):
def process_IN_CLOSE_WRITE(self, event): def process_IN_CLOSE_WRITE(self, event):
@ -66,14 +66,14 @@ class OrganizeListener(BaseListener, pyinotify.ProcessEvent, Loggable):
self.logger.info("Bootstrapping: File in 'organize' directory: \ self.logger.info("Bootstrapping: File in 'organize' directory: \
'%s'" % f) '%s'" % f)
if not mmp.file_locked(f): if not mmp.file_locked(f):
dispatcher.send(signal=self.signal, sender=self, dispatcher.send(signal=getsig(self.signal), sender=self,
event=OrganizeFile(f)) event=OrganizeFile(f))
flushed += 1 flushed += 1
#self.logger.info("Flushed organized directory with %d files" % flushed) #self.logger.info("Flushed organized directory with %d files" % flushed)
@IncludeOnly(mmp.supported_extensions) @IncludeOnly(mmp.supported_extensions)
def process_to_organize(self, event): def process_to_organize(self, event):
dispatcher.send(signal=self.signal, sender=self, dispatcher.send(signal=getsig(self.signal), sender=self,
event=OrganizeFile(event)) event=OrganizeFile(event))
class StoreWatchListener(BaseListener, Loggable, pyinotify.ProcessEvent): class StoreWatchListener(BaseListener, Loggable, pyinotify.ProcessEvent):
@ -101,14 +101,14 @@ class StoreWatchListener(BaseListener, Loggable, pyinotify.ProcessEvent):
def delete_watch_dir(self, event): def delete_watch_dir(self, event):
e = DeleteDirWatch(event) e = DeleteDirWatch(event)
dispatcher.send(signal='watch_move', sender=self, event=e) dispatcher.send(signal=getsig('watch_move'), sender=self, event=e)
dispatcher.send(signal=self.signal, sender=self, event=e) dispatcher.send(signal=getsig(self.signal), sender=self, event=e)
@mediate_ignored @mediate_ignored
@IncludeOnly(mmp.supported_extensions) @IncludeOnly(mmp.supported_extensions)
def process_create(self, event): def process_create(self, event):
evt = NewFile(event) evt = NewFile(event)
dispatcher.send(signal=self.signal, sender=self, event=evt) dispatcher.send(signal=getsig(self.signal), sender=self, event=evt)
return evt return evt
@mediate_ignored @mediate_ignored
@ -117,13 +117,13 @@ class StoreWatchListener(BaseListener, Loggable, pyinotify.ProcessEvent):
evt = None evt = None
if event.dir : evt = DeleteDir(event) if event.dir : evt = DeleteDir(event)
else : evt = DeleteFile(event) else : evt = DeleteFile(event)
dispatcher.send(signal=self.signal, sender=self, event=evt) dispatcher.send(signal=getsig(self.signal), sender=self, event=evt)
return evt return evt
@mediate_ignored @mediate_ignored
def process_delete_dir(self, event): def process_delete_dir(self, event):
evt = DeleteDir(event) evt = DeleteDir(event)
dispatcher.send(signal=self.signal, sender=self, event=evt) dispatcher.send(signal=getsig(self.signal), sender=self, event=evt)
return evt return evt
def flush_events(self, path): def flush_events(self, path):
@ -138,6 +138,6 @@ class StoreWatchListener(BaseListener, Loggable, pyinotify.ProcessEvent):
added = 0 added = 0
for f in mmp.walk_supported(path, clean_empties=False): for f in mmp.walk_supported(path, clean_empties=False):
added += 1 added += 1
dispatcher.send( signal=self.signal, sender=self, event=NewFile(f) ) dispatcher.send( signal=getsig(self.signal), sender=self, event=NewFile(f) )
self.logger.info( "Flushed watch directory. added = %d" % added ) self.logger.info( "Flushed watch directory. added = %d" % added )

View File

@ -8,7 +8,7 @@ from media.monitor.log import Loggable
from media.monitor.listeners import StoreWatchListener, OrganizeListener from media.monitor.listeners import StoreWatchListener, OrganizeListener
from media.monitor.handler import ProblemFileHandler from media.monitor.handler import ProblemFileHandler
from media.monitor.organizer import Organizer from media.monitor.organizer import Organizer
from media.saas.thread import InstanceInheritingThread from media.saas.thread import InstanceInheritingThread, getsig
import media.monitor.pure as mmp import media.monitor.pure as mmp
@ -37,8 +37,8 @@ class Manager(Loggable):
def __init__(self): def __init__(self):
self.wm = pyinotify.WatchManager() self.wm = pyinotify.WatchManager()
# These two instance variables are assumed to be constant # These two instance variables are assumed to be constant
self.watch_channel = 'watch' self.watch_channel = getsig('watch')
self.organize_channel = 'organize' self.organize_channel = getsig('organize')
self.watch_listener = StoreWatchListener(signal = self.watch_channel) self.watch_listener = StoreWatchListener(signal = self.watch_channel)
self.__timeout_thread = ManagerTimeout(self) self.__timeout_thread = ManagerTimeout(self)
self.__timeout_thread.daemon = True self.__timeout_thread.daemon = True
@ -54,11 +54,11 @@ class Manager(Loggable):
self.organize_channel), self.organize_channel),
} }
def dummy(sender, event): self.watch_move( event.path, sender=sender ) def dummy(sender, event): self.watch_move( event.path, sender=sender )
dispatcher.connect(dummy, signal='watch_move', sender=dispatcher.Any, dispatcher.connect(dummy, signal=getsig('watch_move'),
weak=False) sender=dispatcher.Any, weak=False)
def subwatch_add(sender, directory): def subwatch_add(sender, directory):
self.__add_watch(directory, self.watch_listener) self.__add_watch(directory, self.watch_listener)
dispatcher.connect(subwatch_add, signal='add_subwatch', dispatcher.connect(subwatch_add, signal=getsig('add_subwatch'),
sender=dispatcher.Any, weak=False) sender=dispatcher.Any, weak=False)
# A private mapping path => watch_descriptor # A private mapping path => watch_descriptor
# we use the same dictionary for organize, watch, store wd events. # we use the same dictionary for organize, watch, store wd events.
@ -81,7 +81,7 @@ class Manager(Loggable):
def watch_signal(self): def watch_signal(self):
""" Return the signal string our watch_listener is reading """ Return the signal string our watch_listener is reading
events from """ events from """
return self.watch_listener.signal return getsig(self.watch_listener.signal)
def __remove_watch(self,path): def __remove_watch(self,path):
""" Remove path from being watched (first will check if 'path' """ Remove path from being watched (first will check if 'path'
@ -131,7 +131,8 @@ class Manager(Loggable):
""" Set the path where problem files should go """ """ Set the path where problem files should go """
self.organize['problem_files_path'] = new_path self.organize['problem_files_path'] = new_path
self.organize['problem_handler'] = \ self.organize['problem_handler'] = \
ProblemFileHandler( PathChannel(signal='badfile',path=new_path) ) ProblemFileHandler( PathChannel(signal=getsig('badfile'),
path=new_path) )
def get_recorded_path(self): def get_recorded_path(self):
""" returns the path of the recorded directory """ """ returns the path of the recorded directory """

View File

@ -7,6 +7,7 @@ from media.monitor.exceptions import BadSongFile
from media.monitor.events import OrganizeFile from media.monitor.events import OrganizeFile
from pydispatch import dispatcher from pydispatch import dispatcher
from os.path import dirname from os.path import dirname
from media.saas.thread import getsig
import os.path import os.path
class Organizer(ReportHandler,Loggable): class Organizer(ReportHandler,Loggable):
@ -36,7 +37,7 @@ class Organizer(ReportHandler,Loggable):
self.channel = channel self.channel = channel
self.target_path = target_path self.target_path = target_path
self.recorded_path = recorded_path self.recorded_path = recorded_path
super(Organizer, self).__init__(signal=self.channel, weak=False) super(Organizer, self).__init__(signal=getsig(self.channel), weak=False)
def handle(self, sender, event): def handle(self, sender, event):
""" Intercept events where a new file has been added to the """ Intercept events where a new file has been added to the
@ -63,7 +64,7 @@ class Organizer(ReportHandler,Loggable):
def new_dir_watch(d): def new_dir_watch(d):
# TODO : rewrite as return lambda : dispatcher.send(... # TODO : rewrite as return lambda : dispatcher.send(...
def cb(): def cb():
dispatcher.send(signal="add_subwatch", sender=self, dispatcher.send(signal=getsig("add_subwatch"), sender=self,
directory=d) directory=d)
return cb return cb

View File

@ -8,7 +8,7 @@ from media.monitor.exceptions import BadSongFile
from media.monitor.eventcontractor import EventContractor from media.monitor.eventcontractor import EventContractor
from media.monitor.events import EventProxy from media.monitor.events import EventProxy
from media.monitor.request import ThreadedRequestSync, RequestSync from media.monitor.request import ThreadedRequestSync, RequestSync
from media.saas.thread import InstanceInheritingThread from media.saas.thread import InstanceInheritingThread, getsig
class TimeoutWatcher(InstanceInheritingThread,Loggable): class TimeoutWatcher(InstanceInheritingThread,Loggable):
""" """
@ -52,7 +52,7 @@ class WatchSyncer(ReportHandler,Loggable):
tc = TimeoutWatcher(self, self.timeout) tc = TimeoutWatcher(self, self.timeout)
tc.daemon = True tc.daemon = True
tc.start() tc.start()
super(WatchSyncer, self).__init__(signal=signal) super(WatchSyncer, self).__init__(signal=getsig(signal))
def handle(self, sender, event): def handle(self, sender, event):
""" """

View File

@ -7,7 +7,7 @@ import media.monitor.pure as mmp
from media.monitor.exceptions import FailedToObtainLocale, FailedToSetLocale from media.monitor.exceptions import FailedToObtainLocale, FailedToSetLocale
from media.monitor.log import get_logger, setup_logging from media.monitor.log import get_logger, setup_logging
from std_err_override import LogWriter from std_err_override import LogWriter
from media.saas.thread import InstanceThread, user, apc from media.saas.thread import InstanceThread, user, apc, getsig
from media.monitor.log import Loggable from media.monitor.log import Loggable
from media.monitor.exceptions import CouldNotCreateIndexFile from media.monitor.exceptions import CouldNotCreateIndexFile
from media.monitor.toucher import ToucherThread from media.monitor.toucher import ToucherThread
@ -44,7 +44,7 @@ class MM2(InstanceThread, Loggable):
manager = Manager() manager = Manager()
apiclient = apc() apiclient = apc()
config = user().mm_config config = user().mm_config
watch_syncer = WatchSyncer(signal='watch', watch_syncer = WatchSyncer(signal=getsig('watch'),
chunking_number=config['chunking_number'], chunking_number=config['chunking_number'],
timeout=config['request_max_wait']) timeout=config['request_max_wait'])
airtime_receiver = AirtimeMessageReceiver(config,manager) airtime_receiver = AirtimeMessageReceiver(config,manager)