From 1fde12d3fd388fff027007364edab04513ae4f2f Mon Sep 17 00:00:00 2001 From: goodboy Date: Mon, 13 Apr 2026 13:40:40 -0400 Subject: [PATCH] Use `tractor.Address` for endpoint resolution Replace manual `layers['ipv4']['addr']` / `layers['tcp']['port']` tuple extraction with direct `tractor.Address` objects returned from `load_trans_eps()`. In `open_pikerd()` call `addr.unwrap()` for the raw-tuple comparison against `root_actor.accept_addrs`. Deats, - `conf.toml`: update maddr prefix `/ipv4/` -> `/ipv/`, add commented UDS socket path example. - `cli/__init__.py`: wrap endpoint loading in `maybe_open_crash_handler`, append `addr` objects directly to `regaddrs`. - `ui/cli.py`: restructure `chart()` body into `maybe_open_crash_handler` scope, switch to `registry_addrs` from config, comment out the `network`-based `load_trans_eps` path (WIP `multiaddr` transition). - `_actor_runtime.py`: use `addr.unwrap()` for accept-addr membership check. - `uv.lock`: add `multiaddr >= 0.2.0` and its transitive deps. (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code --- config/conf.toml | 5 +- piker/cli/__init__.py | 18 ++--- piker/service/_actor_runtime.py | 5 +- piker/ui/cli.py | 118 ++++++++++++++++---------------- 4 files changed, 75 insertions(+), 71 deletions(-) diff --git a/config/conf.toml b/config/conf.toml index 1f2a64bc..77bab1a4 100644 --- a/config/conf.toml +++ b/config/conf.toml @@ -1,7 +1,8 @@ [network] pikerd = [ - '/ipv4/127.0.0.1/tcp/6116', # std localhost daemon-actor tree - # '/uds/6116', # TODO std uds socket file + '/ipv/127.0.0.1/tcp/6116', # TCP localhost loopback + + # '/uds/run/user/1000/piker/pikerd@6116.sock', # UDS socket path using `multiaddr` lib! ] diff --git a/piker/cli/__init__.py b/piker/cli/__init__.py index 1d3bad25..a8c0c0e7 100644 --- a/piker/cli/__init__.py +++ b/piker/cli/__init__.py @@ -161,15 +161,15 @@ def pikerd( )] else: - eps: dict = load_trans_eps( - network, - maddr, - ) - for layers in eps['pikerd']: - regaddrs.append(( - layers['ipv4']['addr'], - layers['tcp']['port'], - )) + from tractor.devx import maybe_open_crash_handler + with maybe_open_crash_handler(pdb=pdb): + eps: dict[str, list] = load_trans_eps( + network, + maddr, + ) + addrs: list[tractor.Address] = eps['pikerd'] + for addr in addrs: + regaddrs.append(addr) from .. import service diff --git a/piker/service/_actor_runtime.py b/piker/service/_actor_runtime.py index b80cd072..a5325e78 100644 --- a/piker/service/_actor_runtime.py +++ b/piker/service/_actor_runtime.py @@ -210,7 +210,10 @@ async def open_pikerd( trio.open_nursery() as service_tn, ): for addr in reg_addrs: - if addr not in root_actor.accept_addrs: + uaddr: tuple = addr.unwrap() + if ( + uaddr not in root_actor.accept_addrs + ): raise RuntimeError( f'`pikerd` failed to bind on {addr}!\n' 'Maybe you have another daemon already running?' diff --git a/piker/ui/cli.py b/piker/ui/cli.py index d2072900..c4b37290 100644 --- a/piker/ui/cli.py +++ b/piker/ui/cli.py @@ -22,7 +22,10 @@ import os import click import tractor -from ..cli import cli +from ..cli import ( + cli, + load_trans_eps, +) from .. import watchlists as wl from ..service import maybe_spawn_brokerd @@ -159,67 +162,64 @@ def chart( needed if not discovered via [network] config. ''' - # eg. ``--profile 3`` reports profiling for anything slower then 3 ms. - if profile is not None: - from .. import _profile - _profile._pg_profile = True - _profile.ms_slower_then = float(profile) - - # Qt UI entrypoint - from ._app import _main - - for symbol in symbols: - if '.' not in symbol: - click.echo(click.style( - f'symbol: {symbol} must have a {symbol}. suffix', - fg='red', - )) - return - - # global opts - # brokernames: list[str] = config['brokers'] - brokermods = config['brokermods'] - assert brokermods - tractorloglevel = config['tractorloglevel'] - pikerloglevel = config['loglevel'] - - maddrs: list[tuple[str, int]] = config.get( - 'maddrs', - [], - ) - - # if maddrs: - # from tractor._multiaddr import parse_maddr - # for addr in maddrs: - # breakpoint() - # layers: dict = parse_maddr(addr) - - regaddrs: list[tuple[str, int]] = config.get( - 'registry_addrs', - [], - ) - - from ..config import load - conf, _ = load( - conf_name='conf', - ) - network: dict = conf.get('network') - if network: - from ..cli import load_trans_eps - eps: dict = load_trans_eps( - network, - maddrs, - ) - for layers in eps['pikerd']: - regaddrs.append(( - layers['ipv4']['addr'], - layers['tcp']['port'], - )) - - # breakpoint() from tractor.devx import maybe_open_crash_handler pdb: bool = config['pdb'] with maybe_open_crash_handler(pdb=pdb): + # eg. ``--profile 3`` reports profiling for anything slower then 3 ms. + if profile is not None: + from .. import _profile + _profile._pg_profile = True + _profile.ms_slower_then = float(profile) + + # Qt UI entrypoint + from ._app import _main + + for symbol in symbols: + if '.' not in symbol: + click.echo(click.style( + f'symbol: {symbol} must have a {symbol}. suffix', + fg='red', + )) + return + + # global opts + # brokernames: list[str] = config['brokers'] + brokermods = config['brokermods'] + assert brokermods + tractorloglevel = config['tractorloglevel'] + pikerloglevel = config['loglevel'] + + # !TODO, allow declaring bind addr via maddr! + from ..config import load + conf, _ = load( + conf_name='conf', + ) + + regaddrs: list[tuple[str, int]] = config.get( + 'registry_addrs', + [], + ) + # network: dict = conf.get('network') + # if network: + # eps: dict = load_trans_eps( + # network, + # maddrs=None, + # ) + # addr: tractor.Address + # for addr in eps['pikerd']: + # regaddrs.append(addr) + + # # !TODO, expose this from open_root_actor()! + # tpt_bind_addrs: list[ + # tractor.Address # `Address.get_random()` case + # |tractor.UnwrappedAddress # registrar case `= uw_reg_addrs` + # ] = [] + # chart_maddrs: list[str] = eps.get('chart') + # if chart_maddrs: + # addr: tractor.Address + # for addr in load_trans_eps(chart_maddrs): + # tpt_bind_addrs.append(addr) + _main( syms=symbols, brokermods=brokermods,