refactored EventRegistry to play nice with saas.

This commit is contained in:
Rudi Grinberg 2012-11-19 20:13:19 -05:00
parent ebca3fa9f5
commit fdf8c9fb4e
3 changed files with 21 additions and 23 deletions

View File

@ -21,28 +21,20 @@ class PathChannel(object):
# 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
# simple module just like m.m.owners # simple module just like m.m.owners
class EventRegistry(object): class EventRegistry(object):
""" """ This class's main use is to keep track all events with a cookie
This class's main use is to keep track all events with a cookie attribute. attribute. This is done mainly because some events must be 'morphed'
This is done mainly because some events must be 'morphed' into other events into other events because we later detect that they are move events
because we later detect that they are move events instead of delete events. instead of delete events. """
""" def __init__(self):
registry = {} self.registry = {}
@staticmethod def register(self,evt): self.registry[evt.cookie] = evt
def register(evt): EventRegistry.registry[evt.cookie] = evt def unregister(self,evt): del self.registry[evt.cookie]
@staticmethod def registered(self,evt): return evt.cookie in self.registry
def unregister(evt): del EventRegistry.registry[evt.cookie] def matching(self,evt):
@staticmethod event = self.registry[evt.cookie]
def registered(evt): return evt.cookie in EventRegistry.registry
@staticmethod
def matching(evt):
event = EventRegistry.registry[evt.cookie]
# Want to disallow accessing the same event twice # Want to disallow accessing the same event twice
EventRegistry.unregister(event) self.unregister(event)
return event return event
def __init__(self,*args,**kwargs):
raise Exception("You can instantiate this class. Must only use class \
methods")
class EventProxy(Loggable): class EventProxy(Loggable):
""" """

View File

@ -73,11 +73,11 @@ class StoreWatchListener(BaseListener, Loggable, pyinotify.ProcessEvent):
def process_IN_CLOSE_WRITE(self, event): def process_IN_CLOSE_WRITE(self, event):
self.process_create(event) self.process_create(event)
def process_IN_MOVED_TO(self, event): def process_IN_MOVED_TO(self, event):
if EventRegistry.registered(event): if user().event_registry.registered(event):
# We need this trick because we don't how to "expand" dir events # We need this trick because we don't how to "expand" dir events
# into file events until we know for sure if we deleted or moved # into file events until we know for sure if we deleted or moved
morph = MoveDir(event) if event.dir else MoveFile(event) morph = MoveDir(event) if event.dir else MoveFile(event)
EventRegistry.matching(event).morph_into(morph) user().event_registry.matching(event).morph_into(morph)
else: self.process_create(event) else: self.process_create(event)
def process_IN_MOVED_FROM(self, event): def process_IN_MOVED_FROM(self, event):
# Is either delete dir or delete file # Is either delete dir or delete file
@ -85,7 +85,7 @@ class StoreWatchListener(BaseListener, Loggable, pyinotify.ProcessEvent):
# evt can be none whenever event points that a file that would be # evt can be none whenever event points that a file that would be
# ignored by @IncludeOnly # ignored by @IncludeOnly
if hasattr(event,'cookie') and (evt != None): if hasattr(event,'cookie') and (evt != None):
EventRegistry.register(evt) user().event_registry.register(evt)
def process_IN_DELETE(self,event): self.process_delete(event) def process_IN_DELETE(self,event): self.process_delete(event)
def process_IN_MOVE_SELF(self, event): def process_IN_MOVE_SELF(self, event):
if '-unknown-path' in event.pathname: if '-unknown-path' in event.pathname:

View File

@ -5,6 +5,7 @@ from media.monitor.exceptions import NoConfigFile
from media.monitor.pure import LazyProperty from media.monitor.pure import LazyProperty
from media.monitor.config import MMConfig from media.monitor.config import MMConfig
from media.monitor.owners import Owner from media.monitor.owners import Owner
from media.monitor.events import EventRegistry
from media.monitor.listeners import FileMediator from media.monitor.listeners import FileMediator
from api_clients.api_client import AirtimeApiClient from api_clients.api_client import AirtimeApiClient
@ -52,6 +53,11 @@ class AirtimeInstance(object):
@LazyProperty @LazyProperty
def owner(self): def owner(self):
return Owner() return Owner()
@LazyProperty
def event_registry(self):
return EventRegistry()
@LazyProperty @LazyProperty
def file_mediator(self): def file_mediator(self):
return FileMediator() return FileMediator()