remoteRF-server 0.1.85__tar.gz → 0.1.87__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/PKG-INFO +1 -1
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/pyproject.toml +1 -1
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/host/host_tunnel_server.py +40 -2
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/server/device_manager.py +19 -9
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/server/grpc_server.py +7 -10
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server.egg-info/PKG-INFO +1 -1
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/README.md +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/setup.cfg +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/__init__.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/__init__.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/grpc/__init__.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/grpc/grpc_host_pb2.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/grpc/grpc_host_pb2_grpc.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/grpc/grpc_pb2.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/grpc/grpc_pb2_grpc.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/utils/__init__.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/utils/ansi_codes.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/utils/api_token.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/utils/db_connection.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/utils/db_location.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/utils/list_string.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/utils/process_arg.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/drivers/__init__.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/drivers/adalm_pluto/__init__.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/drivers/adalm_pluto/pluto_remote_server.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/host/__init__.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/host/host_directory_store.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/server/__init__.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/server/acc_perms.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/server/cert_provider.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/server/reservation.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/server/rpc_manager.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/server/user_group_cli.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/server/user_group_handler.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/serverrf_cli.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/tools/__init__.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/tools/gen_certs.py +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server.egg-info/SOURCES.txt +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server.egg-info/dependency_links.txt +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server.egg-info/entry_points.txt +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server.egg-info/requires.txt +0 -0
- {remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server.egg-info/top_level.txt +0 -0
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/host/host_tunnel_server.py
RENAMED
|
@@ -1258,7 +1258,11 @@ def start_host_tunnel_server(
|
|
|
1258
1258
|
registry: Optional[HostTunnelRegistry] = None,
|
|
1259
1259
|
max_workers: int = 32,
|
|
1260
1260
|
) -> Tuple[grpc.Server, threading.Thread, HostTunnelRegistry]:
|
|
1261
|
-
|
|
1261
|
+
if registry is not None:
|
|
1262
|
+
reg = set_tunnel_registry(registry)
|
|
1263
|
+
else:
|
|
1264
|
+
reg = get_tunnel_registry(create=True)
|
|
1265
|
+
assert reg is not None
|
|
1262
1266
|
|
|
1263
1267
|
options = [
|
|
1264
1268
|
("grpc.max_send_message_length", 100 * 1024 * 1024),
|
|
@@ -1301,4 +1305,38 @@ def start_host_tunnel_server(
|
|
|
1301
1305
|
th.start()
|
|
1302
1306
|
return server, th, reg
|
|
1303
1307
|
|
|
1304
|
-
|
|
1308
|
+
# -----------------------------------------------------------------------------
|
|
1309
|
+
# Singleton registry (process-wide)
|
|
1310
|
+
# -----------------------------------------------------------------------------
|
|
1311
|
+
|
|
1312
|
+
_TUNNEL_REGISTRY_LOCK = threading.Lock()
|
|
1313
|
+
TUNNEL_REGISTRY: Optional["HostTunnelRegistry"] = None
|
|
1314
|
+
|
|
1315
|
+
def get_tunnel_registry(*, create: bool = True) -> Optional["HostTunnelRegistry"]:
|
|
1316
|
+
"""
|
|
1317
|
+
Returns the process-wide HostTunnelRegistry instance.
|
|
1318
|
+
|
|
1319
|
+
IMPORTANT: Import the MODULE (e.g. `import ... as hts`) and access
|
|
1320
|
+
`hts.get_tunnel_registry()` or `hts.TUNNEL_REGISTRY`.
|
|
1321
|
+
|
|
1322
|
+
Avoid `from host_tunnel_server import TUNNEL_REGISTRY` if you ever plan
|
|
1323
|
+
to replace it, because that snapshots the value at import time.
|
|
1324
|
+
"""
|
|
1325
|
+
global TUNNEL_REGISTRY
|
|
1326
|
+
|
|
1327
|
+
if TUNNEL_REGISTRY is not None:
|
|
1328
|
+
return TUNNEL_REGISTRY
|
|
1329
|
+
if not create:
|
|
1330
|
+
return None
|
|
1331
|
+
|
|
1332
|
+
with _TUNNEL_REGISTRY_LOCK:
|
|
1333
|
+
if TUNNEL_REGISTRY is None:
|
|
1334
|
+
TUNNEL_REGISTRY = HostTunnelRegistry()
|
|
1335
|
+
return TUNNEL_REGISTRY
|
|
1336
|
+
|
|
1337
|
+
def set_tunnel_registry(reg: "HostTunnelRegistry") -> "HostTunnelRegistry":
|
|
1338
|
+
"""Force the singleton to a specific instance."""
|
|
1339
|
+
global TUNNEL_REGISTRY
|
|
1340
|
+
with _TUNNEL_REGISTRY_LOCK:
|
|
1341
|
+
TUNNEL_REGISTRY = reg
|
|
1342
|
+
return reg
|
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/server/device_manager.py
RENAMED
|
@@ -41,8 +41,7 @@ _devices: Dict[int, _DeviceState] = {}
|
|
|
41
41
|
# -----------------------------
|
|
42
42
|
|
|
43
43
|
def _get_host_registry():
|
|
44
|
-
|
|
45
|
-
return getattr(hts, "TUNNEL_REGISTRY", None)
|
|
44
|
+
return hts.get_tunnel_registry()
|
|
46
45
|
|
|
47
46
|
def _local_devices_str_snapshot() -> Dict[int, str]:
|
|
48
47
|
"""
|
|
@@ -71,13 +70,6 @@ def _local_devices_str_snapshot() -> Dict[int, str]:
|
|
|
71
70
|
return out
|
|
72
71
|
|
|
73
72
|
def _host_devices_str_snapshot() -> Dict[int, str]:
|
|
74
|
-
"""
|
|
75
|
-
Pull a FRESH host-device directory snapshot every call.
|
|
76
|
-
|
|
77
|
-
Includes:
|
|
78
|
-
- devices on currently connected hosts (online)
|
|
79
|
-
- devices on disconnected hosts that were previously seen/persisted (offline)
|
|
80
|
-
"""
|
|
81
73
|
reg = _get_host_registry()
|
|
82
74
|
if reg is None:
|
|
83
75
|
return {}
|
|
@@ -405,6 +397,24 @@ def get_all_devices_str() -> Dict[int, str]:
|
|
|
405
397
|
# host snapshot (includes online + offline-but-known host devices)
|
|
406
398
|
host_out = _host_devices_str_snapshot()
|
|
407
399
|
|
|
400
|
+
# ---- DEBUG: print full host_out ----
|
|
401
|
+
try:
|
|
402
|
+
from ..host import host_tunnel_server as hts # adjust if your canonical import differs
|
|
403
|
+
reg = hts.get_tunnel_registry(create=False) if hasattr(hts, "get_tunnel_registry") else None
|
|
404
|
+
print("\n[device_manager] host_out dump")
|
|
405
|
+
print(f" hts module: {getattr(hts, '__name__', '<?>')}")
|
|
406
|
+
print(f" registry id: {id(reg) if reg is not None else None}")
|
|
407
|
+
print(f" host_out count: {len(host_out)}")
|
|
408
|
+
|
|
409
|
+
if not host_out:
|
|
410
|
+
print(" (empty)")
|
|
411
|
+
else:
|
|
412
|
+
for gid, s in sorted(host_out.items(), key=lambda kv: int(kv[0])):
|
|
413
|
+
print(f" {gid}: {s}")
|
|
414
|
+
print()
|
|
415
|
+
except Exception as e:
|
|
416
|
+
print(f"[device_manager] host_out dump failed: {e}")
|
|
417
|
+
|
|
408
418
|
# merge with collision handling
|
|
409
419
|
for gid, s in host_out.items():
|
|
410
420
|
if gid in out:
|
|
@@ -207,7 +207,8 @@ def serve():
|
|
|
207
207
|
server_credentials = grpc.ssl_server_credentials(
|
|
208
208
|
((private_key, certificate_chain,),))
|
|
209
209
|
|
|
210
|
-
reg =
|
|
210
|
+
reg = hts.get_tunnel_registry()
|
|
211
|
+
assert reg is not None
|
|
211
212
|
|
|
212
213
|
# publish registry where device_manager expects it
|
|
213
214
|
hts.TUNNEL_REGISTRY = reg
|
|
@@ -387,10 +388,8 @@ def _fmt_ms_ago(ms: int) -> str:
|
|
|
387
388
|
return f"{dt/60_000:.1f}m"
|
|
388
389
|
|
|
389
390
|
def _cmd_hosts_status() -> None:
|
|
390
|
-
reg =
|
|
391
|
-
|
|
392
|
-
printf("Host tunnel registry not initialized yet.", Sty.RED)
|
|
393
|
-
return
|
|
391
|
+
reg = hts.get_tunnel_registry()
|
|
392
|
+
assert reg is not None
|
|
394
393
|
|
|
395
394
|
hosts = reg.list_hosts() # host_id -> HostStatus
|
|
396
395
|
devices = reg.list_devices() # device_id -> DeviceStatus
|
|
@@ -427,10 +426,8 @@ def _cmd_hosts_status() -> None:
|
|
|
427
426
|
)
|
|
428
427
|
|
|
429
428
|
def _cmd_devices_status() -> None:
|
|
430
|
-
reg =
|
|
431
|
-
|
|
432
|
-
printf("Host tunnel registry not initialized yet.", Sty.RED)
|
|
433
|
-
return
|
|
429
|
+
reg = hts.get_tunnel_registry()
|
|
430
|
+
assert reg is not None
|
|
434
431
|
|
|
435
432
|
devices = reg.list_devices()
|
|
436
433
|
printf("Devices (live):", Sty.BOLD)
|
|
@@ -747,7 +744,7 @@ def _cmd_hosts_wipe(*, yes: bool = False) -> None:
|
|
|
747
744
|
return
|
|
748
745
|
|
|
749
746
|
# 2) clear in-memory registry (THIS is what drives `hosts status`)
|
|
750
|
-
reg =
|
|
747
|
+
reg = hts.get_tunnel_registry()
|
|
751
748
|
if reg is None:
|
|
752
749
|
printf("Host tunnel registry not initialized; only persisted wipe attempted.", Sty.GRAY)
|
|
753
750
|
else:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/grpc/__init__.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/grpc/grpc_host_pb2.py
RENAMED
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/grpc/grpc_pb2.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/grpc/grpc_pb2_grpc.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/utils/__init__.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/utils/ansi_codes.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/utils/api_token.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/utils/db_connection.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/utils/db_location.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/utils/list_string.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/common/utils/process_arg.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/host/host_directory_store.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/server/cert_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/server/user_group_cli.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server/server/user_group_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.85 → remoterf_server-0.1.87}/src/remoteRF_server.egg-info/top_level.txt
RENAMED
|
File without changes
|