Coverage for src/bluetooth_sig/types/context.py: 100%

16 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-10-30 00:10 +0000

1"""Context objects used during characteristic parsing.""" 

2 

3from __future__ import annotations 

4 

5from collections.abc import Mapping 

6 

7import msgspec 

8 

9from .descriptor_types import DescriptorData 

10from .protocols import CharacteristicDataProtocol 

11 

12 

13class DeviceInfo(msgspec.Struct, kw_only=True): 

14 """Basic device metadata available to parsers.""" 

15 

16 address: str = "" 

17 name: str = "" 

18 manufacturer_data: dict[int, bytes] = msgspec.field(default_factory=dict) 

19 service_uuids: list[str] = msgspec.field(default_factory=list) 

20 

21 

22class CharacteristicContext(msgspec.Struct, kw_only=True): 

23 """Runtime context passed into parsers. 

24 

25 Attributes: 

26 device_info: Basic device metadata (address, name, manufacturer data). 

27 advertisement: Raw advertisement bytes if available. 

28 other_characteristics: Mapping from characteristic UUID string to 

29 previously-parsed characteristic result (typical value is 

30 `bluetooth_sig.core.CharacteristicData`). Parsers may consult this 

31 mapping to implement multi-characteristic decoding. 

32 descriptors: Mapping from descriptor UUID string to parsed descriptor data. 

33 Provides access to characteristic descriptors during parsing. 

34 raw_service: Optional raw service-level payload when applicable. 

35 

36 """ 

37 

38 device_info: DeviceInfo | None = None 

39 advertisement: bytes = b"" 

40 other_characteristics: Mapping[str, CharacteristicDataProtocol] | None = None 

41 descriptors: Mapping[str, DescriptorData] | None = None 

42 raw_service: bytes = b""