From b99ccdf6125b3b32ecaa289b8f43271db24ae35f Mon Sep 17 00:00:00 2001 From: Daniel Pavel Date: Thu, 13 Dec 2012 03:34:39 +0200 Subject: [PATCH] support slices in FeaturesArray and KeysArray --- lib/logitech/unifying_receiver/hidpp20.py | 44 +++++++++++++---------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/lib/logitech/unifying_receiver/hidpp20.py b/lib/logitech/unifying_receiver/hidpp20.py index 0820711a..4803ce7a 100644 --- a/lib/logitech/unifying_receiver/hidpp20.py +++ b/lib/logitech/unifying_receiver/hidpp20.py @@ -182,17 +182,21 @@ class FeaturesArray(object): def __getitem__(self, index): if self._check(): - assert type(index) == int - if index < 0 or index >= len(self.features): - raise IndexError(index) + if isinstance(index, int): + if index < 0 or index >= len(self.features): + raise IndexError(index) - if self.features[index] is None: - feature = self.device.feature_request(FEATURE.FEATURE_SET, 0x10, index) - if feature: - feature, = _unpack(b'!H', feature[:2]) - self.features[index] = FEATURE[feature] + if self.features[index] is None: + feature = self.device.feature_request(FEATURE.FEATURE_SET, 0x10, index) + if feature: + feature, = _unpack(b'!H', feature[:2]) + self.features[index] = FEATURE[feature] - return self.features[index] + return self.features[index] + + elif isinstance(index, slice): + indices = index.indices(len(self.features)) + return [self.__getitem__(i) for i in range(*indices)] def __contains__(self, value): if self._check(): @@ -262,17 +266,21 @@ class KeysArray(object): self.keys = [None] * count def __getitem__(self, index): - assert type(index) == int - if index < 0 or index >= len(self.keys): - raise IndexError(index) + if isinstance(index, int): + if index < 0 or index >= len(self.keys): + raise IndexError(index) - if self.keys[index] is None: - keydata = feature_request(self.device, FEATURE.REPROGRAMMABLE_KEYS, 0x10, index) - if keydata: - key, key_task, flags = _unpack(b'!HHB', keydata[:5]) - self.keys[index] = _ReprogrammableKeyInfo(index, KEY[key], KEY[key_task], flags) + if self.keys[index] is None: + keydata = feature_request(self.device, FEATURE.REPROGRAMMABLE_KEYS, 0x10, index) + if keydata: + key, key_task, flags = _unpack(b'!HHB', keydata[:5]) + self.keys[index] = _ReprogrammableKeyInfo(index, KEY[key], KEY[key_task], flags) - return self.keys[index] + return self.keys[index] + + elif isinstance(index, slice): + indices = index.indices(len(self.keys)) + return [self.__getitem__(i) for i in range(*indices)] def index(self, value): for index, k in enumerate(self.keys):