De-densify some code
							parent
							
								
									4e53605dd4
								
							
						
					
					
						commit
						b87afa5e8b
					
				| 
						 | 
				
			
			@ -16,12 +16,14 @@ from ._state import current_actor, _runtime_vars
 | 
			
		|||
 | 
			
		||||
@asynccontextmanager
 | 
			
		||||
async def get_arbiter(
 | 
			
		||||
 | 
			
		||||
    host: str,
 | 
			
		||||
    port: int,
 | 
			
		||||
 | 
			
		||||
) -> typing.AsyncGenerator[Union[Portal, LocalPortal], None]:
 | 
			
		||||
    """Return a portal instance connected to a local or remote
 | 
			
		||||
    '''Return a portal instance connected to a local or remote
 | 
			
		||||
    arbiter.
 | 
			
		||||
    """
 | 
			
		||||
    '''
 | 
			
		||||
    actor = current_actor()
 | 
			
		||||
 | 
			
		||||
    if not actor:
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +35,9 @@ async def get_arbiter(
 | 
			
		|||
        yield LocalPortal(actor, Channel((host, port)))
 | 
			
		||||
    else:
 | 
			
		||||
        async with _connect_chan(host, port) as chan:
 | 
			
		||||
 | 
			
		||||
            async with open_portal(chan) as arb_portal:
 | 
			
		||||
 | 
			
		||||
                yield arb_portal
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -41,8 +45,10 @@ async def get_arbiter(
 | 
			
		|||
async def get_root(
 | 
			
		||||
    **kwargs,
 | 
			
		||||
) -> typing.AsyncGenerator[Union[Portal, LocalPortal], None]:
 | 
			
		||||
 | 
			
		||||
    host, port = _runtime_vars['_root_mailbox']
 | 
			
		||||
    assert host is not None
 | 
			
		||||
 | 
			
		||||
    async with _connect_chan(host, port) as chan:
 | 
			
		||||
        async with open_portal(chan, **kwargs) as portal:
 | 
			
		||||
            yield portal
 | 
			
		||||
| 
						 | 
				
			
			@ -60,12 +66,16 @@ async def find_actor(
 | 
			
		|||
    """
 | 
			
		||||
    actor = current_actor()
 | 
			
		||||
    async with get_arbiter(*arbiter_sockaddr or actor._arb_addr) as arb_portal:
 | 
			
		||||
 | 
			
		||||
        sockaddr = await arb_portal.run_from_ns('self', 'find_actor', name=name)
 | 
			
		||||
 | 
			
		||||
        # TODO: return portals to all available actors - for now just
 | 
			
		||||
        # the last one that registered
 | 
			
		||||
        if name == 'arbiter' and actor.is_arbiter:
 | 
			
		||||
            raise RuntimeError("The current actor is the arbiter")
 | 
			
		||||
 | 
			
		||||
        elif sockaddr:
 | 
			
		||||
 | 
			
		||||
            async with _connect_chan(*sockaddr) as chan:
 | 
			
		||||
                async with open_portal(chan) as portal:
 | 
			
		||||
                    yield portal
 | 
			
		||||
| 
						 | 
				
			
			@ -83,9 +93,12 @@ async def wait_for_actor(
 | 
			
		|||
    A portal to the first registered actor is returned.
 | 
			
		||||
    """
 | 
			
		||||
    actor = current_actor()
 | 
			
		||||
 | 
			
		||||
    async with get_arbiter(*arbiter_sockaddr or actor._arb_addr) as arb_portal:
 | 
			
		||||
 | 
			
		||||
        sockaddrs = await arb_portal.run_from_ns('self', 'wait_for_actor', name=name)
 | 
			
		||||
        sockaddr = sockaddrs[-1]
 | 
			
		||||
 | 
			
		||||
        async with _connect_chan(*sockaddr) as chan:
 | 
			
		||||
            async with open_portal(chan) as portal:
 | 
			
		||||
                yield portal
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue