Franck Pommereau

improved 'when', fixed simul.disconnect

......@@ -411,13 +411,19 @@ class ShellRunner (Runner) :
"""
for evt in event :
self.watch(evt)
async def cmd_when (self, event:str, cmd:str, *args:str) :
async def cmd_when (self, event:str, count:int, cmd:str, *args:str) :
"""execute command on specified event
- event: watched event
- count: number of occurrences (0 => infinite)
- cmd: a shell command
- args: arguments for cmd"""
def cb (e, *a) :
loop = asyncio.get_event_loop()
asyncio.run_coroutine_threadsafe(self._cmd_call(cmd, args), loop)
cb.count -= 1
if cb.count == 0 :
self.ignore(event)
cb.count = count
self.watch(event, cb)
async def cmd_ignore (self, *event:str) :
"""ignore specified events
......
......@@ -57,9 +57,9 @@ class Simulator (object) :
self.cb = {}
self._ident = 0
def connect (self, pattern, cb) :
ident = self._ident
self._ident += 1
self.cb[self._ident] = (pattern, cb)
return self._ident
def disconnect (self, ident) :
self.cb.pop(ident, None)
async def ttc_event (self, name, *args) :
......@@ -76,7 +76,7 @@ class Simulator (object) :
if a is NONE :
args[i] = None
done = set()
for pat, fun in self.cb.values() :
for pat, fun in list(self.cb.values()) :
if fun in done :
continue
if match(event, pat) :
......