Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def max_length_validator(self, x):
if len(x) > self.value:
yield XMLSchemaValidationError(self, x, "length cannot be greater than %r." % self.value)
def hex_max_length_validator(self, x):
if len(x) > self.value * 2:
yield XMLSchemaValidationError(self, x, "binary length cannot be greater than %r." % self.value)
def base64_max_length_validator(self, x):
x = x.replace(' ', '')
if (len(x) // 4 * 3 - (x[-1] == '=') - (x[-2] == '=')) > self.value:
yield XMLSchemaValidationError(self, x, "binary length cannot be greater than %r." % self.value)
class XsdMinInclusiveFacet(XsdFacet):
"""
XSD *minInclusive* facet.
..
Content: (annotation?)
"""
_ADMITTED_TAGS = XSD_MIN_INCLUSIVE,
def _parse_value(self, elem):
try:
self.value = self.base_type.primitive_type.decode(elem.attrib['value'])
def min_length_validator(self, x):
if len(x) < self.value:
yield XMLSchemaValidationError(self, x, "length cannot be lesser than %r." % self.value)
def hex_min_length_validator(self, x):
if len(x) < self.value * 2:
yield XMLSchemaValidationError(self, x, "binary length cannot be lesser than %r." % self.value)
def base64_min_length_validator(self, x):
x = x.replace(' ', '')
if (len(x) // 4 * 3 - (x[-1] in ('=', 61)) - (x[-2] in ('=', 61))) < self.value:
yield XMLSchemaValidationError(self, x, "binary length cannot be lesser than %r." % self.value)
class XsdMaxLengthFacet(XsdFacet):
"""
XSD *maxLength* facet.
..
Content: (annotation?)
"""
_ADMITTED_TAGS = XSD_MAX_LENGTH,
def _parse_value(self, elem):
self.value = int(elem.attrib['value'])
if self.base_value is not None and self.value > self.base_value:
def length_validator(self, x):
if len(x) != self.value:
yield XMLSchemaValidationError(self, x, "length has to be %r." % self.value)
def hex_length_validator(self, x):
if len(x) != self.value * 2:
yield XMLSchemaValidationError(self, x, "binary length has to be %r." % self.value)
def base64_length_validator(self, x):
x = x.replace(' ', '')
if (len(x) // 4 * 3 - (x[-1] == '=') - (x[-2] == '=')) != self.value:
yield XMLSchemaValidationError(self, x, "binary length has to be %r." % self.value)
class XsdMinLengthFacet(XsdFacet):
"""
XSD *minLength* facet.
..
Content: (annotation?)
"""
_ADMITTED_TAGS = XSD_MIN_LENGTH,
def _parse_value(self, elem):
self.value = int(elem.attrib['value'])
if self.base_value is not None and self.value < self.base_value:
self.parse_error("fractionDigits facet can be applied only to types derived from xs:decimal")
def _parse_value(self, elem):
self.value = int(elem.attrib['value'])
if self.value < 0:
raise ValueError("'value' must be greater or equal than 0")
elif self.value > 0 and self.base_type.is_derived(self.schema.builtin_types()['integer']):
raise ValueError("fractionDigits facet value has to be 0 for types derived from xs:integer.")
self.validator = self.fraction_digits_validator
def fraction_digits_validator(self, x):
if len(str(x).strip('0').partition('.')[2]) > self.value:
yield XMLSchemaValidationError(self, x, "the number of fraction digits is greater than %r." % self.value)
class XsdExplicitTimezoneFacet(XsdFacet):
"""
XSD 1.1 *explicitTimezone* facet.
..
Content: (annotation?)
"""
_ADMITTED_TAGS = XSD_EXPLICIT_TIMEZONE,
def _parse_value(self, elem):
self.value = value = elem.attrib['value']
if value == 'prohibited':
facet = self.base_type.get_facet(XSD_MIN_INCLUSIVE)
if facet is not None and facet.value > self.value:
self.parse_error("minimum value of base_type is greater")
facet = self.base_type.get_facet(XSD_MAX_EXCLUSIVE)
if facet is not None and facet.value <= self.value:
self.parse_error("maximum value of base_type is lesser")
facet = self.base_type.get_facet(XSD_MAX_INCLUSIVE)
if facet is not None and facet.value <= self.value:
self.parse_error("maximum value of base_type is lesser")
def validator(self, x):
if x <= self.value:
yield XMLSchemaValidationError(self, x, "value has to be greater than %r." % self.value)
class XsdMaxInclusiveFacet(XsdFacet):
"""
XSD *maxInclusive* facet.
..
Content: (annotation?)
"""
_ADMITTED_TAGS = XSD_MAX_INCLUSIVE,
def _parse_value(self, elem):
try:
self.value = self.base_type.primitive_type.decode(elem.attrib['value'])
facet = self.base_type.get_facet(XSD_MIN_INCLUSIVE)
if facet is not None and facet.value >= self.value:
self.parse_error("minimum value of base_type is greater")
facet = self.base_type.get_facet(XSD_MAX_EXCLUSIVE)
if facet is not None and facet.value < self.value:
self.parse_error("maximum value of base_type is lesser")
facet = self.base_type.get_facet(XSD_MAX_INCLUSIVE)
if facet is not None and facet.value < self.value:
self.parse_error("maximum value of base_type is lesser")
def validator(self, x):
if x >= self.value:
yield XMLSchemaValidationError(self, x, "value has to be lesser than %r" % self.value)
class XsdTotalDigitsFacet(XsdFacet):
"""
XSD *totalDigits* facet.
..
Content: (annotation?)
"""
_ADMITTED_TAGS = XSD_TOTAL_DIGITS,
def _parse_value(self, elem):
self.value = int(elem.attrib['value'])
if self.value < 1:
def __init__(self, elem, schema, parent, base_type):
XsdFacet.__init__(self, elem, schema, parent, base_type)
tag = self.elem.tag
while True:
try:
return base_type.facets[tag]
except (AttributeError, KeyError):
if hasattr(base_type, 'base_type'):
base_type = base_type.base_type
else:
return None
@staticmethod
def validator(_):
return ()
class XsdWhiteSpaceFacet(XsdFacet):
"""
XSD *whiteSpace* facet.
..
Content: (annotation?)
"""
_ADMITTED_TAGS = XSD_WHITE_SPACE,
def _parse_value(self, elem):
self.value = value = elem.attrib['value']
if self.base_value == 'collapse' and value in ('preserve', 'replace'):
facet = self.base_type.get_facet(XSD_MIN_INCLUSIVE)
if facet is not None and facet.value > self.value:
self.parse_error("minimum value of base_type is greater")
facet = self.base_type.get_facet(XSD_MAX_EXCLUSIVE)
if facet is not None and facet.value <= self.value:
self.parse_error("maximum value of base_type is lesser")
facet = self.base_type.get_facet(XSD_MAX_INCLUSIVE)
if facet is not None and facet.value < self.value:
self.parse_error("maximum value of base_type is lesser")
def validator(self, x):
if x < self.value:
yield XMLSchemaValidationError(self, x, "value has to be greater or equal than %r." % self.value)
class XsdMinExclusiveFacet(XsdFacet):
"""
XSD *minExclusive* facet.
..
Content: (annotation?)
"""
_ADMITTED_TAGS = XSD_MIN_EXCLUSIVE,
def _parse_value(self, elem):
try:
self.value = self.base_type.primitive_type.decode(elem.attrib['value'])
def __repr__(self):
if len(self.enumeration) > 5:
return '%s(%r)' % (
self.__class__.__name__, '[%s, ...]' % ', '.join(map(repr, self.enumeration[:5]))
)
else:
return '%s(%r)' % (self.__class__.__name__, self.enumeration)
def __call__(self, value):
if value not in self.enumeration:
yield XMLSchemaValidationError(
self, value, reason="invalid value %r, it must be one of %r" % (value, self.enumeration)
)
class XsdPatternFacets(MutableSequence, XsdFacet):
"""
Sequence of XSD *pattern* facets. Values are validates if match any of patterns.
..
"""
_ADMITTED_TAGS = {XSD_PATTERN}
def __init__(self, elem, schema, parent, base_type):
XsdFacet.__init__(self, elem, schema, parent, base_type)
def _parse(self):