Skip to content

Commit 460b627

Browse files
Modified ManufacturerDataField to return a namedtuple if defined with names
1 parent 8bb1210 commit 460b627

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

adafruit_ble/advertising/standard.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"""
3030

3131
import struct
32-
from collections import OrderedDict
32+
from collections import OrderedDict, namedtuple
3333

3434
from . import (
3535
Advertisement,
@@ -268,6 +268,9 @@ def __init__(self, key, value_format, field_names=None):
268268
)
269269
self._entry_length = struct.calcsize(value_format)
270270
self.field_names = field_names
271+
if field_names:
272+
# Mostly, this is to raise a ValueError if the passed-in field_names has invalid entries for later use.
273+
self.MDFTuple = namedtuple("MDFTuple", self.field_names)
271274

272275
def __get__(self, obj, cls):
273276
if obj is None:
@@ -279,7 +282,12 @@ def __get__(self, obj, cls):
279282
unpacked = struct.unpack_from(self._format, packed)
280283
if self.element_count == 1:
281284
unpacked = unpacked[0]
282-
return unpacked
285+
if self.field_names and len(self.field_names) == len(unpacked):
286+
# If we have field names, use them to make a namedtuple, and we should already have that defined.
287+
# Unless the element count is off, which... werid.
288+
return self.MDFTuple(*unpacked)
289+
else:
290+
return unpacked
283291
if len(packed) % self._entry_length != 0:
284292
raise RuntimeError("Invalid data length")
285293
entry_count = len(packed) // self._entry_length

0 commit comments

Comments
 (0)