def validate(self, value, render_path=None): """Validate that the value is valid""" if self.accepts_multiple and isinstance(value, list): # Validate bounds if len(value) < self.min_occurs: raise exceptions.ValidationError( "Expected at least %d items (minOccurs check) %d items found." % (self.min_occurs, len(value)), path=render_path, ) elif self.max_occurs != "unbounded" and len( value) > self.max_occurs: raise exceptions.ValidationError( "Expected at most %d items (maxOccurs check) %d items found." % (self.max_occurs, len(value)), path=render_path, ) for val in value: self._validate_item(val, render_path) else: if not self.is_optional and not self.nillable and value in ( None, NotSet): raise exceptions.ValidationError("Missing element %s" % (self.name), path=render_path) self._validate_item(value, render_path)
def _validate_item(self, value, render_path): if value is None: # can be an lxml element return # Check if we received a proper value object. If we receive the wrong # type then return a nice error message if self.restrict: expected_types = (etree._Element, dict) + self.restrict.accepted_types else: expected_types = (etree._Element, dict, AnyObject) if value in (None, NotSet): if not self.is_optional: raise exceptions.ValidationError( "Missing element %s" % (self.name), path=render_path ) elif not isinstance(value, expected_types): type_names = ["%s.%s" % (t.__module__, t.__name__) for t in expected_types] err_message = "Any element received object of type %r, expected %s" % ( type(value).__name__, " or ".join(type_names), ) raise TypeError( "\n".join( ( err_message, "See http://docs.python-zeep.org/en/master/datastructures.html" "#any-objects for more information", ) ) )
def validate(self, value, render_path): try: self.type.validate(value, required=self.required) except exceptions.ValidationError as exc: raise exceptions.ValidationError( "The attribute %s is not valid: %s" % (self.qname, exc.message), path=render_path, )
def _validate_item(self, value, render_path): if self.nillable and value in (None, NotSet): return try: self.type.validate(value, required=True) except exceptions.ValidationError as exc: raise exceptions.ValidationError( "The element %s is not valid: %s" % (self.qname, exc.message), path=render_path, )
def validate(self, value, render_path): if self.accepts_multiple and isinstance(value, list): # Validate bounds if len(value) < self.min_occurs: raise exceptions.ValidationError( "Expected at least %d items (minOccurs check)" % self.min_occurs ) if self.max_occurs != "unbounded" and len(value) > self.max_occurs: raise exceptions.ValidationError( "Expected at most %d items (maxOccurs check)" % self.min_occurs ) for val in value: self._validate_item(val, render_path) else: if not self.is_optional and value in (None, NotSet): raise exceptions.ValidationError("Missing element for Any") self._validate_item(value, render_path)