Exemple #1
0
    def __init__(self, location, transport):
        """Initialize a WSDL document.

        The root definition properties are exposed as entry points.

        :param location: Location of this WSDL
        :type location: string
        :param transport: The transport object to be used
        :type transport: zeep.transports.Transport

        """
        self.location = location if not hasattr(location, 'read') else None
        self.transport = transport

        # Dict with all definition objects within this WSDL
        self._definitions = {}
        self.types = Schema([], transport=self.transport)

        # Dict with internal schema objects, used for lxml.ImportResolver
        self._parser_context = ParserContext()

        document = self._load_content(location)

        root_definitions = Definition(self, document, self.location)
        root_definitions.resolve_imports()

        # Make the wsdl definitions public
        self.messages = root_definitions.messages
        self.port_types = root_definitions.port_types
        self.bindings = root_definitions.bindings
        self.services = root_definitions.services
def parse_schema_node(node):
    parser_context = ParserContext()
    schema = Schema(node=node,
                    transport=None,
                    location=None,
                    parser_context=parser_context)
    return schema
Exemple #3
0
    def __init__(self,
                 node=None,
                 transport=None,
                 location=None,
                 parser_context=None):
        self._parser_context = parser_context or ParserContext()

        self._schemas = OrderedDict()
        self._root = None
        self._prefix_map = {}

        if node is not None:
            self._root = SchemaDocument(node, transport, location,
                                        self._parser_context, location)

            self._root.resolve()

            def _collect_imports_recursive(schema, target=None):
                if target is None:
                    target = OrderedDict()

                target[schema._target_namespace] = schema
                for ns, s in schema._imports.items():
                    if ns not in target:
                        _collect_imports_recursive(s, target)
                return target

            self._schemas = _collect_imports_recursive(self._root)
            self._prefix_map = self._create_prefix_map()
def schema_visitor():
    parser_context = ParserContext()
    node = etree.Element('{http://www.w3.org/2001/XMLSchema}Schema')
    schema = SchemaDocument(node=node,
                            transport=None,
                            location=None,
                            parser_context=parser_context,
                            base_url=None)
    return visitor.SchemaVisitor(schema)
Exemple #5
0
    def __init__(self, node=None, transport=None, location=None,
                 parser_context=None):
        self._parser_context = parser_context or ParserContext()
        self._transport = transport

        self._schemas = OrderedDict()
        self._prefix_map_auto = {}
        self._prefix_map_custom = {}

        if not isinstance(node, list):
            nodes = [node] if node is not None else []
        else:
            nodes = node
        self.add_documents(nodes, location)
Exemple #6
0
    def __init__(self,
                 node=None,
                 transport=None,
                 location=None,
                 parser_context=None,
                 base_url=None):
        logger.debug("Init schema for %r", location)

        # Internal
        self._base_url = base_url or location
        self._location = location
        self._transport = transport
        self._target_namespace = None
        self._elm_instances = []
        self._types = {}
        self._elements = {}
        self._attributes = {}
        self._imports = OrderedDict()
        self._prefix_map = {}
        self._xml_schema = None
        self._element_form = 'unqualified'
        self._attribute_form = 'unqualified'

        is_root_schema = False
        if not parser_context:
            parser_context = ParserContext()
        if not parser_context.schema_objects:
            is_root_schema = True
        parser_context.schema_objects.add(self)

        if node is not None:
            # Disable XML schema validation for now
            # if len(node) > 0:
            #     self.xml_schema = etree.XMLSchema(node)

            visitor = SchemaVisitor(self, parser_context)
            visitor.visit_schema(node)

        if is_root_schema:
            for schema in self._imports.values():
                schema.resolve()
            self.resolve()
            self._prefix_map = self.create_prefix_map()
Exemple #7
0
    def __init__(self, location, transport):
        self.location = location if not hasattr(location, 'read') else None
        self.transport = transport

        # Dict with all definition objects within this WSDL
        self._definitions = {}

        # Dict with internal schema objects, used for lxml.ImportResolver
        self._parser_context = ParserContext()

        document = self._load_content(location)

        root_definitions = Definitions(self, document, self.location)
        root_definitions.resolve_imports()

        # Make the wsdl definitions public
        self.schema = root_definitions.schema
        self.messages = root_definitions.messages
        self.port_types = root_definitions.port_types
        self.bindings = root_definitions.bindings
        self.services = root_definitions.services
def test_sequence_parse_anytype_obj():
    value_type = xsd.ComplexType(
        xsd.Sequence([
            xsd.Element(
                '{http://tests.python-zeep.org/}value',
                xsd.Integer()),
        ])
    )

    parser_context = ParserContext()
    schema = SchemaDocument(
        etree.Element('{http://www.w3.org/2001/XMLSchema}Schema'),
        transport=None,
        location=None,
        parser_context=parser_context,
        base_url=None)

    schema._target_namespace = 'http://tests.python-zeep.org/'
    schema.register_type('{http://tests.python-zeep.org/}something', value_type)

    custom_type = xsd.Element(
        etree.QName('http://tests.python-zeep.org/', 'container'),
        xsd.ComplexType(
            xsd.Sequence([
                xsd.Element(
                    etree.QName('http://tests.python-zeep.org/', 'item_1'),
                    xsd.AnyType()),
            ])
        ))
    expected = etree.fromstring("""
        <ns0:container
            xmlns:ns0="http://tests.python-zeep.org/"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <ns0:item_1 xsi:type="ns0:something">
            <ns0:value>100</ns0:value>
          </ns0:item_1>
        </ns0:container>
    """)
    obj = custom_type.parse(expected, schema)
    assert obj.item_1.value == 100