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):
root_facet = turn._facet
gk_receiver = During(turn, on_add = lambda turn, gk: turn.publish(
gk.embeddedValue, gatekeeper.Resolve(cap, ds_receiver))).ref
ds_receiver = During(turn, on_add = lambda turn, ds: turn.facet(
lambda turn: main_facet(turn, root_facet, ds.embeddedValue))).ref
def handle_gatekeeper(turn, gk):
turn.publish(gk.embeddedValue, gatekeeper.Resolve(cap, ds_receiver))
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()
async def on_connected(tr):

View File

@ -29,8 +29,13 @@ class During(actor.Entity):
if retract_handler is not None:
if isinstance(retract_handler, actor.Facet):
self.retract_handlers[handle] = lambda turn: turn.stop(retract_handler)
else:
elif callable(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):
self.retract_handlers.pop(handle, lambda turn: ())(turn)