Coverage for src / bluetooth_sig / gatt / characteristics / http_status_code.py: 100%
25 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-03 16:41 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-03 16:41 +0000
1"""HTTP Status Code characteristic (0x2AB8)."""
3from __future__ import annotations
5from enum import IntFlag
7import msgspec
9from ..context import CharacteristicContext
10from .base import BaseCharacteristic
11from .utils import DataParser
14class HTTPDataStatus(IntFlag):
15 """HTTP data status flags."""
17 HEADERS_RECEIVED = 0x01
18 HEADERS_TRUNCATED = 0x02
19 BODY_RECEIVED = 0x04
20 BODY_TRUNCATED = 0x08
23class HTTPStatusCodeData(msgspec.Struct, frozen=True, kw_only=True):
24 """Parsed data from HTTP Status Code characteristic."""
26 status_code: int
27 data_status: HTTPDataStatus
30class HTTPStatusCodeCharacteristic(BaseCharacteristic[HTTPStatusCodeData]):
31 """HTTP Status Code characteristic (0x2AB8).
33 org.bluetooth.characteristic.http_status_code
35 Reports the HTTP status code and data status of the last HTTP operation.
36 """
38 expected_length: int = 3
40 def _decode_value(
41 self, data: bytearray, ctx: CharacteristicContext | None = None, *, validate: bool = True
42 ) -> HTTPStatusCodeData:
43 status_code = DataParser.parse_int16(data, 0, signed=False)
44 data_status = HTTPDataStatus(DataParser.parse_int8(data, 2, signed=False))
46 return HTTPStatusCodeData(
47 status_code=status_code,
48 data_status=data_status,
49 )
51 def _encode_value(self, data: HTTPStatusCodeData) -> bytearray:
52 result = bytearray()
53 result.extend(DataParser.encode_int16(data.status_code, signed=False))
54 result.extend(DataParser.encode_int8(int(data.data_status), signed=False))
55 return result