import trio
import tractor


async def key_error():
    "Raise a ``NameError``"
    return {}['doggy']


async def main():
    '''
    Root is fail-after-cancelled while blocking and child RPC fails
    simultaneously.

    '''
    async with tractor.open_nursery(
        debug_mode=True,
        # loglevel='debug'  # ?XXX required?
    ) as n:

        # spawn both actors
        portal = await n.run_in_actor(key_error)
        print(
            f'Child is up @ {portal.chan.aid.reprol()}'
        )


        # XXX: originally a bug caused by this is where root would enter
        # the debugger and clobber the tty used by the repl even though
        # child should have it locked.
        with trio.fail_after(1):
            await trio.Event().wait()


if __name__ == '__main__':
    trio.run(main)
