RemoteRF 2.6.0__tar.gz → 2.6.2__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 (106) hide show
  1. {remoterf-2.6.0/src/remoterf.egg-info → remoterf-2.6.2}/PKG-INFO +1 -1
  2. {remoterf-2.6.0 → remoterf-2.6.2}/pyproject.toml +1 -1
  3. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/core/app.py +8 -4
  4. {remoterf-2.6.0 → remoterf-2.6.2/src/remoterf.egg-info}/PKG-INFO +1 -1
  5. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_device_routes.py +1 -1
  6. {remoterf-2.6.0 → remoterf-2.6.2}/LICENSE +0 -0
  7. {remoterf-2.6.0 → remoterf-2.6.2}/README.md +0 -0
  8. {remoterf-2.6.0 → remoterf-2.6.2}/setup.cfg +0 -0
  9. {remoterf-2.6.0 → remoterf-2.6.2}/setup.py +0 -0
  10. {remoterf-2.6.0 → remoterf-2.6.2}/src/_remoterf_alias.py +0 -0
  11. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/__init__.py +0 -0
  12. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/common/__init__.py +0 -0
  13. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/common/grpc/__init__.py +0 -0
  14. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/common/grpc/deployment_capabilities.proto +0 -0
  15. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/common/grpc/deployment_capabilities_pb2.py +0 -0
  16. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/common/grpc/deployment_capabilities_pb2_grpc.py +0 -0
  17. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/common/grpc/grpc.proto +0 -0
  18. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/common/grpc/grpc_pb2.py +0 -0
  19. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/common/grpc/grpc_pb2_grpc.py +0 -0
  20. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/common/grpc/v2_codec.py +0 -0
  21. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/common/tos_notice.txt +0 -0
  22. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/common/utils/__init__.py +0 -0
  23. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/common/utils/ansi_codes.py +0 -0
  24. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/common/utils/api_token.py +0 -0
  25. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/common/utils/banner.py +0 -0
  26. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/common/utils/list_string.py +0 -0
  27. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/common/utils/process_arg.py +0 -0
  28. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/config/__init__.py +0 -0
  29. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/config/cert_fetcher.py +0 -0
  30. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/config/config.py +0 -0
  31. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/core/__init__.py +0 -0
  32. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/core/acc_login.py +0 -0
  33. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/core/availability.py +0 -0
  34. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/core/banner_note.txt +0 -0
  35. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/core/direct_path.py +0 -0
  36. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/core/dynamic_v2_transport.py +0 -0
  37. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/core/grpc_acc.py +0 -0
  38. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/core/grpc_client.py +0 -0
  39. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/core/secure_channel.py +0 -0
  40. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/core/v2_errors.py +0 -0
  41. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/deployment/__init__.py +0 -0
  42. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/deployment/backend.py +0 -0
  43. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/deployment/direct.py +0 -0
  44. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/deployment/homes.py +0 -0
  45. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/deployment/http.py +0 -0
  46. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/deployment/state.py +0 -0
  47. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/__init__.py +0 -0
  48. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/_virtual.py +0 -0
  49. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/adalm_pluto/__init__.py +0 -0
  50. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/adalm_pluto/adalm_pluto_remote.py +0 -0
  51. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/dynamic_device.py +0 -0
  52. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/dynamic_v2.py +0 -0
  53. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/hackrf/__init__.py +0 -0
  54. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/hackrf/hackrf_remote.py +0 -0
  55. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/rtl_sdr/__init__.py +0 -0
  56. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/rtl_sdr/rtl_sdr_remote.py +0 -0
  57. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/sim_sdr/__init__.py +0 -0
  58. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/sim_sdr/sim_sdr_remote.py +0 -0
  59. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/support/__init__.py +0 -0
  60. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/support/ti_mmwave.py +0 -0
  61. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/support/uhd.py +0 -0
  62. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/support/uhd_dsp.py +0 -0
  63. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/support/uhd_v2.py +0 -0
  64. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/ti_mmwave/__init__.py +0 -0
  65. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/ti_mmwave/ti_mmwave_remote.py +0 -0
  66. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/usrp/__init__.py +0 -0
  67. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/usrp/usrp_remote.py +0 -0
  68. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/drivers/usrp/usrp_remote.pyi +0 -0
  69. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/remoterf_cli.py +0 -0
  70. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf/version.py +0 -0
  71. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf.egg-info/SOURCES.txt +0 -0
  72. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf.egg-info/dependency_links.txt +0 -0
  73. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf.egg-info/entry_points.txt +0 -0
  74. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf.egg-info/requires.txt +0 -0
  75. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf.egg-info/top_level.txt +0 -0
  76. {remoterf-2.6.0 → remoterf-2.6.2}/src/remoterf.py +0 -0
  77. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_banner.py +0 -0
  78. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_batch.py +0 -0
  79. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_bundled_drivers.py +0 -0
  80. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_cli_login_fresh.py +0 -0
  81. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_config_address.py +0 -0
  82. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_deployment_accounts.py +0 -0
  83. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_devices_api.py +0 -0
  84. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_direct_path_fixed.py +0 -0
  85. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_direct_path_global.py +0 -0
  86. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_direct_path_partner.py +0 -0
  87. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_direct_path_race.py +0 -0
  88. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_dynamic_device_codegen.py +0 -0
  89. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_dynamic_v2.py +0 -0
  90. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_federated_devices.py +0 -0
  91. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_fetch_idl_fallback.py +0 -0
  92. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_finish_prompt.py +0 -0
  93. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_gate_i_direct_path.py +0 -0
  94. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_grpc_client_target.py +0 -0
  95. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_homes.py +0 -0
  96. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_native_account_credentials.py +0 -0
  97. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_native_devices.py +0 -0
  98. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_old_import_name.py +0 -0
  99. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_partner_dynamic_v2.py +0 -0
  100. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_pluto_virtual.py +0 -0
  101. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_process_arg.py +0 -0
  102. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_relay_paging.py +0 -0
  103. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_remoterf_cli.py +0 -0
  104. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_rx_readahead.py +0 -0
  105. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_ti_mmwave.py +0 -0
  106. {remoterf-2.6.0 → remoterf-2.6.2}/tests/test_upgrade_rescue.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remoterf
3
- Version: 2.6.0
3
+ Version: 2.6.2
4
4
  Summary: A python API to remotely access signal centric hardware. Client-side only! Courtesy of Wireless Lab @ UCLA & Prof. Ian Roberts.
5
5
  Author-email: Ethan Ge <ethoGalaxy@gmail.com>
6
6
  License-Expression: GPL-3.0-or-later
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "remoterf"
7
- version = "2.6.0"
7
+ version = "2.6.2"
8
8
  description = "A python API to remotely access signal centric hardware. Client-side only! Courtesy of Wireless Lab @ UCLA & Prof. Ian Roberts."
9
9
  readme = "README.md"
10
10
  license = "GPL-3.0-or-later"
@@ -567,7 +567,7 @@ def _federated_devices():
567
567
  deployment = dev["deployment_name"]
568
568
  printf(f" @{deployment}", (Sty.BOLD, Sty.MAGENTA))
569
569
  state = "online" if dev["online"] else "offline"
570
- printf(" Device Name: ", Sty.GRAY, f"{dev['display_name']}{_handle_tag(dev)}", Sty.DEFAULT, f" ({dev['device_type'] or 'unknown'}, {state})", Sty.GRAY)
570
+ printf(f" ({state}) ", Sty.GREEN if dev["online"] else Sty.GRAY, f"{dev['display_name']}{_handle_tag(dev)}", Sty.DEFAULT)
571
571
  if data.get("incomplete"):
572
572
  printf(f"{data['omitted_count']} more deployment(s) were not queried.", Sty.WARNING)
573
573
  return data
@@ -939,8 +939,9 @@ def _print_native_devices(rows, *, numbered=False):
939
939
  lab = row["lab"]
940
940
  printf(f" @{lab}", (Sty.BOLD, Sty.MAGENTA))
941
941
  prefix = (f"{index}. ", Sty.CYAN) if numbered else ()
942
- printf(*prefix, " Device Name: " if not numbered else " Device Name: ", Sty.GRAY,
943
- row["name"], Sty.DEFAULT, f" ({row['state']})" if row["state"] else "", Sty.GRAY)
942
+ state = row["state"] or ""
943
+ printf(*prefix, (" " if not numbered else "") + (f"({state}) " if state else ""),
944
+ Sty.GREEN if state.startswith("online") else Sty.GRAY, row["name"], Sty.DEFAULT)
944
945
 
945
946
 
946
947
  def devices():
@@ -1209,13 +1210,16 @@ def enroll(code=None):
1209
1210
  # Codes are handed out as <lab>/<code>; the lab part only says where to
1210
1211
  # register. Here we are already logged in somewhere, so strip it -- and
1211
1212
  # say so if it names a different lab than this one.
1213
+ typed = code
1212
1214
  try:
1213
1215
  from remoterf.deployment import homes
1214
1216
 
1215
1217
  host, code = homes.parse_code(code)
1216
1218
  except Exception: # noqa: BLE001 - not in that form; send as typed
1217
1219
  host = None
1218
- if host and home_name and homes.home_name_for(host) != home_name:
1220
+ if account.is_https_home:
1221
+ code = typed # Global enrols at the lab the invite names, so it needs the whole invite
1222
+ elif host and home_name and homes.home_name_for(host) != home_name:
1219
1223
  printf(f"That code is for {host}, not {home_name}. Register there with: remoterf -r", Sty.WARNING)
1220
1224
  return False
1221
1225
  account.enrollment_code = code
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remoterf
3
- Version: 2.6.0
3
+ Version: 2.6.2
4
4
  Summary: A python API to remotely access signal centric hardware. Client-side only! Courtesy of Wireless Lab @ UCLA & Prof. Ian Roberts.
5
5
  Author-email: Ethan Ge <ethoGalaxy@gmail.com>
6
6
  License-Expression: GPL-3.0-or-later
@@ -618,7 +618,7 @@ def test_resdev_n_lists_numbered_devices(monkeypatch):
618
618
  lines = _shown(monkeypatch, client_app)
619
619
  account, _ = _native_shell(monkeypatch, client_app, ["1", "2026-01-01 10:00", "2026-01-01 11:00"])
620
620
  client_app.reserve()
621
- assert "1. Device Name: Pluto SDR (OTA) [PlutoA] (online)" in lines
621
+ assert "1. (online) Pluto SDR (OTA) [PlutoA]" in lines
622
622
  assert _row(lines, "Device", "handle", "PlutoA@ucla")
623
623
  assert account.reserve_device.call_args.args[0] == 3
624
624
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes