Make BooleanValidator accept bytes too besides int
Previously, only the first parameter byte can be read or written. After this patch, it is possible to select/write more bytes by specifying a mask of type bytes with the appropriate length.
This commit is contained in:
parent
a3599b53bb
commit
6c28cedf23
|
@ -121,9 +121,18 @@ class _BooleanValidator(object):
|
|||
self.mask = mask
|
||||
self.write_returns_value = write_returns_value
|
||||
|
||||
def _validate_value(self, reply_bytes, expected_value):
|
||||
if isinstance(expected_value, int):
|
||||
return ord(reply_bytes[:1]) & self.mask == expected_value
|
||||
else:
|
||||
for i in range(0, len(self.mask)):
|
||||
masked_value = ord(reply_bytes[i:i+1]) & ord(self.mask[i:i+1])
|
||||
if masked_value != ord(expected_value[i:i+1]):
|
||||
return False
|
||||
return True
|
||||
|
||||
def validate_read(self, reply_bytes):
|
||||
reply_value = ord(reply_bytes[:1]) & self.mask
|
||||
return reply_value == self.true_value
|
||||
return self._validate_value(reply_bytes, self.true_value)
|
||||
|
||||
def prepare_write(self, value):
|
||||
# FIXME: this does not work right when there is more than one flag in
|
||||
|
@ -132,8 +141,7 @@ class _BooleanValidator(object):
|
|||
|
||||
def validate_write(self, value, reply_bytes):
|
||||
if self.write_returns_value:
|
||||
reply_value = ord(reply_bytes[:1]) & self.mask
|
||||
return reply_value == self.true_value
|
||||
return self._validate_value(reply_bytes, self.true_value)
|
||||
|
||||
# just assume the value was written correctly, otherwise there would not
|
||||
# be any reply_bytes to check
|
||||
|
|
Loading…
Reference in New Issue