remoteRF-server 0.1.90__tar.gz → 0.1.91__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.90 → remoterf_server-0.1.91}/PKG-INFO +1 -1
  2. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/pyproject.toml +1 -1
  3. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/server/device_manager.py +13 -109
  4. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server.egg-info/PKG-INFO +1 -1
  5. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/README.md +0 -0
  6. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/setup.cfg +0 -0
  7. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/__init__.py +0 -0
  8. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/common/__init__.py +0 -0
  9. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/common/grpc/__init__.py +0 -0
  10. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/common/grpc/grpc_host_pb2.py +0 -0
  11. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/common/grpc/grpc_host_pb2_grpc.py +0 -0
  12. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/common/grpc/grpc_pb2.py +0 -0
  13. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/common/grpc/grpc_pb2_grpc.py +0 -0
  14. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/common/utils/__init__.py +0 -0
  15. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/common/utils/ansi_codes.py +0 -0
  16. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/common/utils/api_token.py +0 -0
  17. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/common/utils/db_connection.py +0 -0
  18. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/common/utils/db_location.py +0 -0
  19. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/common/utils/list_string.py +0 -0
  20. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/common/utils/process_arg.py +0 -0
  21. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/drivers/__init__.py +0 -0
  22. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/drivers/adalm_pluto/__init__.py +0 -0
  23. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/drivers/adalm_pluto/pluto_remote_server.py +0 -0
  24. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/host/__init__.py +0 -0
  25. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/host/host_directory_store.py +0 -0
  26. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/host/host_tunnel_server.py +0 -0
  27. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/server/__init__.py +0 -0
  28. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/server/acc_perms.py +0 -0
  29. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/server/cert_provider.py +0 -0
  30. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/server/grpc_server.py +0 -0
  31. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/server/reservation.py +0 -0
  32. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/server/rpc_manager.py +0 -0
  33. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/server/user_group_cli.py +0 -0
  34. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/server/user_group_handler.py +0 -0
  35. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/serverrf_cli.py +0 -0
  36. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/tools/__init__.py +0 -0
  37. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server/tools/gen_certs.py +0 -0
  38. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server.egg-info/SOURCES.txt +0 -0
  39. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server.egg-info/dependency_links.txt +0 -0
  40. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server.egg-info/entry_points.txt +0 -0
  41. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/src/remoteRF_server.egg-info/requires.txt +0 -0
  42. {remoterf_server-0.1.90 → remoterf_server-0.1.91}/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.90
3
+ Version: 0.1.91
4
4
  Description-Content-Type: text/markdown
5
5
  Requires-Dist: grpcio
6
6
  Requires-Dist: protobuf
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "remoteRF-server"
7
- version = "0.1.90"
7
+ version = "0.1.91"
8
8
  dependencies = [
9
9
  "grpcio",
10
10
  "protobuf",
@@ -68,139 +68,47 @@ def _local_devices_str_snapshot() -> Dict[int, str]:
68
68
 
69
69
  out[int(gid)] = f"{name} [{', '.join(meta_parts)}] ({status})"
70
70
  return out
71
-
72
71
  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
-
80
72
  reg = _get_host_registry()
81
73
  if reg is None:
82
- _dbg("registry=None -> returning {}")
83
74
  return {}
84
75
 
85
- # force refresh of directory snapshot
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 {}
76
+ snap = reg.device_directory_cached(ttl_ms=0) # device_id -> (host_id, info_obj, is_active)
92
77
 
93
- # optional: last-seen data (persisted in registry status)
94
78
  try:
95
79
  status_map = reg.list_devices() # device_id -> DeviceStatus
96
- _dbg(f"list_devices() returned {len(status_map)} entries")
97
- except Exception as e:
98
- _dbg(f"list_devices() FAILED: {e!r}")
80
+ except Exception:
99
81
  status_map = {}
100
82
 
101
83
  now_ms = int(time.time() * 1000)
102
84
 
103
85
  out: Dict[int, str] = {}
104
- for device_id, tup in snap.items():
105
- # snap is expected: (host_id, info_obj, is_active)
106
- try:
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}")
110
- continue
111
-
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
86
+ for device_id, (host_id, info_obj, is_active) in snap.items():
87
+ # Canonical: treat device_id as numeric gid
144
88
  try:
145
- # Many protobuf messages have ListFields()/__repr__/__str__
146
- _dbg(f" info_obj(str)={str(info_obj)[:500]!r}")
89
+ gid = int(str(device_id))
147
90
  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
91
  continue
181
92
 
93
+ local_id = int(getattr(info_obj, "local_id", 0) or 0)
94
+ label = str(getattr(info_obj, "label", "") or "").strip()
95
+ serial = str(getattr(info_obj, "serial", "") or "").strip()
96
+ kind = str(getattr(info_obj, "kind", "") or "").strip()
97
+
182
98
  status = "online" if bool(is_active) else "offline"
183
99
  name = label or f"host-device-{gid}"
184
100
 
185
- # last-seen
186
101
  last_seen = ""
187
102
  ds = status_map.get(str(device_id))
188
- if ds is None:
189
- _dbg(f" status_map: no entry for device_id={str(device_id)!r}")
190
- else:
103
+ if ds is not None:
191
104
  try:
192
105
  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}")
197
106
  if ls > 0:
198
107
  age_s = max(0, (now_ms - ls) // 1000)
199
108
  last_seen = f", seen={age_s}s ago"
200
- except Exception as e:
201
- _dbg(f" status_map parse failed for device_id={str(device_id)!r}: {e!r}")
109
+ except Exception:
110
+ pass
202
111
 
203
- # Final formatted string (same output contract as before)
204
112
  out[gid] = (
205
113
  f"{name} "
206
114
  f"[host={host_id}, local_id={local_id}"
@@ -210,10 +118,6 @@ def _host_devices_str_snapshot() -> Dict[int, str]:
210
118
  f"] ({status})"
211
119
  )
212
120
 
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
-
217
121
  return out
218
122
 
219
123
  # -----------------------------
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remoteRF-server
3
- Version: 0.1.90
3
+ Version: 0.1.91
4
4
  Description-Content-Type: text/markdown
5
5
  Requires-Dist: grpcio
6
6
  Requires-Dist: protobuf