Autocomplete working in query_editor plugin
[myslice.git] / manifold / util / reactor_wrapper.py
1 from manifold.util.singleton import Singleton
2
3 class ReactorWrapper(object):
4     __metaclass__ = Singleton
5     
6     def __init__(self):
7         # Be sure the import is done only at runtime, we keep a reference in the
8         # class instance
9         from twisted.internet import reactor
10         self.reactor = reactor
11
12
13     def callInReactor(self, callable, *args, **kw):
14         print "ReactorWrapper::callInReactor"
15         if self._reactorRunning:
16             self.reactor.callFromThread(callable, *args, **kw)
17         else:
18             callable(*args, **kw)                 
19             
20     def isReactorRunning(self):
21         return self._reactorRunning
22        
23     def start_reactor(self):
24         self.reactor.run()
25
26     def stop_reactor(self):
27         self.reactor.stop()
28
29     def addReactorEventTrigger(self, phase, eventType, callable):
30         print "ReactorWrapper::addReactorEventTrigger"
31         if self._reactorRunning:
32             self.reactor.callFromThread(self.reactor.addSystemEventTrigger, phase, eventType, callable)
33         else:
34             self.reactor.addSystemEventTrigger(phase, eventType, callable)
35
36     def __reactorShuttingDown(self):
37         pass
38
39     def __reactorShutDown(self):
40         """This method called when the reactor is stopped"""
41         print "REACTOR SHUTDOWN"
42         self._reactorRunning = False
43
44     def __getattr__(self, name):
45         # We transfer missing methods to the reactor
46         def _missing(*args, **kwargs):
47             getattr(self.reactor, name)(*args, **kwargs)
48         return _missing