phystack-hub-client 0.2.5__tar.gz → 0.2.7__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.
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/PKG-INFO +7 -6
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/pyproject.toml +17 -6
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/services/phyhub_connection.py +61 -3
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/.gitignore +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/README.md +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/examples/browser_test_backend.py +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/scripts/python-node-test.sh +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/scripts/webrtc-test.sh +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/__init__.py +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/client.py +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/instances/__init__.py +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/instances/base_instance.py +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/instances/edge_instance.py +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/instances/peripheral_instance.py +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/services/__init__.py +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/services/signals.py +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/services/webrtc/__init__.py +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/services/webrtc/data_channel.py +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/services/webrtc/media_stream.py +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/twin_messaging.py +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/twin_registry.py +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/types/__init__.py +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/types/twin_types.py +0 -0
- {phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/tests/test_communication.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: phystack-hub-client
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.7
|
|
4
4
|
Summary: Python client for PhyHub - events, actions, DataChannel, and MediaStream
|
|
5
5
|
Project-URL: Homepage, https://github.com/phystack/phystack-pypi
|
|
6
6
|
Project-URL: Documentation, https://docs.phystack.com
|
|
@@ -15,11 +15,12 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.11
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.12
|
|
17
17
|
Requires-Python: >=3.10
|
|
18
|
-
Requires-Dist: aiohttp
|
|
19
|
-
Requires-Dist: aiortc
|
|
20
|
-
Requires-Dist: numpy
|
|
21
|
-
Requires-Dist: opencv-python
|
|
22
|
-
Requires-Dist: python-
|
|
18
|
+
Requires-Dist: aiohttp<4.0.0,>=3.9.0
|
|
19
|
+
Requires-Dist: aiortc<2.0.0,>=1.6.0
|
|
20
|
+
Requires-Dist: numpy<3.0.0,>=1.24.0
|
|
21
|
+
Requires-Dist: opencv-python<5.0.0,>=4.8.0
|
|
22
|
+
Requires-Dist: python-engineio<4.12.0,>=4.9.0
|
|
23
|
+
Requires-Dist: python-socketio[asyncio-client]<5.12.0,>=5.11.0
|
|
23
24
|
Provides-Extra: dev
|
|
24
25
|
Requires-Dist: black>=23.0.0; extra == 'dev'
|
|
25
26
|
Requires-Dist: mypy>=1.5.0; extra == 'dev'
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "phystack-hub-client"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.7"
|
|
8
8
|
description = "Python client for PhyHub - events, actions, DataChannel, and MediaStream"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -22,11 +22,22 @@ classifiers = [
|
|
|
22
22
|
"Programming Language :: Python :: 3.12",
|
|
23
23
|
]
|
|
24
24
|
dependencies = [
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"
|
|
25
|
+
# Pinned to narrow ranges tested against the PhyOS hub socket.io server
|
|
26
|
+
# (socket.io 4.8.1 / engine.io 6.6.4). python-engineio 4.12+ has a bug
|
|
27
|
+
# in the WebSocket upgrade error path: _connect_websocket can pass a
|
|
28
|
+
# WebSocketError object into the packet decoder, causing
|
|
29
|
+
# "TypeError: object of type 'WebSocketError' has no len()".
|
|
30
|
+
"python-socketio[asyncio_client]>=5.11.0,<5.12.0",
|
|
31
|
+
"python-engineio>=4.9.0,<4.12.0",
|
|
32
|
+
# aiohttp 4.x is an announced future breaking release; cap below it.
|
|
33
|
+
"aiohttp>=3.9.0,<4.0.0",
|
|
34
|
+
# aiortc has had minor-version API breaks; cap at next major.
|
|
35
|
+
"aiortc>=1.6.0,<2.0.0",
|
|
36
|
+
# opencv-python 5.x is not released yet; cap at next major.
|
|
37
|
+
"opencv-python>=4.8.0,<5.0.0",
|
|
38
|
+
# numpy 2.0 was a large ABI change. Allow 2.x but cap before the next
|
|
39
|
+
# unreleased major to avoid surprise breaks.
|
|
40
|
+
"numpy>=1.24.0,<3.0.0",
|
|
30
41
|
]
|
|
31
42
|
|
|
32
43
|
[project.optional-dependencies]
|
|
@@ -182,14 +182,33 @@ class PhyHubConnection:
|
|
|
182
182
|
return self._sio
|
|
183
183
|
|
|
184
184
|
mode = self.config.mode
|
|
185
|
+
|
|
186
|
+
# Debug: log versions of key libraries for connection troubleshooting
|
|
187
|
+
try:
|
|
188
|
+
import socketio as _sio_mod
|
|
189
|
+
import engineio as _eio_mod
|
|
190
|
+
import aiohttp as _aiohttp_mod
|
|
191
|
+
print(
|
|
192
|
+
f"[PhyHubConnection] Library versions: "
|
|
193
|
+
f"python-socketio={_sio_mod.__version__}, "
|
|
194
|
+
f"python-engineio={_eio_mod.__version__}, "
|
|
195
|
+
f"aiohttp={_aiohttp_mod.__version__}"
|
|
196
|
+
)
|
|
197
|
+
except Exception as _e:
|
|
198
|
+
print(f"[PhyHubConnection] Could not read lib versions: {_e}")
|
|
199
|
+
|
|
185
200
|
print(f"[PhyHubConnection] Connecting to {self.config.url} ({mode.value} mode)")
|
|
201
|
+
print(f"[PhyHubConnection] Instance ID: {self.config.instance_id!r}")
|
|
202
|
+
print(f"[PhyHubConnection] Device ID: {self.config.device_id!r}")
|
|
186
203
|
|
|
204
|
+
# Enable verbose logging from socketio and engineio to trace the
|
|
205
|
+
# handshake and packet flow during connection troubleshooting.
|
|
187
206
|
self._sio = socketio.AsyncClient(
|
|
188
207
|
reconnection=True,
|
|
189
208
|
reconnection_attempts=5,
|
|
190
209
|
reconnection_delay=1,
|
|
191
|
-
logger=
|
|
192
|
-
engineio_logger=
|
|
210
|
+
logger=True,
|
|
211
|
+
engineio_logger=True,
|
|
193
212
|
)
|
|
194
213
|
|
|
195
214
|
self._connect_event = asyncio.Event()
|
|
@@ -198,6 +217,14 @@ class PhyHubConnection:
|
|
|
198
217
|
async def connect() -> None:
|
|
199
218
|
self._connected = True
|
|
200
219
|
print("[PhyHubConnection] Connected successfully")
|
|
220
|
+
try:
|
|
221
|
+
print(
|
|
222
|
+
f"[PhyHubConnection] Namespaces on client: {list(self._sio.namespaces)}; "
|
|
223
|
+
f"Session ID: {self._sio.get_sid()!r}; "
|
|
224
|
+
f"Transport: {self._sio.transport()!r}"
|
|
225
|
+
)
|
|
226
|
+
except Exception as _e:
|
|
227
|
+
print(f"[PhyHubConnection] Could not read post-connect state: {_e}")
|
|
201
228
|
if self._connect_event:
|
|
202
229
|
self._connect_event.set()
|
|
203
230
|
|
|
@@ -208,7 +235,7 @@ class PhyHubConnection:
|
|
|
208
235
|
|
|
209
236
|
@self._sio.event
|
|
210
237
|
async def connect_error(data: Any) -> None:
|
|
211
|
-
print(f"[PhyHubConnection] Connection error: {data}")
|
|
238
|
+
print(f"[PhyHubConnection] Connection error: {data!r}")
|
|
212
239
|
if self._connect_event:
|
|
213
240
|
self._connect_event.set()
|
|
214
241
|
|
|
@@ -224,15 +251,36 @@ class PhyHubConnection:
|
|
|
224
251
|
auth = {"instanceId": self.config.instance_id}
|
|
225
252
|
timeout = 3 if mode == ConnectionMode.SIMULATOR else 5
|
|
226
253
|
|
|
254
|
+
print(
|
|
255
|
+
f"[PhyHubConnection] Auth payload: {auth!r}; "
|
|
256
|
+
f"Connect wait_timeout={timeout}s"
|
|
257
|
+
)
|
|
258
|
+
|
|
227
259
|
try:
|
|
260
|
+
print("[PhyHubConnection] Calling self._sio.connect()...")
|
|
228
261
|
await self._sio.connect(
|
|
229
262
|
self.config.url,
|
|
230
263
|
auth=auth,
|
|
231
264
|
wait_timeout=timeout,
|
|
232
265
|
)
|
|
266
|
+
print("[PhyHubConnection] self._sio.connect() returned successfully")
|
|
267
|
+
try:
|
|
268
|
+
print(
|
|
269
|
+
f"[PhyHubConnection] Post-connect state: "
|
|
270
|
+
f"connected={self._sio.connected}, "
|
|
271
|
+
f"namespaces={list(self._sio.namespaces)}, "
|
|
272
|
+
f"transport={self._sio.transport()!r}"
|
|
273
|
+
)
|
|
274
|
+
except Exception as _e:
|
|
275
|
+
print(f"[PhyHubConnection] Could not read post-connect state: {_e}")
|
|
233
276
|
|
|
234
277
|
# Wait for connection confirmation
|
|
278
|
+
print(f"[PhyHubConnection] Waiting for connect event (timeout={timeout}s)...")
|
|
235
279
|
await asyncio.wait_for(self._connect_event.wait(), timeout=float(timeout))
|
|
280
|
+
print(
|
|
281
|
+
f"[PhyHubConnection] Connect event received. "
|
|
282
|
+
f"self._connected={self._connected}"
|
|
283
|
+
)
|
|
236
284
|
|
|
237
285
|
if not self._connected:
|
|
238
286
|
raise ConnectionError("Failed to connect to PhyHub")
|
|
@@ -240,9 +288,19 @@ class PhyHubConnection:
|
|
|
240
288
|
return self._sio
|
|
241
289
|
|
|
242
290
|
except asyncio.TimeoutError:
|
|
291
|
+
print(
|
|
292
|
+
"[PhyHubConnection] asyncio.TimeoutError waiting for connect event "
|
|
293
|
+
f"(timeout={timeout}s, mode={mode.value}, url={self.config.url})"
|
|
294
|
+
)
|
|
243
295
|
raise ConnectionError(
|
|
244
296
|
f"Connection timeout ({mode.value} mode, url={self.config.url})"
|
|
245
297
|
)
|
|
298
|
+
except Exception as _e:
|
|
299
|
+
print(
|
|
300
|
+
f"[PhyHubConnection] Exception during connect: "
|
|
301
|
+
f"{type(_e).__name__}: {_e!r}"
|
|
302
|
+
)
|
|
303
|
+
raise
|
|
246
304
|
|
|
247
305
|
async def disconnect(self) -> None:
|
|
248
306
|
"""Disconnect from PhyHub."""
|
|
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
|
{phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/services/__init__.py
RENAMED
|
File without changes
|
{phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/services/signals.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/twin_messaging.py
RENAMED
|
File without changes
|
{phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/twin_registry.py
RENAMED
|
File without changes
|
{phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/types/__init__.py
RENAMED
|
File without changes
|
{phystack_hub_client-0.2.5 → phystack_hub_client-0.2.7}/src/phystack/hub_client/types/twin_types.py
RENAMED
|
File without changes
|
|
File without changes
|