Guard against non-callable, non-facet on_add results

This commit is contained in:
Tony Garnock-Jones 2021-08-19 12:59:48 -04:00
parent 2b06fc2758
commit 29fe7d1d97
2 changed files with 14 additions and 5 deletions

12
chat.py
View File

@ -51,10 +51,14 @@ def main_facet(turn, root_facet, ds):
def main(turn): def main(turn):
root_facet = turn._facet root_facet = turn._facet
gk_receiver = During(turn, on_add = lambda turn, gk: turn.publish(
gk.embeddedValue, gatekeeper.Resolve(cap, ds_receiver))).ref def handle_gatekeeper(turn, gk):
ds_receiver = During(turn, on_add = lambda turn, ds: turn.facet( turn.publish(gk.embeddedValue, gatekeeper.Resolve(cap, ds_receiver))
lambda turn: main_facet(turn, root_facet, ds.embeddedValue))).ref gk_receiver = During(turn, on_add = handle_gatekeeper).ref
def handle_ds(turn, ds):
return turn.facet(lambda turn: main_facet(turn, root_facet, ds.embeddedValue))
ds_receiver = During(turn, on_add = handle_ds).ref
disarm = turn.prevent_inert_check() disarm = turn.prevent_inert_check()
async def on_connected(tr): async def on_connected(tr):

View File

@ -29,8 +29,13 @@ class During(actor.Entity):
if retract_handler is not None: if retract_handler is not None:
if isinstance(retract_handler, actor.Facet): if isinstance(retract_handler, actor.Facet):
self.retract_handlers[handle] = lambda turn: turn.stop(retract_handler) self.retract_handlers[handle] = lambda turn: turn.stop(retract_handler)
else: elif callable(retract_handler):
self.retract_handlers[handle] = retract_handler self.retract_handlers[handle] = retract_handler
else:
raise ValueError('Non-callable retract_handler', {
'retract_handler': retract_handler,
'on_add': self._on_add,
})
def on_retract(self, turn, handle): def on_retract(self, turn, handle):
self.retract_handlers.pop(handle, lambda turn: ())(turn) self.retract_handlers.pop(handle, lambda turn: ())(turn)