def test_can_generate_schema_xml_containing_types_with_pattern_restriction( self): ns = 'http://soap.example/pattern.xsd' class Container(xsd.ComplexType): code = xsd.Element(xsd.String(pattern='[0-9]{0,5}')) schema = xsd.Schema( ns, location=ns, elementFormDefault=xsd.ElementFormDefault.QUALIFIED, complexTypes=(Container, ), elements={ 'foo': xsd.Element(Container), }, ) # previously this would fail xsd_element = generate_xsd(schema) xmlschema = etree.XMLSchema(xsd_element) valid_xml = '<foo xmlns="%s"><code>1234</code></foo>' % ns def is_valid(s): return xmlschema.validate(etree.fromstring(s)) self.assertIs(is_valid(valid_xml), True) bad_xml = '<foo xmlns="%s"><code>abc</code></foo>' % ns self.assertIs(is_valid(bad_xml), False)
def assert_is_invalid(self, xml_string, soapfish_schema): xml = etree.fromstring(xml_string) xmlschema = etree.XMLSchema(generate_xsd(soapfish_schema)) assert_false( xmlschema.validate(xml), message="XML should fail to validate: %r" % xml_string )
def assert_is_valid(self, xml_string, soapfish_schema): xml = etree.fromstring(xml_string) xmlschema = etree.XMLSchema(generate_xsd(soapfish_schema)) assert_true( xmlschema.validate(xml), message="XML did not validate: %r" % xml_string )
def test_can_generate_schema_xml_containing_types_with_pattern_restriction(self): ns = 'http://soap.example/pattern.xsd' class Container(xsd.ComplexType): code = xsd.Element(xsd.String(pattern='[0-9]{0,5}')) schema = xsd.Schema(ns, location=ns, elementFormDefault=xsd.ElementFormDefault.QUALIFIED, complexTypes=( Container, ), elements={ 'foo': xsd.Element(Container), }, ) # previously this would fail xsd_element = generate_xsd(schema) xmlschema = etree.XMLSchema(xsd_element) valid_xml = '<foo xmlns="%s"><code>1234</code></foo>' % ns def is_valid(s): return xmlschema.validate(etree.fromstring(s)) assert_true(is_valid(valid_xml)) bad_xml = '<foo xmlns="%s"><code>abc</code></foo>' % ns assert_false(is_valid(bad_xml))
def test_required_only(self): XMLSchema = etree.XMLSchema(py2xsd.generate_xsd(Schema)) ops = Ops.parsexml(XML_REQUIRED_ONLY, XMLSchema) self.assertEqual("N608WB", ops.aircraft) self.assertEqual("123123", ops.flight_number) self.assertEqual("COMMERCIAL", ops.type) self.assertEqual("ICAO", ops.takeoff_airport.code_type) self.assertEqual("EGLL", ops.takeoff_airport.code) self.assertEqual(None, ops.takeoff_pilot) self.assertEqual(iso8601.parse_date("2009-12-30T23:35:59Z"), ops.landing_gate_datetime)
def test_required_only(self): XMLSchema = etree.XMLSchema(py2xsd.generate_xsd(Schema)) ops = Ops.parsexml(XML_REQUIRED_ONLY, XMLSchema) self.assertEqual('N608WB', ops.aircraft) self.assertEqual('123123', ops.flight_number) self.assertEqual('COMMERCIAL', ops.type) self.assertEqual('ICAO', ops.takeoff_airport.code_type) self.assertEqual('EGLL', ops.takeoff_airport.code) self.assertIsNone(ops.takeoff_pilot) self.assertEqual(iso8601.parse_date('2009-12-30T23:35:59Z'), ops.landing_gate_datetime)
def assert_is_invalid(self, xml_string, soapfish_schema): xml = etree.fromstring(xml_string) xmlschema = etree.XMLSchema(generate_xsd(soapfish_schema)) assert_false(xmlschema.validate(xml), message="XML should fail to validate: %r" % xml_string)
def assert_is_valid(self, xml_string, soapfish_schema): xml = etree.fromstring(xml_string) xmlschema = etree.XMLSchema(generate_xsd(soapfish_schema)) assert_true(xmlschema.validate(xml), message="XML did not validate: %r" % xml_string)
class AppHeader(xsd.ComplexType): Version = xsd.Element(xsd.String) Message = xsd.Element(GetWeatherByPlaceName) Schema_qualified = xsd.Schema( targetNamespace='http://www.example.org', elementFormDefault=xsd.ElementFormDefault.QUALIFIED, complexTypes=[GetWeatherByPlaceName, AppHeader, Place], elements={ 'GetWeatherByPlaceName': xsd.Element(GetWeatherByPlaceName), 'AppHeader': xsd.Element(AppHeader), 'Identity': xsd.Element(xsd.String), }, ) XMLSchema_qualified = etree.XMLSchema(generate_xsd(Schema_qualified)) class WsaAppHeader(wsa.Header): SCHEMA = Schema_qualified Identity = SCHEMA.get_element_by_name('Identity') class PlaceU(xsd.ComplexType): Name = xsd.Element(xsd.String) class GetWeatherByPlaceNameU(xsd.ComplexType): Place = xsd.Element(PlaceU)
class AppHeader(xsd.ComplexType): Version = xsd.Element(xsd.String) Message = xsd.Element(GetWeatherByPlaceName) Schema_qualified = xsd.Schema( targetNamespace='http://www.example.org', elementFormDefault=xsd.ElementFormDefault.QUALIFIED, complexTypes=[GetWeatherByPlaceName, AppHeader, Place], elements={ 'GetWeatherByPlaceName': xsd.Element(GetWeatherByPlaceName), 'AppHeader': xsd.Element(AppHeader), 'Identity': xsd.Element(xsd.String), }, ) XMLSchema_qualified = etree.XMLSchema(generate_xsd(Schema_qualified)) class WsaAppHeader(wsa.Header): SCHEMA = Schema_qualified Identity = SCHEMA.get_element_by_name('Identity') class PlaceU(xsd.ComplexType): Name = xsd.Element(xsd.String) class GetWeatherByPlaceNameU(xsd.ComplexType): Place = xsd.Element(PlaceU)
def assert_is_invalid(self, xml_string, soapfish_schema): xml = etree.fromstring(xml_string) xmlschema = etree.XMLSchema(generate_xsd(soapfish_schema)) self.assertIs(xmlschema.validate(xml), False, msg='XML should fail to validate: %r' % xml_string)
def assert_is_valid(self, xml_string, soapfish_schema): xml = etree.fromstring(xml_string) xmlschema = etree.XMLSchema(generate_xsd(soapfish_schema)) self.assertIs(xmlschema.validate(xml), True, msg='XML did not validate: %r' % xml_string)