remoteRF-server 1.0.5__tar.gz → 1.0.6__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 (73) hide show
  1. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/PKG-INFO +10 -1
  2. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/README.md +9 -0
  3. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/pyproject.toml +1 -1
  4. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/drivers/usrp/usrp_schema.py +9 -1
  5. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/serverrf_cli.py +5 -0
  6. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server.egg-info/PKG-INFO +10 -1
  7. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/tests/test_dynamic_v2.py +14 -0
  8. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/setup.cfg +0 -0
  9. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/__init__.py +0 -0
  10. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/__init__.py +0 -0
  11. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/grpc/__init__.py +0 -0
  12. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/grpc/grpc_host_pb2.py +0 -0
  13. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/grpc/grpc_host_pb2_grpc.py +0 -0
  14. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/grpc/grpc_pb2.py +0 -0
  15. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/grpc/grpc_pb2_grpc.py +0 -0
  16. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/grpc/v2_codec.py +0 -0
  17. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/idl/__init__.py +0 -0
  18. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/idl/device_schema.py +0 -0
  19. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/idl/pluto_mimo_schema.py +0 -0
  20. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/idl/pluto_schema.py +0 -0
  21. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/idl/schema.py +0 -0
  22. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/idl/v2.py +0 -0
  23. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/utils/__init__.py +0 -0
  24. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/utils/ansi_codes.py +0 -0
  25. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/utils/api_token.py +0 -0
  26. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/utils/db_connection.py +0 -0
  27. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/utils/db_location.py +0 -0
  28. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/utils/list_string.py +0 -0
  29. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/common/utils/process_arg.py +0 -0
  30. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/drivers/__init__.py +0 -0
  31. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/drivers/adalm_pluto/__init__.py +0 -0
  32. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/drivers/adalm_pluto/pluto_mimo_schema.py +0 -0
  33. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/drivers/adalm_pluto/pluto_remote_server.py +0 -0
  34. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/drivers/adalm_pluto/pluto_schema.py +0 -0
  35. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/drivers/usrp/__init__.py +0 -0
  36. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/drivers/usrp/policy.py +0 -0
  37. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/drivers/usrp/uhd_manifest.py +0 -0
  38. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/host/__init__.py +0 -0
  39. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/host/host_auth_token.py +0 -0
  40. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/host/host_directory_store.py +0 -0
  41. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/host/host_tunnel_server.py +0 -0
  42. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/server/__init__.py +0 -0
  43. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/server/acc_perms.py +0 -0
  44. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/server/cert_provider.py +0 -0
  45. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/server/device_manager.py +0 -0
  46. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/server/dynamic_v2.py +0 -0
  47. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/server/grpc_server.py +0 -0
  48. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/server/reservation.py +0 -0
  49. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/server/rpc_manager.py +0 -0
  50. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/server/user_group_cli.py +0 -0
  51. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/server/user_group_handler.py +0 -0
  52. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/server/v2_errors.py +0 -0
  53. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/tools/__init__.py +0 -0
  54. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/tools/gen_certs.py +0 -0
  55. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/tools/gist_status.py +0 -0
  56. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/tools/gist_status_testing.py +0 -0
  57. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server/tools/introspect_uhd.py +0 -0
  58. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server.egg-info/SOURCES.txt +0 -0
  59. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server.egg-info/dependency_links.txt +0 -0
  60. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server.egg-info/entry_points.txt +0 -0
  61. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server.egg-info/requires.txt +0 -0
  62. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/src/remoteRF_server.egg-info/top_level.txt +0 -0
  63. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/tests/test_cert_provider.py +0 -0
  64. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/tests/test_default_usrp_schema.py +0 -0
  65. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/tests/test_idl_schema.py +0 -0
  66. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/tests/test_pluto_compat.py +0 -0
  67. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/tests/test_process_arg.py +0 -0
  68. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/tests/test_reservation_timestamps.py +0 -0
  69. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/tests/test_rpc_manager_calln.py +0 -0
  70. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/tests/test_usrp_client_server_hardware.py +0 -0
  71. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/tests/test_usrp_client_server_localhost.py +0 -0
  72. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/tests/test_usrp_remoterf_rx_hardware.py +0 -0
  73. {remoterf_server-1.0.5 → remoterf_server-1.0.6}/tests/test_usrp_uhd410_hardware.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remoteRF-server
3
- Version: 1.0.5
3
+ Version: 1.0.6
4
4
  Summary: RemoteRF server-side control package
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -334,6 +334,15 @@ separate policy file. This includes transmit controls, transmit streaming,
334
334
  GPIO/register methods, and property-tree writes. `usrp_policy.yml` is not read
335
335
  or required by the current server.
336
336
 
337
+ RemoteRF sets `UHD_LOG_CONSOLE_LEVEL=off` before importing UHD so native UHD
338
+ messages do not overwrite the interactive `serverrf` prompt. To temporarily
339
+ restore UHD diagnostics, set a level such as `warning`, `info`, or `debug`
340
+ before starting the server:
341
+
342
+ ```bash
343
+ UHD_LOG_CONSOLE_LEVEL=warning serverrf -s
344
+ ```
345
+
337
346
  On every qualified target, generate the introspection record and enforce the
338
347
  pinned API gate:
339
348
 
@@ -319,6 +319,15 @@ separate policy file. This includes transmit controls, transmit streaming,
319
319
  GPIO/register methods, and property-tree writes. `usrp_policy.yml` is not read
320
320
  or required by the current server.
321
321
 
322
+ RemoteRF sets `UHD_LOG_CONSOLE_LEVEL=off` before importing UHD so native UHD
323
+ messages do not overwrite the interactive `serverrf` prompt. To temporarily
324
+ restore UHD diagnostics, set a level such as `warning`, `info`, or `debug`
325
+ before starting the server:
326
+
327
+ ```bash
328
+ UHD_LOG_CONSOLE_LEVEL=warning serverrf -s
329
+ ```
330
+
322
331
  On every qualified target, generate the introspection record and enforce the
323
332
  pinned API gate:
324
333
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "remoteRF-server"
7
- version = "1.0.5"
7
+ version = "1.0.6"
8
8
  description = "RemoteRF server-side control package"
9
9
  requires-python = ">=3.10"
10
10
  dependencies = [
@@ -6,6 +6,15 @@ from remoteRF_server.drivers.usrp.uhd_manifest import build_usrp_schema_v2
6
6
  c = idl_client
7
7
 
8
8
  import itertools
9
+ import os
10
+
11
+
12
+ def _configure_uhd_console_logging():
13
+ """Keep native UHD logs out of the interactive server console by default."""
14
+ os.environ.setdefault("UHD_LOG_CONSOLE_LEVEL", "off")
15
+
16
+
17
+ _configure_uhd_console_logging()
9
18
 
10
19
  try:
11
20
  import uhd
@@ -77,7 +86,6 @@ def _connect_usrp(args=None, serial=None, addr=None, **kwargs):
77
86
 
78
87
  args = _device_args(args)
79
88
  dev = uhd_module.usrp.MultiUSRP(args)
80
- print(f"Connected to USRP with args={args!r}")
81
89
  return dev
82
90
 
83
91
 
@@ -337,6 +337,11 @@ def _serve(*, headless: bool = False) -> int:
337
337
  if not _ensure_tos_acknowledged():
338
338
  return 1
339
339
 
340
+ # UHD writes native log messages to stderr/std::clog. Set this before the
341
+ # server imports device drivers so those messages cannot corrupt the
342
+ # interactive prompt. An explicit administrator setting still wins.
343
+ os.environ.setdefault("UHD_LOG_CONSOLE_LEVEL", "off")
344
+
340
345
  from remoteRF_server.server.grpc_server import (
341
346
  headless_main,
342
347
  main as interactive_main,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remoteRF-server
3
- Version: 1.0.5
3
+ Version: 1.0.6
4
4
  Summary: RemoteRF server-side control package
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -334,6 +334,15 @@ separate policy file. This includes transmit controls, transmit streaming,
334
334
  GPIO/register methods, and property-tree writes. `usrp_policy.yml` is not read
335
335
  or required by the current server.
336
336
 
337
+ RemoteRF sets `UHD_LOG_CONSOLE_LEVEL=off` before importing UHD so native UHD
338
+ messages do not overwrite the interactive `serverrf` prompt. To temporarily
339
+ restore UHD diagnostics, set a level such as `warning`, `info`, or `debug`
340
+ before starting the server:
341
+
342
+ ```bash
343
+ UHD_LOG_CONSOLE_LEVEL=warning serverrf -s
344
+ ```
345
+
337
346
  On every qualified target, generate the introspection record and enforce the
338
347
  pinned API gate:
339
348
 
@@ -14,6 +14,7 @@ from remoteRF_server.common.grpc import grpc_pb2
14
14
  from remoteRF_server.common.grpc.v2_codec import decode_value, encode_value
15
15
  from remoteRF_server.common.idl.v2 import validate_schema
16
16
  from remoteRF_server.drivers.usrp.policy import USRPPolicy
17
+ from remoteRF_server.drivers.usrp.usrp_schema import _configure_uhd_console_logging
17
18
  from remoteRF_server.drivers.usrp.uhd_manifest import (
18
19
  MULTIUSRP_METHODS,
19
20
  TARGET_UHD_VERSION,
@@ -138,6 +139,19 @@ class FakeInventorySchema:
138
139
 
139
140
 
140
141
  class DynamicV2ServerTests(unittest.TestCase):
142
+ def test_usrp_console_logging_is_off_by_default_but_admin_override_wins(self):
143
+ with patch.dict(os.environ, {}, clear=True):
144
+ _configure_uhd_console_logging()
145
+ self.assertEqual(os.environ["UHD_LOG_CONSOLE_LEVEL"], "off")
146
+
147
+ with patch.dict(
148
+ os.environ,
149
+ {"UHD_LOG_CONSOLE_LEVEL": "warning"},
150
+ clear=True,
151
+ ):
152
+ _configure_uhd_console_logging()
153
+ self.assertEqual(os.environ["UHD_LOG_CONSOLE_LEVEL"], "warning")
154
+
141
155
  def test_usrp2901_manifest_is_valid_and_has_no_deferred_reachable_api(self):
142
156
  schema = build_usrp_schema_v2()
143
157
  validate_schema(schema)