zigpy-zboss 2.0.2__tar.gz → 2.0.3__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 (55) hide show
  1. {zigpy_zboss-2.0.2/zigpy_zboss.egg-info → zigpy_zboss-2.0.3}/PKG-INFO +1 -1
  2. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/tests/test_uart.py +36 -0
  3. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/__init__.py +1 -1
  4. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/uart.py +7 -1
  5. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/zigbee/device.py +3 -3
  6. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3/zigpy_zboss.egg-info}/PKG-INFO +1 -1
  7. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/COPYING +0 -0
  8. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/LICENSE +0 -0
  9. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/README.md +0 -0
  10. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/pyproject.toml +0 -0
  11. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/setup.cfg +0 -0
  12. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/setup.py +0 -0
  13. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/tests/test_commands.py +0 -0
  14. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/tests/test_config.py +0 -0
  15. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/tests/test_frame.py +0 -0
  16. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/tests/test_nvids.py +0 -0
  17. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/tests/test_types_basic.py +0 -0
  18. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/tests/test_types_cstruct.py +0 -0
  19. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/tests/test_types_named.py +0 -0
  20. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/tests/test_utils.py +0 -0
  21. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/api.py +0 -0
  22. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/checksum.py +0 -0
  23. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/commands/__init__.py +0 -0
  24. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/commands/af.py +0 -0
  25. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/commands/aps.py +0 -0
  26. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/commands/ncp_config.py +0 -0
  27. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/commands/nwk_mgmt.py +0 -0
  28. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/commands/security.py +0 -0
  29. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/commands/zdo.py +0 -0
  30. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/config.py +0 -0
  31. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/debug.py +0 -0
  32. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/exceptions.py +0 -0
  33. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/frames.py +0 -0
  34. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/logger.py +0 -0
  35. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/nvram.py +0 -0
  36. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/tools/__init__.py +0 -0
  37. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/tools/config.py +0 -0
  38. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/tools/factory_reset_ncp.py +0 -0
  39. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/tools/get_ncp_version.py +0 -0
  40. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/tools/get_nwk_keys.py +0 -0
  41. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/tools/log2pcap.py +0 -0
  42. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/types/__init__.py +0 -0
  43. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/types/basic.py +0 -0
  44. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/types/commands.py +0 -0
  45. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/types/cstruct.py +0 -0
  46. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/types/named.py +0 -0
  47. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/types/nvids.py +0 -0
  48. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/types/structs.py +0 -0
  49. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/utils.py +0 -0
  50. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/zigbee/__init__.py +0 -0
  51. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss/zigbee/application.py +0 -0
  52. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss.egg-info/SOURCES.txt +0 -0
  53. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss.egg-info/dependency_links.txt +0 -0
  54. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss.egg-info/requires.txt +0 -0
  55. {zigpy_zboss-2.0.2 → zigpy_zboss-2.0.3}/zigpy_zboss.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zigpy-zboss
3
- Version: 2.0.2
3
+ Version: 2.0.3
4
4
  Summary: A library for zigpy which communicates with Nordic nRF52 radios running ZBOSS NCP
5
5
  Author-email: Damien Kastner <damien.kastner@kardia.no>
6
6
  License: GPL-3.0
@@ -280,6 +280,42 @@ async def test_connection_lost(dummy_serial_conn, mocker, event_loop):
280
280
  assert (await conn_lost_fut) == exception
281
281
 
282
282
 
283
+ @pytest.mark.asyncio
284
+ async def test_connect_url_port_skips_path_check(mocker, event_loop):
285
+ """A URL-style port (``socket://``/``tcp://``) has no filesystem path.
286
+
287
+ ``connect()`` must not gate on ``os.path.exists`` for such ports, otherwise
288
+ it spins in the retry loop until the timeout and never opens the connection
289
+ (regression for ser2net bridges and native-TCP NCPs).
290
+ """
291
+ target_url = "socket://127.0.0.1:6638"
292
+
293
+ def create_serial_conn(loop, protocol_factory, url, *args, **kwargs):
294
+ assert url == target_url
295
+ fut = event_loop.create_future()
296
+ protocol = protocol_factory()
297
+ event_loop.add_writer = lambda *a, **k: None
298
+ event_loop.add_reader = lambda *a, **k: None
299
+ event_loop.remove_writer = lambda *a, **k: None
300
+ event_loop.remove_reader = lambda *a, **k: None
301
+ transport = mocker.Mock()
302
+ transport.serial = mocker.Mock()
303
+ protocol.connection_made(transport)
304
+ fut.set_result((transport, protocol))
305
+ return fut
306
+
307
+ mocker.patch("serialx.create_serial_connection", new=create_serial_conn)
308
+ # A socket:// path never exists on disk; the check must be skipped for it.
309
+ exists = mocker.patch("zigpy_zboss.uart.os.path.exists", return_value=False)
310
+
311
+ protocol = await zboss_uart.connect(
312
+ conf.SCHEMA_DEVICE({conf.CONF_DEVICE_PATH: target_url}), api=mocker.Mock()
313
+ )
314
+
315
+ assert protocol is not None
316
+ exists.assert_not_called()
317
+
318
+
283
319
  # ToFix: this is not testing the uart test_connection_made method
284
320
  # @pytest.mark.asyncio
285
321
  # async def test_connection_made(dummy_serial_conn, mocker):
@@ -2,7 +2,7 @@
2
2
 
3
3
  MAJOR_VERSION = 2
4
4
  MINOR_VERSION = 0
5
- PATCH_VERSION = 2
5
+ PATCH_VERSION = 3
6
6
 
7
7
  __short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}"
8
8
  __version__ = f"{__short_version__}.{PATCH_VERSION}"
@@ -288,8 +288,14 @@ async def connect(config: conf.ConfigType, api) -> ZbossNcpProtocol:
288
288
  last_exc: OSError | None = None
289
289
  protocol = None
290
290
 
291
+ # URL-style ports (``socket://``, ``tcp://``, ``rfc2217://``, …) are not
292
+ # filesystem paths, so the local-device existence check below must be
293
+ # skipped for them; otherwise the loop spins until the timeout and the
294
+ # connection is never opened (e.g. ser2net or a native TCP NCP).
295
+ is_local_device = "://" not in port
296
+
291
297
  while loop.time() < deadline:
292
- if not os.path.exists(port):
298
+ if is_local_device and not os.path.exists(port):
293
299
  await asyncio.sleep(CONNECT_OPEN_RETRY_DELAY)
294
300
  continue
295
301
 
@@ -73,7 +73,7 @@ class ZbossZDO(ZigpyZDO):
73
73
  )
74
74
  )
75
75
  if res.StatusCode != 0:
76
- return (res.StatusCode % 0xFF, dst_address, cluster)
76
+ return (res.StatusCode, dst_address, cluster)
77
77
 
78
78
  return (zdo_t.Status.SUCCESS, dst_address, cluster)
79
79
 
@@ -81,7 +81,7 @@ class ZbossZDO(ZigpyZDO):
81
81
  """Unbinding request."""
82
82
  if dst_address.addrmode == t.AddrMode.IEEE:
83
83
  addr_mode = t_zboss.BindAddrMode.IEEE
84
- dst_eui64 = t.Addressing.IEEE
84
+ dst_eui64 = dst_address.ieee
85
85
  # ZBOSS does not support the NWK mode for binding
86
86
  elif dst_address.addrmode == t.AddrMode.NWK:
87
87
  self.log(
@@ -114,7 +114,7 @@ class ZbossZDO(ZigpyZDO):
114
114
  )
115
115
  )
116
116
  if res.StatusCode != 0:
117
- return (res.StatusCode % 0xFF, dst_address, cluster)
117
+ return (res.StatusCode, dst_address, cluster)
118
118
 
119
119
  return (zdo_t.Status.SUCCESS, dst_address, cluster)
120
120
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zigpy-zboss
3
- Version: 2.0.2
3
+ Version: 2.0.3
4
4
  Summary: A library for zigpy which communicates with Nordic nRF52 radios running ZBOSS NCP
5
5
  Author-email: Damien Kastner <damien.kastner@kardia.no>
6
6
  License: GPL-3.0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes