support slices in FeaturesArray and KeysArray

This commit is contained in:
Daniel Pavel 2012-12-13 03:34:39 +02:00
parent 2d338ffbfb
commit b99ccdf612
1 changed files with 26 additions and 18 deletions

View File

@ -182,17 +182,21 @@ class FeaturesArray(object):
def __getitem__(self, index): def __getitem__(self, index):
if self._check(): if self._check():
assert type(index) == int if isinstance(index, int):
if index < 0 or index >= len(self.features): if index < 0 or index >= len(self.features):
raise IndexError(index) raise IndexError(index)
if self.features[index] is None: if self.features[index] is None:
feature = self.device.feature_request(FEATURE.FEATURE_SET, 0x10, index) feature = self.device.feature_request(FEATURE.FEATURE_SET, 0x10, index)
if feature: if feature:
feature, = _unpack(b'!H', feature[:2]) feature, = _unpack(b'!H', feature[:2])
self.features[index] = FEATURE[feature] 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): def __contains__(self, value):
if self._check(): if self._check():
@ -262,17 +266,21 @@ class KeysArray(object):
self.keys = [None] * count self.keys = [None] * count
def __getitem__(self, index): def __getitem__(self, index):
assert type(index) == int if isinstance(index, int):
if index < 0 or index >= len(self.keys): if index < 0 or index >= len(self.keys):
raise IndexError(index) raise IndexError(index)
if self.keys[index] is None: if self.keys[index] is None:
keydata = feature_request(self.device, FEATURE.REPROGRAMMABLE_KEYS, 0x10, index) keydata = feature_request(self.device, FEATURE.REPROGRAMMABLE_KEYS, 0x10, index)
if keydata: if keydata:
key, key_task, flags = _unpack(b'!HHB', keydata[:5]) key, key_task, flags = _unpack(b'!HHB', keydata[:5])
self.keys[index] = _ReprogrammableKeyInfo(index, KEY[key], KEY[key_task], flags) 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): def index(self, value):
for index, k in enumerate(self.keys): for index, k in enumerate(self.keys):