datatypes: make length checks more consistent
Change-Id: If5a5422675571506085c73ff2051ba06f4fb37b2 Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/37844 Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de> Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch> Reviewed-by: Georg Brandl <g.brandl@fz-juelich.de>
This commit is contained in:
@@ -587,10 +587,10 @@ class BLOBType(DataType):
|
||||
size = len(value)
|
||||
if size < self.minbytes:
|
||||
raise RangeError(
|
||||
f'{shortrepr(value)!r} (length {size}) must be at least {self.minbytes} bytes long')
|
||||
f'blob {shortrepr(value)!r} must be at least {self.minbytes} bytes long (got {size})')
|
||||
if size > self.maxbytes:
|
||||
raise RangeError(
|
||||
f'{shortrepr(value)!r} (length {size}) must be at most {self.maxbytes} bytes long')
|
||||
f'blob {shortrepr(value)!r} must be at most {self.maxbytes} bytes long (got {size})')
|
||||
return value
|
||||
|
||||
def export_value(self, value):
|
||||
@@ -655,13 +655,13 @@ class StringType(DataType):
|
||||
size = len(value)
|
||||
if size < self.minchars:
|
||||
raise RangeError(
|
||||
f'{shortrepr(value)} must be at least {self.minchars} chars long')
|
||||
f'string {shortrepr(value)} must be at least {self.minchars} chars long (got {size})')
|
||||
if size > self.maxchars:
|
||||
raise RangeError(
|
||||
f'{shortrepr(value)} must be at most {self.maxchars} chars long')
|
||||
f'string {shortrepr(value)} must be at most {self.maxchars} chars long (got {size})')
|
||||
if '\0' in value:
|
||||
raise RangeError(
|
||||
'Strings are not allowed to embed a \\0! Use a Blob instead')
|
||||
'strings are not allowed to embed a null byte, Use a Blob instead')
|
||||
return value
|
||||
|
||||
def export_value(self, value):
|
||||
@@ -807,13 +807,14 @@ class ArrayOf(DataType):
|
||||
|
||||
def check_type(self, value):
|
||||
try:
|
||||
size = len(value)
|
||||
# check number of elements
|
||||
if self.minlen is not None and len(value) < self.minlen:
|
||||
if self.minlen is not None and size < self.minlen:
|
||||
raise RangeError(
|
||||
f'array too small, needs at least {self.minlen} elements')
|
||||
if self.maxlen is not None and len(value) > self.maxlen:
|
||||
f'array must have at least {self.minlen} elements (has {size})')
|
||||
if self.maxlen is not None and size > self.maxlen:
|
||||
raise RangeError(
|
||||
f'array too big, holds at most {self.maxlen} elements')
|
||||
f'array must have at most {self.maxlen} elements (has {size})')
|
||||
except TypeError:
|
||||
raise WrongTypeError(f'{type(value).__name__} can not be converted to ArrayOf DataType') from None
|
||||
|
||||
@@ -1191,7 +1192,7 @@ class ValueType(SimpleDataType):
|
||||
try:
|
||||
return self.validator(value)
|
||||
except Exception as e:
|
||||
raise ConfigError(f'Validator {self.validator} raised {e!r} for value {value}') from e
|
||||
raise ConfigError(f'Validator {self.validator} raised {e!r} for value {shortrepr(value)}') from e
|
||||
return value
|
||||
|
||||
def copy(self):
|
||||
|
||||
Reference in New Issue
Block a user