remoteRF-server 1.4.7__tar.gz → 1.4.9__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 (189) hide show
  1. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/PKG-INFO +1 -1
  2. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/pyproject.toml +1 -1
  3. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/global_onboarding.py +8 -5
  4. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/startup_check.py +5 -2
  5. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/user_group_cli.py +3 -0
  6. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server.egg-info/PKG-INFO +1 -1
  7. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_global_onboarding.py +1 -1
  8. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_startup_check.py +11 -0
  9. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/LICENSE +0 -0
  10. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/README.md +0 -0
  11. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/setup.cfg +0 -0
  12. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/__init__.py +0 -0
  13. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/__init__.py +0 -0
  14. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/grpc/__init__.py +0 -0
  15. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/grpc/deployment_capabilities.proto +0 -0
  16. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/grpc/deployment_capabilities_pb2.py +0 -0
  17. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/grpc/deployment_capabilities_pb2_grpc.py +0 -0
  18. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/grpc/federation.proto +0 -0
  19. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/grpc/federation_pb2.py +0 -0
  20. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/grpc/federation_pb2_grpc.py +0 -0
  21. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/grpc/grpc.proto +0 -0
  22. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/grpc/grpc_host.proto +0 -0
  23. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/grpc/grpc_host_pb2.py +0 -0
  24. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/grpc/grpc_host_pb2_grpc.py +0 -0
  25. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/grpc/grpc_pb2.py +0 -0
  26. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/grpc/grpc_pb2_grpc.py +0 -0
  27. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/grpc/v2_codec.py +0 -0
  28. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/idl/__init__.py +0 -0
  29. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/idl/device_schema.py +0 -0
  30. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/idl/pluto_mimo_schema.py +0 -0
  31. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/idl/pluto_schema.py +0 -0
  32. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/idl/schema.py +0 -0
  33. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/idl/v2.py +0 -0
  34. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/utils/__init__.py +0 -0
  35. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/utils/ansi_codes.py +0 -0
  36. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/utils/api_token.py +0 -0
  37. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/utils/db_connection.py +0 -0
  38. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/utils/db_location.py +0 -0
  39. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/utils/list_string.py +0 -0
  40. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/utils/panel.py +0 -0
  41. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/common/utils/process_arg.py +0 -0
  42. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/__init__.py +0 -0
  43. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/adalm_pluto/__init__.py +0 -0
  44. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/adalm_pluto/pluto_diag.py +0 -0
  45. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/adalm_pluto/pluto_mimo_schema.py +0 -0
  46. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/adalm_pluto/pluto_remote_server.py +0 -0
  47. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/adalm_pluto/pluto_schema.py +0 -0
  48. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/adalm_pluto/poe.py +0 -0
  49. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/bluetooth_diag.py +0 -0
  50. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/gps_diag.py +0 -0
  51. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/hackrf/__init__.py +0 -0
  52. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/hackrf/hackrf_schema.py +0 -0
  53. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/rtl_sdr/__init__.py +0 -0
  54. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/rtl_sdr/rtl_sdr_diag.py +0 -0
  55. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/rtl_sdr/rtl_sdr_schema.py +0 -0
  56. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/ti_mmwave/__init__.py +0 -0
  57. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/ti_mmwave/ti_mmwave_schema.py +0 -0
  58. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/usrp/__init__.py +0 -0
  59. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/usrp/policy.py +0 -0
  60. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/usrp/profiles.py +0 -0
  61. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/usrp/uhd_manifest.py +0 -0
  62. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/usrp/usrp_diag.py +0 -0
  63. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/usrp/usrp_schema.py +0 -0
  64. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/usrp_phaser/__init__.py +0 -0
  65. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/drivers/usrp_phaser/usrp_phaser_schema.py +0 -0
  66. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/host/__init__.py +0 -0
  67. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/host/host_auth_token.py +0 -0
  68. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/host/host_directory_store.py +0 -0
  69. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/host/host_tunnel_server.py +0 -0
  70. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/__init__.py +0 -0
  71. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/acc_perms.py +0 -0
  72. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/cert_provider.py +0 -0
  73. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/commands.py +0 -0
  74. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/console.py +0 -0
  75. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/control.py +0 -0
  76. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/deployment/__init__.py +0 -0
  77. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/deployment/capabilities.py +0 -0
  78. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/device_manager.py +0 -0
  79. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/diag.py +0 -0
  80. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/direct_path.py +0 -0
  81. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/dynamic_v2.py +0 -0
  82. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/dynamic_v2_bridge.py +0 -0
  83. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/federation/__init__.py +0 -0
  84. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/federation/admin.py +0 -0
  85. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/federation/cli.py +0 -0
  86. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/federation/cluster.py +0 -0
  87. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/federation/contracts.py +0 -0
  88. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/federation/destination.py +0 -0
  89. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/federation/devices.py +0 -0
  90. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/federation/enrollment.py +0 -0
  91. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/federation/global_home.py +0 -0
  92. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/federation/home.py +0 -0
  93. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/federation/home_devices.py +0 -0
  94. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/federation/identity.py +0 -0
  95. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/federation/legacy_state.py +0 -0
  96. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/federation/migrations.py +0 -0
  97. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/federation/peers.py +0 -0
  98. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/federation/permissions.py +0 -0
  99. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/federation/principals.py +0 -0
  100. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/federation/runtime.py +0 -0
  101. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/federation/trust.py +0 -0
  102. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/grpc_server.py +0 -0
  103. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/host_dynamic_v2.py +0 -0
  104. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/reservation.py +0 -0
  105. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/rpc_manager.py +0 -0
  106. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/user_group_handler.py +0 -0
  107. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/server/v2_errors.py +0 -0
  108. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/serverrf_cli.py +0 -0
  109. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/tools/__init__.py +0 -0
  110. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/tools/gen_certs.py +0 -0
  111. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/tools/gist_status.py +0 -0
  112. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/tools/gist_status_testing.py +0 -0
  113. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server/tools/introspect_uhd.py +0 -0
  114. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server.egg-info/SOURCES.txt +0 -0
  115. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server.egg-info/dependency_links.txt +0 -0
  116. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server.egg-info/entry_points.txt +0 -0
  117. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server.egg-info/requires.txt +0 -0
  118. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/src/remoteRF_server.egg-info/top_level.txt +0 -0
  119. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_account_hardening.py +0 -0
  120. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_account_names.py +0 -0
  121. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_account_removal.py +0 -0
  122. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_activity_log.py +0 -0
  123. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_availability.py +0 -0
  124. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_bind_host.py +0 -0
  125. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_cert_provider.py +0 -0
  126. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_client_sessions.py +0 -0
  127. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_cluster.py +0 -0
  128. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_commands.py +0 -0
  129. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_console.py +0 -0
  130. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_contrib_drivers.py +0 -0
  131. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_default_rtl_sdr_schema.py +0 -0
  132. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_default_usrp_schema.py +0 -0
  133. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_deployment_capabilities.py +0 -0
  134. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_detached_device_rpc.py +0 -0
  135. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_device_handles.py +0 -0
  136. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_device_init.py +0 -0
  137. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_devices_add_wizard.py +0 -0
  138. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_devices_list.py +0 -0
  139. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_diag.py +0 -0
  140. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_direct_fixed_port.py +0 -0
  141. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_direct_path_server.py +0 -0
  142. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_dynamic_v2.py +0 -0
  143. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_federated_direct_path.py +0 -0
  144. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_federated_dynamic_v2.py +0 -0
  145. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_federation_edges.py +0 -0
  146. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_first_run.py +0 -0
  147. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_gate_d_contracts.py +0 -0
  148. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_gate_e_federation.py +0 -0
  149. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_gate_e_proto.py +0 -0
  150. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_gate_f_enrollment.py +0 -0
  151. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_gate_g1_logging.py +0 -0
  152. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_gate_g_permissions.py +0 -0
  153. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_gate_h_devices.py +0 -0
  154. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_gate_i_direct_path.py +0 -0
  155. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_gen_certs.py +0 -0
  156. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_global_accounts_migration.py +0 -0
  157. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_global_home.py +0 -0
  158. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_global_v1_disposal.py +0 -0
  159. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_hackrf_schema.py +0 -0
  160. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_home_device_plane.py +0 -0
  161. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_host_directory_store.py +0 -0
  162. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_host_dynamic_v2.py +0 -0
  163. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_idl_schema.py +0 -0
  164. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_panel.py +0 -0
  165. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_peer_transport.py +0 -0
  166. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_pluto_compat.py +0 -0
  167. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_pluto_poe.py +0 -0
  168. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_process_arg.py +0 -0
  169. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_reservation_handoff.py +0 -0
  170. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_reservation_policy_b.py +0 -0
  171. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_reservation_timestamps.py +0 -0
  172. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_rpc_manager_batch.py +0 -0
  173. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_rpc_manager_calln.py +0 -0
  174. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_rpc_manager_rx_n.py +0 -0
  175. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_rtl_sdr_schema.py +0 -0
  176. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_soak_federation.py +0 -0
  177. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_status_push.py +0 -0
  178. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_ti_mmwave_hardware.py +0 -0
  179. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_ti_mmwave_schema.py +0 -0
  180. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_user_group_cli.py +0 -0
  181. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_usrp_b205mini_uhd410_hardware.py +0 -0
  182. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_usrp_client_server_hardware.py +0 -0
  183. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_usrp_client_server_localhost.py +0 -0
  184. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_usrp_n210_client_server_hardware.py +0 -0
  185. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_usrp_preload.py +0 -0
  186. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_usrp_profiles.py +0 -0
  187. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_usrp_remoterf_rx_hardware.py +0 -0
  188. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_usrp_uhd410_hardware.py +0 -0
  189. {remoterf_server-1.4.7 → remoterf_server-1.4.9}/tests/test_wipe.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remoteRF-server
3
- Version: 1.4.7
3
+ Version: 1.4.9
4
4
  Summary: RemoteRF server-side control package
5
5
  License: GPL-3.0-or-later
6
6
  Classifier: Programming Language :: Python :: 3
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "remoteRF-server"
7
- version = "1.4.7"
7
+ version = "1.4.9"
8
8
  description = "RemoteRF server-side control package"
9
9
  license = { text = "GPL-3.0-or-later" }
10
10
  requires-python = ">=3.10"
@@ -179,14 +179,17 @@ def account_name(username: str) -> str:
179
179
  def invite(code_name: str, *, lan_only: bool = False) -> str:
180
180
  """What to hand a new user: the form `remoterf --register` accepts.
181
181
 
182
- On a live Global deployment that is `<public hostname>/<code>`, which the
183
- client resolves to this server from anywhere. A LAN-only group's code (or
182
+ On a live Global deployment that is `<deployment>/<code>` (e.g. `ucla/AB12C`),
183
+ which the client expands to `<deployment>.global.remoterf.net` from anywhere;
184
+ a lab on its own domain keeps the full `<hostname>/<code>`. A LAN-only group's code (or
184
185
  a deployment that is not on Global) is the bare code, entered after
185
186
  `remoterf -c -a <lan address>`.
186
187
  """
187
- if state() == "active" and not lan_only and hostname():
188
- return f"{hostname()}/{code_name}"
189
- return code_name
188
+ host = hostname() if state() == "active" and not lan_only else None
189
+ if not host:
190
+ return code_name
191
+ slug, _, domain = host.partition(".")
192
+ return f"{slug if domain == 'global.remoterf.net' else host}/{code_name}"
190
193
 
191
194
 
192
195
  # -----------------------------
@@ -178,8 +178,11 @@ def _wait(display: _Display, fut: Future, until: float, text):
178
178
  def _new_log(cfg_dir: Path, prefix: str = "startup") -> Path:
179
179
  logs = cfg_dir / "logs"
180
180
  logs.mkdir(parents=True, exist_ok=True)
181
- for old in sorted(logs.glob(f"{prefix}-*.log"))[: -(KEEP_LOGS - 1)]:
182
- old.unlink(missing_ok=True)
181
+ # A run's .log/.json/.txt share a stem: keep the newest runs whole.
182
+ stems = sorted({path.name.split(".")[0] for path in logs.glob(f"{prefix}-*")})
183
+ for stem in stems[: -(KEEP_LOGS - 1)]:
184
+ for old in logs.glob(f"{stem}.*"):
185
+ old.unlink(missing_ok=True)
183
186
  return logs / f"{prefix}-{datetime.now(timezone.utc).strftime('%Y%m%dT%H%M%SZ')}.log"
184
187
 
185
188
 
@@ -187,6 +187,9 @@ def make_user_group_local(session) -> None:
187
187
  lan_only = not _prompt_yes_no("Reachable from outside your network (via Global)? (Y/n): ", default_no=False)
188
188
 
189
189
  public = not lan_only and _prompt_yes_no("Public: open to anyone on RemoteRF Global? (y/N): ", default_no=True)
190
+ if public:
191
+ public = _prompt_yes_no("Are you sure? Anyone with a RemoteRF Global account, and the users of every lab in the "
192
+ "public cluster, can then see and reserve this group's devices. (Y/n): ", default_no=False)
190
193
  partners = [name for name in _clusters_here() if name != "global"] if not lan_only else []
191
194
  if partners:
192
195
  raw = _prompt_str(f"Also share with partner clusters ({', '.join(partners)}; comma-separated, "
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remoteRF-server
3
- Version: 1.4.7
3
+ Version: 1.4.9
4
4
  Summary: RemoteRF server-side control package
5
5
  License: GPL-3.0-or-later
6
6
  Classifier: Programming Language :: Python :: 3
@@ -708,7 +708,7 @@ class InviteTests(unittest.TestCase):
708
708
 
709
709
  def test_live_global_deployment_hands_out_the_full_form(self):
710
710
  g.update(GLOBAL_CONSENT="yes", GLOBAL_STATE="active", GLOBAL_FINAL_NAME="ucla-dev0")
711
- self.assertEqual(g.invite("RERGSOQ5"), "ucla-dev0.global.remoterf.net/RERGSOQ5")
711
+ self.assertEqual(g.invite("RERGSOQ5"), "ucla-dev0/RERGSOQ5")
712
712
  # LAN-only groups never get a Global invite: it would not work there.
713
713
  self.assertEqual(g.invite("RERGSOQ5", lan_only=True), "RERGSOQ5")
714
714
 
@@ -207,3 +207,14 @@ def test_tty_spinner_redraws_in_place():
207
207
  os.close(master)
208
208
  assert "\r\x1b[2K" in text and "testing…" in text and "operational" in text
209
209
  assert text.index("testing…") < text.rindex("\r\x1b[2K") < text.index("✓")
210
+
211
+
212
+ def test_diag_reports_rotate_with_their_log(tmp_path):
213
+ logs = tmp_path / "logs"
214
+ logs.mkdir()
215
+ for i in range(12):
216
+ for ext in ("log", "json", "txt"):
217
+ (logs / f"diag-20260101T0000{i:02d}Z.{ext}").write_text("x")
218
+ sc._new_log(tmp_path, prefix="diag")
219
+ stems = {p.name.split(".")[0] for p in logs.glob("diag-*")}
220
+ assert len(stems) == sc.KEEP_LOGS - 1 and len(list(logs.glob("diag-*"))) == 3 * (sc.KEEP_LOGS - 1)
File without changes