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:
Peter Wu 2013-04-27 15:12:55 +02:00
parent a3599b53bb
commit 6c28cedf23
1 changed files with 12 additions and 4 deletions

View File

@ -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