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.
Files changed (42) hide show
  1. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/PKG-INFO +6 -2
  2. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/README.md +5 -1
  3. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/pyproject.toml +1 -1
  4. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/device_manager.py +106 -13
  5. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server.egg-info/PKG-INFO +6 -2
  6. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/setup.cfg +0 -0
  7. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/__init__.py +0 -0
  8. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/__init__.py +0 -0
  9. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/grpc/__init__.py +0 -0
  10. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/grpc/grpc_host_pb2.py +0 -0
  11. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/grpc/grpc_host_pb2_grpc.py +0 -0
  12. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/grpc/grpc_pb2.py +0 -0
  13. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/grpc/grpc_pb2_grpc.py +0 -0
  14. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/__init__.py +0 -0
  15. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/ansi_codes.py +0 -0
  16. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/api_token.py +0 -0
  17. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/db_connection.py +0 -0
  18. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/db_location.py +0 -0
  19. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/list_string.py +0 -0
  20. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/common/utils/process_arg.py +0 -0
  21. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/drivers/__init__.py +0 -0
  22. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/drivers/adalm_pluto/__init__.py +0 -0
  23. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/drivers/adalm_pluto/pluto_remote_server.py +0 -0
  24. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/host/__init__.py +0 -0
  25. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/host/host_directory_store.py +0 -0
  26. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/host/host_tunnel_server.py +0 -0
  27. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/__init__.py +0 -0
  28. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/acc_perms.py +0 -0
  29. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/cert_provider.py +0 -0
  30. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/grpc_server.py +0 -0
  31. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/reservation.py +0 -0
  32. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/rpc_manager.py +0 -0
  33. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/user_group_cli.py +0 -0
  34. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/server/user_group_handler.py +0 -0
  35. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/serverrf_cli.py +0 -0
  36. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/tools/__init__.py +0 -0
  37. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server/tools/gen_certs.py +0 -0
  38. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server.egg-info/SOURCES.txt +0 -0
  39. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server.egg-info/dependency_links.txt +0 -0
  40. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server.egg-info/entry_points.txt +0 -0
  41. {remoterf_server-0.1.89 → remoterf_server-0.1.90}/src/remoteRF_server.egg-info/requires.txt +0 -0
  42. {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.89
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
- set_device token (virtual devices) + routing/relay to proper host (multiplexed)
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
- set_device token (virtual devices) + routing/relay to proper host (multiplexed)
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
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "remoteRF-server"
7
- version = "0.1.89"
7
+ version = "0.1.90"
8
8
  dependencies = [
9
9
  "grpcio",
10
10
  "protobuf",
@@ -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
- snap = reg.device_directory_cached(ttl_ms=0) # device_id -> (host_id, info_obj, is_active)
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
- except Exception:
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, (host_id, info_obj, is_active) in snap.items():
90
- # you said host device IDs are numeric and globally unique => treat as gid
104
+ for device_id, tup in snap.items():
105
+ # snap is expected: (host_id, info_obj, is_active)
91
106
  try:
92
- gid = int(str(device_id))
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
- local_id = int(getattr(info_obj, "local_id", 0) or 0)
97
- label = str(getattr(info_obj, "label", "") or "").strip()
98
- serial = str(getattr(info_obj, "serial", "") or "").strip()
99
- kind = str(getattr(info_obj, "kind", "") or "").strip()
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 not None:
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
- pass
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.89
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
- set_device token (virtual devices) + routing/relay to proper host (multiplexed)
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