remoteRF-server 0.1.89__tar.gz → 0.1.90__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_server-0.1.89 → remoterf_server-0.1.90}/PKG-INFO +6 -2
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/README.md +5 -1
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/pyproject.toml +1 -1
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/device_manager.py +106 -13
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server.egg-info/PKG-INFO +6 -2
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/setup.cfg +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/__init__.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/__init__.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/grpc/__init__.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/grpc/grpc_host_pb2.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/grpc/grpc_host_pb2_grpc.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/grpc/grpc_pb2.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/grpc/grpc_pb2_grpc.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/__init__.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/ansi_codes.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/api_token.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/db_connection.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/db_location.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/list_string.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/process_arg.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/drivers/__init__.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/drivers/adalm_pluto/__init__.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/drivers/adalm_pluto/pluto_remote_server.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/host/__init__.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/host/host_directory_store.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/host/host_tunnel_server.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/__init__.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/acc_perms.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/cert_provider.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/grpc_server.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/reservation.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/rpc_manager.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/user_group_cli.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/user_group_handler.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/serverrf_cli.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/tools/__init__.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/tools/gen_certs.py +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server.egg-info/SOURCES.txt +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server.egg-info/dependency_links.txt +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server.egg-info/entry_points.txt +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server.egg-info/requires.txt +0 -0
- {remoterf_server-0.1.89 → remoterf_server-0.1.90}/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.
|
|
3
|
+
Version: 0.1.90
|
|
4
4
|
Description-Content-Type: text/markdown
|
|
5
5
|
Requires-Dist: grpcio
|
|
6
6
|
Requires-Dist: protobuf
|
|
@@ -354,7 +354,11 @@ ServerRF display meta data as part of devices list / reservation
|
|
|
354
354
|
|
|
355
355
|
+ online/activity status (appended into device name) + (plus host side warning if the device id is NOT globally unique!)
|
|
356
356
|
|
|
357
|
-
|
|
357
|
+
Test local pluto on server (to make sure nothing broke!)
|
|
358
|
+
|
|
359
|
+
set_device token (virtual devices) + routing/relay to proper host (multiplexed) + host side pipeline
|
|
360
|
+
|
|
361
|
+
Test local pluto on server (to make sure nothing broke!)
|
|
358
362
|
|
|
359
363
|
User side testing + integration
|
|
360
364
|
|
|
@@ -343,7 +343,11 @@ ServerRF display meta data as part of devices list / reservation
|
|
|
343
343
|
|
|
344
344
|
+ online/activity status (appended into device name) + (plus host side warning if the device id is NOT globally unique!)
|
|
345
345
|
|
|
346
|
-
|
|
346
|
+
Test local pluto on server (to make sure nothing broke!)
|
|
347
|
+
|
|
348
|
+
set_device token (virtual devices) + routing/relay to proper host (multiplexed) + host side pipeline
|
|
349
|
+
|
|
350
|
+
Test local pluto on server (to make sure nothing broke!)
|
|
347
351
|
|
|
348
352
|
User side testing + integration
|
|
349
353
|
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/device_manager.py
RENAMED
|
@@ -70,48 +70,137 @@ def _local_devices_str_snapshot() -> Dict[int, str]:
|
|
|
70
70
|
return out
|
|
71
71
|
|
|
72
72
|
def _host_devices_str_snapshot() -> Dict[int, str]:
|
|
73
|
+
# DEBUG: print EVERYTHING we can without crashing the UI path.
|
|
74
|
+
def _dbg(msg: str) -> None:
|
|
75
|
+
try:
|
|
76
|
+
print(f"[host_devices_snapshot][DEBUG] {msg}", file=sys.stderr, flush=True)
|
|
77
|
+
except Exception:
|
|
78
|
+
pass
|
|
79
|
+
|
|
73
80
|
reg = _get_host_registry()
|
|
74
81
|
if reg is None:
|
|
82
|
+
_dbg("registry=None -> returning {}")
|
|
75
83
|
return {}
|
|
76
84
|
|
|
77
85
|
# force refresh of directory snapshot
|
|
78
|
-
|
|
86
|
+
try:
|
|
87
|
+
snap = reg.device_directory_cached(ttl_ms=0) # device_id -> (host_id, info_obj, is_active)
|
|
88
|
+
_dbg(f"device_directory_cached(ttl_ms=0) returned {len(snap)} entries")
|
|
89
|
+
except Exception as e:
|
|
90
|
+
_dbg(f"device_directory_cached FAILED: {e!r}")
|
|
91
|
+
return {}
|
|
79
92
|
|
|
80
93
|
# optional: last-seen data (persisted in registry status)
|
|
81
94
|
try:
|
|
82
95
|
status_map = reg.list_devices() # device_id -> DeviceStatus
|
|
83
|
-
|
|
96
|
+
_dbg(f"list_devices() returned {len(status_map)} entries")
|
|
97
|
+
except Exception as e:
|
|
98
|
+
_dbg(f"list_devices() FAILED: {e!r}")
|
|
84
99
|
status_map = {}
|
|
85
100
|
|
|
86
101
|
now_ms = int(time.time() * 1000)
|
|
87
102
|
|
|
88
103
|
out: Dict[int, str] = {}
|
|
89
|
-
for device_id,
|
|
90
|
-
#
|
|
104
|
+
for device_id, tup in snap.items():
|
|
105
|
+
# snap is expected: (host_id, info_obj, is_active)
|
|
91
106
|
try:
|
|
92
|
-
|
|
93
|
-
except Exception:
|
|
107
|
+
host_id, info_obj, is_active = tup
|
|
108
|
+
except Exception as e:
|
|
109
|
+
_dbg(f"BAD SNAP TUPLE device_id={device_id!r} tup={tup!r} err={e!r}")
|
|
94
110
|
continue
|
|
95
111
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
112
|
+
_dbg(
|
|
113
|
+
f"ENTRY device_id(raw)={device_id!r} device_id(str)={str(device_id)!r} "
|
|
114
|
+
f"host_id={host_id!r} is_active={bool(is_active)} "
|
|
115
|
+
f"info_obj_type={type(info_obj).__name__}"
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
# Dump info_obj fields (best effort)
|
|
119
|
+
try:
|
|
120
|
+
local_id = int(getattr(info_obj, "local_id", 0) or 0)
|
|
121
|
+
except Exception as e:
|
|
122
|
+
local_id = 0
|
|
123
|
+
_dbg(f" info_obj.local_id read failed: {e!r}")
|
|
124
|
+
|
|
125
|
+
try:
|
|
126
|
+
label = str(getattr(info_obj, "label", "") or "").strip()
|
|
127
|
+
except Exception as e:
|
|
128
|
+
label = ""
|
|
129
|
+
_dbg(f" info_obj.label read failed: {e!r}")
|
|
130
|
+
|
|
131
|
+
try:
|
|
132
|
+
serial = str(getattr(info_obj, "serial", "") or "").strip()
|
|
133
|
+
except Exception as e:
|
|
134
|
+
serial = ""
|
|
135
|
+
_dbg(f" info_obj.serial read failed: {e!r}")
|
|
136
|
+
|
|
137
|
+
try:
|
|
138
|
+
kind = str(getattr(info_obj, "kind", "") or "").strip()
|
|
139
|
+
except Exception as e:
|
|
140
|
+
kind = ""
|
|
141
|
+
_dbg(f" info_obj.kind read failed: {e!r}")
|
|
142
|
+
|
|
143
|
+
# Extra: if it's a protobuf message, print its text format safely
|
|
144
|
+
try:
|
|
145
|
+
# Many protobuf messages have ListFields()/__repr__/__str__
|
|
146
|
+
_dbg(f" info_obj(str)={str(info_obj)[:500]!r}")
|
|
147
|
+
except Exception:
|
|
148
|
+
pass
|
|
149
|
+
|
|
150
|
+
_dbg(
|
|
151
|
+
f" parsed info: local_id={local_id} label={label!r} kind={kind!r} serial={serial!r}"
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
# If you suspect server is setting label/kind to gid/local_id, explicitly flag it.
|
|
155
|
+
if label and (label == str(local_id) or label == str(device_id)):
|
|
156
|
+
_dbg(f" *** SUSPICIOUS label looks like an id: label={label!r} local_id={local_id} device_id={device_id!r}")
|
|
157
|
+
if kind and (kind == str(local_id) or kind == str(device_id)):
|
|
158
|
+
_dbg(f" *** SUSPICIOUS kind looks like an id: kind={kind!r} local_id={local_id} device_id={device_id!r}")
|
|
159
|
+
|
|
160
|
+
# Your old code assumed device_id is numeric gid. DEBUG: show both interpretations.
|
|
161
|
+
gid_from_device_id: Optional[int] = None
|
|
162
|
+
gid_from_local_id: Optional[int] = None
|
|
163
|
+
|
|
164
|
+
try:
|
|
165
|
+
gid_from_device_id = int(str(device_id))
|
|
166
|
+
_dbg(f" gid_from_device_id=int({str(device_id)!r}) -> {gid_from_device_id}")
|
|
167
|
+
except Exception as e:
|
|
168
|
+
_dbg(f" gid_from_device_id FAILED int({str(device_id)!r}): {e!r}")
|
|
169
|
+
|
|
170
|
+
try:
|
|
171
|
+
gid_from_local_id = int(local_id)
|
|
172
|
+
_dbg(f" gid_from_local_id=int(local_id={local_id}) -> {gid_from_local_id}")
|
|
173
|
+
except Exception as e:
|
|
174
|
+
_dbg(f" gid_from_local_id FAILED int(local_id={local_id}): {e!r}")
|
|
175
|
+
|
|
176
|
+
# Prefer gid derived from device_id if possible; else fall back to local_id
|
|
177
|
+
gid: Optional[int] = gid_from_device_id if gid_from_device_id is not None else gid_from_local_id
|
|
178
|
+
if gid is None:
|
|
179
|
+
_dbg(" SKIP: cannot derive gid from device_id or local_id")
|
|
180
|
+
continue
|
|
100
181
|
|
|
101
182
|
status = "online" if bool(is_active) else "offline"
|
|
102
183
|
name = label or f"host-device-{gid}"
|
|
103
184
|
|
|
185
|
+
# last-seen
|
|
104
186
|
last_seen = ""
|
|
105
187
|
ds = status_map.get(str(device_id))
|
|
106
|
-
if ds is
|
|
188
|
+
if ds is None:
|
|
189
|
+
_dbg(f" status_map: no entry for device_id={str(device_id)!r}")
|
|
190
|
+
else:
|
|
107
191
|
try:
|
|
108
192
|
ls = int(getattr(ds, "last_seen_ms", 0) or 0)
|
|
193
|
+
hid2 = str(getattr(ds, "host_id", "") or "")
|
|
194
|
+
# if server still stores host_local_id, print it too (best-effort)
|
|
195
|
+
hloc = getattr(ds, "host_local_id", None)
|
|
196
|
+
_dbg(f" status: host_id={hid2!r} last_seen_ms={ls} host_local_id={hloc!r}")
|
|
109
197
|
if ls > 0:
|
|
110
198
|
age_s = max(0, (now_ms - ls) // 1000)
|
|
111
199
|
last_seen = f", seen={age_s}s ago"
|
|
112
|
-
except Exception:
|
|
113
|
-
|
|
200
|
+
except Exception as e:
|
|
201
|
+
_dbg(f" status_map parse failed for device_id={str(device_id)!r}: {e!r}")
|
|
114
202
|
|
|
203
|
+
# Final formatted string (same output contract as before)
|
|
115
204
|
out[gid] = (
|
|
116
205
|
f"{name} "
|
|
117
206
|
f"[host={host_id}, local_id={local_id}"
|
|
@@ -121,6 +210,10 @@ def _host_devices_str_snapshot() -> Dict[int, str]:
|
|
|
121
210
|
f"] ({status})"
|
|
122
211
|
)
|
|
123
212
|
|
|
213
|
+
_dbg(f" OUT[{gid}]={out[gid]!r}")
|
|
214
|
+
|
|
215
|
+
_dbg(f"returning out size={len(out)} gids={sorted(out.keys())[:50]!r}{'...' if len(out) > 50 else ''}")
|
|
216
|
+
|
|
124
217
|
return out
|
|
125
218
|
|
|
126
219
|
# -----------------------------
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: remoteRF-server
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.90
|
|
4
4
|
Description-Content-Type: text/markdown
|
|
5
5
|
Requires-Dist: grpcio
|
|
6
6
|
Requires-Dist: protobuf
|
|
@@ -354,7 +354,11 @@ ServerRF display meta data as part of devices list / reservation
|
|
|
354
354
|
|
|
355
355
|
+ online/activity status (appended into device name) + (plus host side warning if the device id is NOT globally unique!)
|
|
356
356
|
|
|
357
|
-
|
|
357
|
+
Test local pluto on server (to make sure nothing broke!)
|
|
358
|
+
|
|
359
|
+
set_device token (virtual devices) + routing/relay to proper host (multiplexed) + host side pipeline
|
|
360
|
+
|
|
361
|
+
Test local pluto on server (to make sure nothing broke!)
|
|
358
362
|
|
|
359
363
|
User side testing + integration
|
|
360
364
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/grpc/__init__.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/grpc/grpc_host_pb2.py
RENAMED
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/grpc/grpc_pb2.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/grpc/grpc_pb2_grpc.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/__init__.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/ansi_codes.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/api_token.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/db_connection.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/db_location.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/list_string.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/process_arg.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/host/host_directory_store.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/host/host_tunnel_server.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/cert_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/user_group_cli.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/user_group_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server.egg-info/top_level.txt
RENAMED
|
File without changes
|