Autocomplete working in query_editor plugin
[myslice.git] / manifold / util / reactor_wrapper.py
diff --git a/manifold/util/reactor_wrapper.py b/manifold/util/reactor_wrapper.py
new file mode 100644 (file)
index 0000000..eb18874
--- /dev/null
@@ -0,0 +1,48 @@
+from manifold.util.singleton import Singleton
+
+class ReactorWrapper(object):
+    __metaclass__ = Singleton
+    
+    def __init__(self):
+        # Be sure the import is done only at runtime, we keep a reference in the
+        # class instance
+        from twisted.internet import reactor
+        self.reactor = reactor
+
+
+    def callInReactor(self, callable, *args, **kw):
+        print "ReactorWrapper::callInReactor"
+        if self._reactorRunning:
+            self.reactor.callFromThread(callable, *args, **kw)
+        else:
+            callable(*args, **kw)                 
+            
+    def isReactorRunning(self):
+        return self._reactorRunning
+       
+    def start_reactor(self):
+        self.reactor.run()
+
+    def stop_reactor(self):
+        self.reactor.stop()
+
+    def addReactorEventTrigger(self, phase, eventType, callable):
+        print "ReactorWrapper::addReactorEventTrigger"
+        if self._reactorRunning:
+            self.reactor.callFromThread(self.reactor.addSystemEventTrigger, phase, eventType, callable)
+        else:
+            self.reactor.addSystemEventTrigger(phase, eventType, callable)
+
+    def __reactorShuttingDown(self):
+        pass
+
+    def __reactorShutDown(self):
+        """This method called when the reactor is stopped"""
+        print "REACTOR SHUTDOWN"
+        self._reactorRunning = False
+
+    def __getattr__(self, name):
+        # We transfer missing methods to the reactor
+        def _missing(*args, **kwargs):
+            getattr(self.reactor, name)(*args, **kwargs)
+        return _missing