refactored EventRegistry to play nice with saas.
This commit is contained in:
parent
ebca3fa9f5
commit
fdf8c9fb4e
|
@ -21,28 +21,20 @@ class PathChannel(object):
|
|||
# TODO : Move this to it's file. Also possible unsingleton and use it as a
|
||||
# simple module just like m.m.owners
|
||||
class EventRegistry(object):
|
||||
"""
|
||||
This class's main use is to keep track all events with a cookie attribute.
|
||||
This is done mainly because some events must be 'morphed' into other events
|
||||
because we later detect that they are move events instead of delete events.
|
||||
"""
|
||||
registry = {}
|
||||
@staticmethod
|
||||
def register(evt): EventRegistry.registry[evt.cookie] = evt
|
||||
@staticmethod
|
||||
def unregister(evt): del EventRegistry.registry[evt.cookie]
|
||||
@staticmethod
|
||||
def registered(evt): return evt.cookie in EventRegistry.registry
|
||||
@staticmethod
|
||||
def matching(evt):
|
||||
event = EventRegistry.registry[evt.cookie]
|
||||
""" This class's main use is to keep track all events with a cookie
|
||||
attribute. This is done mainly because some events must be 'morphed'
|
||||
into other events because we later detect that they are move events
|
||||
instead of delete events. """
|
||||
def __init__(self):
|
||||
self.registry = {}
|
||||
def register(self,evt): self.registry[evt.cookie] = evt
|
||||
def unregister(self,evt): del self.registry[evt.cookie]
|
||||
def registered(self,evt): return evt.cookie in self.registry
|
||||
def matching(self,evt):
|
||||
event = self.registry[evt.cookie]
|
||||
# Want to disallow accessing the same event twice
|
||||
EventRegistry.unregister(event)
|
||||
self.unregister(event)
|
||||
return event
|
||||
def __init__(self,*args,**kwargs):
|
||||
raise Exception("You can instantiate this class. Must only use class \
|
||||
methods")
|
||||
|
||||
|
||||
class EventProxy(Loggable):
|
||||
"""
|
||||
|
|
|
@ -73,11 +73,11 @@ class StoreWatchListener(BaseListener, Loggable, pyinotify.ProcessEvent):
|
|||
def process_IN_CLOSE_WRITE(self, event):
|
||||
self.process_create(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
|
||||
# into file events until we know for sure if we deleted or moved
|
||||
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)
|
||||
def process_IN_MOVED_FROM(self, event):
|
||||
# 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
|
||||
# ignored by @IncludeOnly
|
||||
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_MOVE_SELF(self, event):
|
||||
if '-unknown-path' in event.pathname:
|
||||
|
|
|
@ -5,6 +5,7 @@ from media.monitor.exceptions import NoConfigFile
|
|||
from media.monitor.pure import LazyProperty
|
||||
from media.monitor.config import MMConfig
|
||||
from media.monitor.owners import Owner
|
||||
from media.monitor.events import EventRegistry
|
||||
from media.monitor.listeners import FileMediator
|
||||
from api_clients.api_client import AirtimeApiClient
|
||||
|
||||
|
@ -52,6 +53,11 @@ class AirtimeInstance(object):
|
|||
@LazyProperty
|
||||
def owner(self):
|
||||
return Owner()
|
||||
|
||||
@LazyProperty
|
||||
def event_registry(self):
|
||||
return EventRegistry()
|
||||
|
||||
@LazyProperty
|
||||
def file_mediator(self):
|
||||
return FileMediator()
|
||||
|
|
Loading…
Reference in New Issue