diff --git a/chat.py b/chat.py index 64f30f8..525a485 100644 --- a/chat.py +++ b/chat.py @@ -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): diff --git a/syndicate/during.py b/syndicate/during.py index c404580..e56375e 100644 --- a/syndicate/during.py +++ b/syndicate/during.py @@ -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)