Skip to content

Commit ad4f2d3

Browse files
Merge pull request #116 from alexwhittemore/master
Modified ManufacturerDataField to return a namedtuple if possible
2 parents e9c979e + e3e25cd commit ad4f2d3

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

adafruit_ble/advertising/standard.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"""
1313

1414
import struct
15-
from collections import OrderedDict
15+
from collections import OrderedDict, namedtuple
1616

1717
from . import (
1818
Advertisement,
@@ -261,6 +261,9 @@ def __init__(self, key, value_format, field_names=None):
261261
)
262262
self._entry_length = struct.calcsize(value_format)
263263
self.field_names = field_names
264+
if field_names:
265+
# Mostly, this is to raise a ValueError if field_names has invalid entries
266+
self.mdf_tuple = namedtuple("mdf_tuple", self.field_names)
264267

265268
def __get__(self, obj, cls):
266269
if obj is None:
@@ -272,6 +275,10 @@ def __get__(self, obj, cls):
272275
unpacked = struct.unpack_from(self._format, packed)
273276
if self.element_count == 1:
274277
unpacked = unpacked[0]
278+
if self.field_names and len(self.field_names) == len(unpacked):
279+
# If we have field names, we should already have a namedtuple type to use
280+
# Unless the element count is off, which... werid.
281+
return self.mdf_tuple(*unpacked)
275282
return unpacked
276283
if len(packed) % self._entry_length != 0:
277284
raise RuntimeError("Invalid data length")

0 commit comments

Comments
 (0)