remoteRF-server 0.1.84__tar.gz → 0.1.86__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.
Files changed (42) hide show
  1. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/PKG-INFO +1 -1
  2. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/pyproject.toml +1 -1
  3. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/host/host_tunnel_server.py +40 -2
  4. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/server/device_manager.py +1 -2
  5. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/server/grpc_server.py +8 -11
  6. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server.egg-info/PKG-INFO +1 -1
  7. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/README.md +0 -0
  8. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/setup.cfg +0 -0
  9. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/__init__.py +0 -0
  10. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/common/__init__.py +0 -0
  11. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/common/grpc/__init__.py +0 -0
  12. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/common/grpc/grpc_host_pb2.py +0 -0
  13. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/common/grpc/grpc_host_pb2_grpc.py +0 -0
  14. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/common/grpc/grpc_pb2.py +0 -0
  15. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/common/grpc/grpc_pb2_grpc.py +0 -0
  16. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/common/utils/__init__.py +0 -0
  17. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/common/utils/ansi_codes.py +0 -0
  18. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/common/utils/api_token.py +0 -0
  19. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/common/utils/db_connection.py +0 -0
  20. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/common/utils/db_location.py +0 -0
  21. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/common/utils/list_string.py +0 -0
  22. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/common/utils/process_arg.py +0 -0
  23. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/drivers/__init__.py +0 -0
  24. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/drivers/adalm_pluto/__init__.py +0 -0
  25. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/drivers/adalm_pluto/pluto_remote_server.py +0 -0
  26. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/host/__init__.py +0 -0
  27. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/host/host_directory_store.py +0 -0
  28. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/server/__init__.py +0 -0
  29. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/server/acc_perms.py +0 -0
  30. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/server/cert_provider.py +0 -0
  31. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/server/reservation.py +0 -0
  32. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/server/rpc_manager.py +0 -0
  33. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/server/user_group_cli.py +0 -0
  34. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/server/user_group_handler.py +0 -0
  35. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/serverrf_cli.py +0 -0
  36. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/tools/__init__.py +0 -0
  37. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server/tools/gen_certs.py +0 -0
  38. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server.egg-info/SOURCES.txt +0 -0
  39. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server.egg-info/dependency_links.txt +0 -0
  40. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server.egg-info/entry_points.txt +0 -0
  41. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server.egg-info/requires.txt +0 -0
  42. {remoterf_server-0.1.84 → remoterf_server-0.1.86}/src/remoteRF_server.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remoteRF-server
3
- Version: 0.1.84
3
+ Version: 0.1.86
4
4
  Description-Content-Type: text/markdown
5
5
  Requires-Dist: grpcio
6
6
  Requires-Dist: protobuf
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "remoteRF-server"
7
- version = "0.1.84"
7
+ version = "0.1.86"
8
8
  dependencies = [
9
9
  "grpcio",
10
10
  "protobuf",
@@ -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
- reg = registry or HostTunnelRegistry()
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
- TUNNEL_REGISTRY = None
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
@@ -41,8 +41,7 @@ _devices: Dict[int, _DeviceState] = {}
41
41
  # -----------------------------
42
42
 
43
43
  def _get_host_registry():
44
- # host_tunnel_server sets this when the tunnel server starts
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
  """
@@ -37,7 +37,7 @@ from .acc_perms import perms
37
37
  from ..common.utils import *
38
38
  from .device_manager import get_all_devices, get_all_devices_str
39
39
  from .user_group_cli import make_user_group_local, edit_user_group_local, list_user_groups_local, remove_user_group_local, make_enrollment_codes_local, remove_enrollment_code_local, list_enrollment_codes_local, export_user_groups_csv_local, export_enrollment_codes_csv_local
40
- from .user_group_handler import user_group_handler, start_usergroup_cleanup_loo
40
+ from .user_group_handler import user_group_handler, start_usergroup_cleanup_loop
41
41
 
42
42
  from ..host import host_tunnel_server as hts
43
43
  from ..host.host_tunnel_server import HostTunnelRegistry, HostTunnelServicer
@@ -207,7 +207,8 @@ def serve():
207
207
  server_credentials = grpc.ssl_server_credentials(
208
208
  ((private_key, certificate_chain,),))
209
209
 
210
- reg = HostTunnelRegistry()
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 = getattr(hts, "TUNNEL_REGISTRY", None)
391
- if reg is None:
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 = getattr(hts, "TUNNEL_REGISTRY", None)
431
- if reg is None:
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 = getattr(hts, "TUNNEL_REGISTRY", None)
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:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remoteRF-server
3
- Version: 0.1.84
3
+ Version: 0.1.86
4
4
  Description-Content-Type: text/markdown
5
5
  Requires-Dist: grpcio
6
6
  Requires-Dist: protobuf