sok-ble 0.1.5__py3-none-any.whl → 0.1.8__py3-none-any.whl

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.
sok_ble/exceptions.py CHANGED
@@ -8,4 +8,3 @@ class BLEConnectionError(SokError):
8
8
 
9
9
  class InvalidResponseError(SokError):
10
10
  """Raised when an invalid response is received."""
11
-
@@ -10,8 +10,8 @@ from contextlib import asynccontextmanager
10
10
  from typing import AsyncIterator, Optional
11
11
 
12
12
  import async_timeout
13
- from bleak import BleakError
14
13
  from bleak.backends.device import BLEDevice
14
+ from bleak.exc import BleakError
15
15
 
16
16
  from sok_ble.const import UUID_RX, UUID_TX, _sok_command
17
17
  from sok_ble.exceptions import BLEConnectionError
@@ -26,6 +26,7 @@ try:
26
26
  )
27
27
  except Exception: # pragma: no cover - optional dependency
28
28
  from bleak import BleakClient as BleakClientWithServiceCache
29
+
29
30
  establish_connection = None # type: ignore[misc]
30
31
 
31
32
 
@@ -54,6 +55,8 @@ class SokBluetoothDevice:
54
55
  """Connect to the device and yield a BLE client."""
55
56
  logger.debug("Connecting to %s", self._ble_device.address)
56
57
  last_err: Exception | None = None
58
+ client: BleakClientWithServiceCache | None = None
59
+
57
60
  for attempt in range(3):
58
61
  try:
59
62
  if establish_connection:
@@ -65,7 +68,8 @@ class SokBluetoothDevice:
65
68
  )
66
69
  else:
67
70
  client = BleakClientWithServiceCache(
68
- self._ble_device, adapter=self._adapter
71
+ self._ble_device,
72
+ adapter=self._adapter,
69
73
  )
70
74
  await client.connect()
71
75
 
@@ -73,15 +77,7 @@ class SokBluetoothDevice:
73
77
  async with async_timeout.timeout(5):
74
78
  _ = client.services
75
79
  await asyncio.sleep(0.15)
76
-
77
- try:
78
- yield client
79
- finally:
80
- await client.disconnect()
81
- logger.debug(
82
- "Disconnected from %s", self._ble_device.address
83
- )
84
- return
80
+ break
85
81
  except (BleakError, asyncio.TimeoutError) as err:
86
82
  last_err = err
87
83
  logger.debug(
@@ -91,10 +87,17 @@ class SokBluetoothDevice:
91
87
  err,
92
88
  )
93
89
  await asyncio.sleep(0.5)
94
-
95
- raise BLEConnectionError(
96
- f"Unable to establish GATT connection to {self._ble_device.address}"
97
- ) from last_err
90
+ else:
91
+ raise BLEConnectionError(
92
+ f"Unable to establish GATT connection to {self._ble_device.address}"
93
+ ) from last_err
94
+
95
+ assert client is not None
96
+ try:
97
+ yield client
98
+ finally:
99
+ await client.disconnect()
100
+ logger.debug("Disconnected from %s", self._ble_device.address)
98
101
 
99
102
  async def _send_command(
100
103
  self, client: BleakClientWithServiceCache, cmd: int, expected: int
sok_ble/sok_parser.py CHANGED
@@ -14,19 +14,20 @@ logger = logging.getLogger(__name__)
14
14
 
15
15
  # Endian helper functions copied from the reference addon
16
16
 
17
+
17
18
  def get_le_short(data: Sequence[int] | bytes | bytearray, offset: int) -> int:
18
19
  """Read a little-endian signed short."""
19
- return struct.unpack_from('<h', bytes(data), offset)[0]
20
+ return struct.unpack_from("<h", bytes(data), offset)[0]
20
21
 
21
22
 
22
23
  def get_le_ushort(data: Sequence[int] | bytes | bytearray, offset: int) -> int:
23
24
  """Read a little-endian unsigned short."""
24
- return struct.unpack_from('<H', bytes(data), offset)[0]
25
+ return struct.unpack_from("<H", bytes(data), offset)[0]
25
26
 
26
27
 
27
28
  def get_le_int3(data: Sequence[int] | bytes | bytearray, offset: int) -> int:
28
29
  """Read a 3-byte little-endian signed integer."""
29
- b0, b1, b2 = bytes(data)[offset:offset + 3]
30
+ b0, b1, b2 = bytes(data)[offset : offset + 3]
30
31
  val = b0 | (b1 << 8) | (b2 << 16)
31
32
  if val & 0x800000:
32
33
  val -= 0x1000000
@@ -35,7 +36,7 @@ def get_le_int3(data: Sequence[int] | bytes | bytearray, offset: int) -> int:
35
36
 
36
37
  def get_be_uint3(data: Sequence[int] | bytes | bytearray, offset: int) -> int:
37
38
  """Read a 3-byte big-endian unsigned integer."""
38
- b0, b1, b2 = bytes(data)[offset:offset + 3]
39
+ b0, b1, b2 = bytes(data)[offset : offset + 3]
39
40
  return (b0 << 16) | (b1 << 8) | b2
40
41
 
41
42
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sok-ble
3
- Version: 0.1.5
3
+ Version: 0.1.8
4
4
  Summary: SOK BLE battery interface library
5
5
  Project-URL: Homepage, https://github.com/IAmTheMitchell/sok-ble
6
6
  Project-URL: Bug Tracker, https://github.com/IAmTheMitchell/sok-ble/issues
@@ -19,7 +19,8 @@ Description-Content-Type: text/markdown
19
19
 
20
20
  # SOK BLE
21
21
 
22
- ![CI](https://github.com/IAmTheMitchell/sok-ble/actions/workflows/ci.yml/badge.svg)
22
+ ![Tests](https://github.com/IAmTheMitchell/sok-ble/actions/workflows/test.yml/badge.svg)
23
+ ![Release](https://github.com/IAmTheMitchell/sok-ble/actions/workflows/release.yml/badge.svg)
23
24
 
24
25
  Python library for interacting with SOK Bluetooth-enabled batteries.
25
26
 
@@ -42,5 +43,6 @@ asyncio.run(main())
42
43
  ```
43
44
 
44
45
  ## References
46
+
45
47
  [@zuccaro's comment](https://github.com/Louisvdw/dbus-serialbattery/issues/350#issuecomment-1500658941)
46
- [Bluetooth-Devices/inkbird-ble](https://github.com/Bluetooth-Devices/inkbird-ble)
48
+ [Bluetooth-Devices/inkbird-ble](https://github.com/Bluetooth-Devices/inkbird-ble)
@@ -0,0 +1,9 @@
1
+ sok_ble/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ sok_ble/const.py,sha256=mHtJTbWz_dG3v1lhZrLDzMf-QAG9v5QWlHU9ZKsyYdg,998
3
+ sok_ble/exceptions.py,sha256=_4Fyb-2Ncct2RGjLe1em2M7_e5QcmjVJ92KxtAsbZlk,246
4
+ sok_ble/sok_bluetooth_device.py,sha256=H2FLNtMDe-jfMxao21WAft2myErTnuZvRFsRgB7dqms,8204
5
+ sok_ble/sok_parser.py,sha256=Wcn9oWVrHT1gLU7WB-3rUd2UpVfFwLz_gKQrDYE0H4M,4342
6
+ sok_ble-0.1.8.dist-info/METADATA,sha256=v-Pzb7-hx_p2rI6Uo8izRQiObH36XdSDkBHbZA8c0OI,1591
7
+ sok_ble-0.1.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
8
+ sok_ble-0.1.8.dist-info/licenses/LICENSE,sha256=OoKRExpBDDpMbUut-KaARncGL5U8utex4D2ncZVtVF8,11346
9
+ sok_ble-0.1.8.dist-info/RECORD,,
@@ -1,9 +0,0 @@
1
- sok_ble/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- sok_ble/const.py,sha256=mHtJTbWz_dG3v1lhZrLDzMf-QAG9v5QWlHU9ZKsyYdg,998
3
- sok_ble/exceptions.py,sha256=7H1yUqqnrKyi3LwxRCMF7RkuGp_rgdy9j35nrMOgz44,247
4
- sok_ble/sok_bluetooth_device.py,sha256=agF3lfbkCiMRNrsa3MW7lAEC2njEguum0NnbhdhWntk,8143
5
- sok_ble/sok_parser.py,sha256=8yug65x3RdkLKbYlP-fEWiysaHByyenKV_gAzhIKeU0,4337
6
- sok_ble-0.1.5.dist-info/METADATA,sha256=t8cQVUp3wTjxOpZfLH2VQTx-inVP0YYdJgXKc0utC9U,1490
7
- sok_ble-0.1.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
8
- sok_ble-0.1.5.dist-info/licenses/LICENSE,sha256=OoKRExpBDDpMbUut-KaARncGL5U8utex4D2ncZVtVF8,11346
9
- sok_ble-0.1.5.dist-info/RECORD,,