RemoteRF 2.13.0__tar.gz → 2.13.1__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-2.13.0/src/remoterf.egg-info → remoterf-2.13.1}/PKG-INFO +1 -1
- {remoterf-2.13.0 → remoterf-2.13.1}/pyproject.toml +1 -1
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/deployment/backend.py +3 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/deployment/http.py +2 -1
- {remoterf-2.13.0 → remoterf-2.13.1/src/remoterf.egg-info}/PKG-INFO +1 -1
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_federated_devices.py +31 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/LICENSE +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/README.md +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/setup.cfg +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/setup.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/_remoterf_alias.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/__init__.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/admin.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/agent_cli.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/agent_docs.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/common/__init__.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/common/grpc/__init__.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/common/grpc/deployment_capabilities.proto +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/common/grpc/deployment_capabilities_pb2.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/common/grpc/deployment_capabilities_pb2_grpc.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/common/grpc/grpc.proto +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/common/grpc/grpc_pb2.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/common/grpc/grpc_pb2_grpc.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/common/grpc/v2_codec.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/common/tos_notice.txt +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/common/utils/__init__.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/common/utils/ansi_codes.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/common/utils/api_token.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/common/utils/banner.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/common/utils/list_string.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/common/utils/process_arg.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/config/__init__.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/config/cert_fetcher.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/config/config.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/core/__init__.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/core/acc_login.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/core/app.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/core/availability.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/core/banner_note.txt +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/core/direct_path.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/core/dynamic_v2_transport.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/core/grpc_acc.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/core/grpc_client.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/core/messages.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/core/secure_channel.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/core/v2_errors.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/data/agent_guide.md +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/data/mcp_tools.json +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/deployment/__init__.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/deployment/direct.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/deployment/homes.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/deployment/lanpass.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/deployment/state.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/__init__.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/_virtual.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/adalm_pluto/__init__.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/adalm_pluto/adalm_pluto_remote.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/dynamic_device.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/dynamic_v2.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/hackrf/__init__.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/hackrf/hackrf_remote.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/rtl_sdr/__init__.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/rtl_sdr/rtl_sdr_remote.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/schema_review.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/sim_sdr/__init__.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/sim_sdr/sim_sdr_remote.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/support/__init__.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/support/ti_mmwave.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/support/uhd.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/support/uhd_dsp.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/support/uhd_v2.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/ti_mmwave/__init__.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/ti_mmwave/ti_mmwave_remote.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/usrp/__init__.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/usrp/usrp_remote.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/drivers/usrp/usrp_remote.pyi +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/mcp_server.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/ops.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/remoterf_cli.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/version.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf.egg-info/SOURCES.txt +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf.egg-info/dependency_links.txt +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf.egg-info/entry_points.txt +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf.egg-info/requires.txt +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf.egg-info/top_level.txt +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_agent_cli.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_agent_docs.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_banner.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_batch.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_bundled_drivers.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_cli_login_fresh.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_config_address.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_deployment_accounts.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_device_routes.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_devices_api.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_direct_path_fixed.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_direct_path_global.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_direct_path_partner.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_direct_path_race.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_direct_path_relay.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_dynamic_device_codegen.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_dynamic_v2.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_fetch_idl_fallback.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_finish_prompt.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_gate_i_direct_path.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_grpc_client_target.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_homes.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_lan_fallback.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_mcp_server.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_messages.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_native_account_credentials.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_native_devices.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_old_import_name.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_ops.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_partner_dynamic_v2.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_pluto_virtual.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_process_arg.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_relay_paging.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_remote_admin.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_remoterf_cli.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_rx_readahead.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_schema_review.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_ti_mmwave.py +0 -0
- {remoterf-2.13.0 → remoterf-2.13.1}/tests/test_upgrade_rescue.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: remoterf
|
|
3
|
-
Version: 2.13.
|
|
3
|
+
Version: 2.13.1
|
|
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 <84103791+ethange1@users.noreply.github.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.13.
|
|
7
|
+
version = "2.13.1"
|
|
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"
|
|
@@ -211,6 +211,9 @@ class HttpsJsonAccountBackend(DeploymentAccountBackend):
|
|
|
211
211
|
"POST",
|
|
212
212
|
self.base + "/refresh",
|
|
213
213
|
data={"refresh_token": old["refresh_token"]},
|
|
214
|
+
# Past Caddy's 45 s hold, so a restart answers or 502s (never sent)
|
|
215
|
+
# instead of timing out ambiguously, which clears the saved login.
|
|
216
|
+
overall_timeout=50.0,
|
|
214
217
|
),
|
|
215
218
|
old["subject_id"],
|
|
216
219
|
)
|
|
@@ -74,8 +74,9 @@ class JsonTransport:
|
|
|
74
74
|
headers["Content-Type"] = FRAMED_CONTENT_TYPE
|
|
75
75
|
if access:
|
|
76
76
|
headers["Authorization"] = "Bearer " + access
|
|
77
|
+
# Longer than a Global restart: Caddy holds a request until the new container answers.
|
|
77
78
|
overall_timeout = (
|
|
78
|
-
|
|
79
|
+
20.0 if overall_timeout is None else float(overall_timeout)
|
|
79
80
|
)
|
|
80
81
|
if overall_timeout <= 0 or max_response_bytes <= 0:
|
|
81
82
|
raise ValueError("invalid account operation budget")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: remoterf
|
|
3
|
-
Version: 2.13.
|
|
3
|
+
Version: 2.13.1
|
|
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 <84103791+ethange1@users.noreply.github.com>
|
|
6
6
|
License-Expression: GPL-3.0-or-later
|
|
@@ -183,6 +183,37 @@ def test_refresh_never_posts_a_token_another_process_spent():
|
|
|
183
183
|
assert not transport.request.called and backend.credentials is None
|
|
184
184
|
|
|
185
185
|
|
|
186
|
+
def test_account_calls_outwait_a_global_restart(monkeypatch):
|
|
187
|
+
# Caddy holds a request for up to 45 s while Global restarts: a refresh waits past
|
|
188
|
+
# that (an ambiguous timeout would clear the login), other account calls 20 s.
|
|
189
|
+
from remoterf.deployment import http
|
|
190
|
+
|
|
191
|
+
backend, transport = _backend("ACC:refresh_session")
|
|
192
|
+
backend.credentials = {"access_token": "old", "refresh_token": "r1", "access_expires_at": 0, "subject_id": HOME}
|
|
193
|
+
backend.store.load.return_value = backend.credentials
|
|
194
|
+
transport.request.return_value = {
|
|
195
|
+
"deployment_id": HOME, "subject_id": HOME, "username": "jdoe", "access_token": "new", "refresh_token": "r2",
|
|
196
|
+
"token_type": "Bearer", "access_expires_at": 10**12, "refresh_expires_at": 10**12}
|
|
197
|
+
assert backend._access() == "new"
|
|
198
|
+
assert transport.request.call_args.kwargs["overall_timeout"] == 50.0
|
|
199
|
+
|
|
200
|
+
seen = {}
|
|
201
|
+
|
|
202
|
+
class Stop(Exception):
|
|
203
|
+
pass
|
|
204
|
+
|
|
205
|
+
def stream(*args, **kwargs):
|
|
206
|
+
seen["timeout"] = kwargs["timeout"]
|
|
207
|
+
raise Stop
|
|
208
|
+
|
|
209
|
+
client = Mock()
|
|
210
|
+
client.stream.side_effect = stream
|
|
211
|
+
monkeypatch.setattr(http.httpx, "Client", lambda **kwargs: client)
|
|
212
|
+
with pytest.raises(Stop):
|
|
213
|
+
http.JsonTransport("https://home.example").request("GET", "/me")
|
|
214
|
+
assert seen["timeout"].read == 20.0
|
|
215
|
+
|
|
216
|
+
|
|
186
217
|
def test_https_keeps_an_idle_connection_for_a_minute(monkeypatch):
|
|
187
218
|
from remoterf.deployment import http
|
|
188
219
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf-2.13.0 → remoterf-2.13.1}/src/remoterf/common/grpc/deployment_capabilities_pb2_grpc.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|