Exemple #1
0
class RRQDebugger(iRRQDebugger, iRRQDebuggerSink):
    def __init__(self, methods=None, quiet=True):
        self._methods = []
        methods = iRRQDebuggerSink()._getMethods()
        self._methods = methods
        self._enabled = False
        self._quiet = quiet
        self._lock = RLock()
        self._sink = None
    def start(self, peerName, theTime, filename=None, server=None):
        #    Stop an existing debugger:
        with self._lock:
            self.stop()
            #    Create the new one:
            if filename!=None:
                self._sink = FileSink(peerName, theTime, filename, self._quiet)
            elif server!=None:
                self._sink = ServerSink(peerName, theTime, server, self._quiet)
            else:
                self._sink = NullSink()
            result = self._sink.start()
            self._sink.waitUntilRunning()
            self._enabled = True
            return result
    def stop(self):
        result = "sink.not.closed"
        with self._lock:
            if self._sink!=None:
                result = self._sink.close()  #    Must be synchronous!
                self._sink = None
            self._enabled = False
        return result
    def _getUid(self, **kwargs):
        if "uu" in kwargs:
            uu = kwargs["uu"]
            if uu!=None:
                return uu
        return RRQDebugger.newUid(self)
    def __getattribute__(self, name):
        if name in object.__getattribute__(self, "_methods"):
            if self._sink==None:
                def MyHandler(*args, **kwargs):
                    pass
                return MyHandler
            def genericSinkMethod(peerName, relativeTime, *args, **kwargs):
                uu = self._getUid(**kwargs)
                kwargs["uu"] = uu
                #    Call the sink-method with modified args:
                attr = getattr(self._sink, name)
                attr(self, peerName, relativeTime, *args, **kwargs)
                return uu
            return genericSinkMethod
        return object.__getattribute__(self, name)
Exemple #2
0
 def start(self, peerName, theTime, filename=None, server=None):
     #    Stop an existing debugger:
     with self._lock:
         self.stop()
         #    Create the new one:
         if filename!=None:
             self._sink = FileSink(peerName, theTime, filename, self._quiet)
         elif server!=None:
             self._sink = ServerSink(peerName, theTime, server, self._quiet)
         else:
             self._sink = NullSink()
         result = self._sink.start()
         self._sink.waitUntilRunning()
         self._enabled = True
         return result