mvantellingen / python-zeep

A Python SOAP client
http://docs.python-zeep.org
Other
1.87k stars 578 forks source link

Can't insert any type into SOAP envelope #1379

Open MarkoZadravec opened 1 year ago

MarkoZadravec commented 1 year ago

Hi,

I try to create a SOAP envelope with Zeep Library from WSDL. WSDL link

The problem is with the hilfsmittelattribute element. I would like to set a koerperhaelfte to 1 inside.

If I create SOAP by hand

           ....
           <positionHma>
                 <hilfsmittelattribute>
                      <koerperhaelfte>1</koerperhaelfte>
                 </hilfsmittelattribute>
            </positionHma>
           ....

it works.

But if I set it with the Zeep library

data = {
             .....
             'positionHma': [
                    {
                        'hilfsmittelattribute': {
                            "koerperhaelfte": 1,
                        }
                    }
                ]
                .......
              }

pack = conn.service.sendKostenvoranschlagData(**data)

I get the error


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[14], line 1
----> 1 pack = conn.service.sendKostenvoranschlagData(**data)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/proxy.py:46, in OperationProxy.__call__(self, *args, **kwargs)
     43 if soap_headers:
     44     kwargs["_soapheaders"] = soap_headers
---> 46 return self._proxy._binding.send(
     47     self._proxy._client,
     48     self._proxy._binding_options,
     49     self._op_name,
     50     args,
     51     kwargs,
     52 )

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/wsdl/bindings/soap.py:123, in SoapBinding.send(self, client, options, operation, args, kwargs)
    108 def send(self, client, options, operation, args, kwargs):
    109     """Called from the service
    110 
    111     :param client: The client with which the operation was called
   (...)
    121 
    122     """
--> 123     envelope, http_headers = self._create(
    124         operation, args, kwargs, client=client, options=options
    125     )
    127     response = client.transport.post_xml(options["address"], envelope, http_headers)
    129     operation_obj = self.get(operation)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/wsdl/bindings/soap.py:73, in SoapBinding._create(self, operation, args, kwargs, client, options)
     70     raise ValueError("Operation %r not found" % operation)
     72 # Create the SOAP envelope
---> 73 serialized = operation_obj.create(*args, **kwargs)
     74 self._set_http_headers(serialized, operation_obj)
     76 envelope = serialized.content

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/wsdl/definitions.py:224, in Operation.create(self, *args, **kwargs)
    222 def create(self, *args, **kwargs):
    223     assert self.input is not None
--> 224     return self.input.serialize(*args, **kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/wsdl/messages/soap.py:73, in SoapMessage.serialize(self, *args, **kwargs)
     68 # Create the soap:body element. The _is_body_wrapped attribute signals
     69 # that the self.body element is of type soap:body, so we don't have to
     70 # create it in that case. Otherwise we create a Element soap:body and
     71 # render the content into this.
     72 if self.body:
---> 73     body_value = self.body(*args, **kwargs)
     74     if self._is_body_wrapped:
     75         self.body.render(envelope, body_value)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/element.py:58, in Element.__call__(self, *args, **kwargs)
     57 def __call__(self, *args, **kwargs):
---> 58     instance = self.type(*args, **kwargs)
     59     if isinstance(instance, CompoundValue):
     60         instance._xsd_elm = self

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:75, in ComplexType.__call__(self, *args, **kwargs)
     73 if self._array_type:
     74     return self._array_class(*args, **kwargs)
---> 75 return self._value_class(*args, **kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:106, in CompoundValue.__init__(self, *args, **kwargs)
    103     values[attribute_name] = attribute.default_value
    105 # Set elements
--> 106 items = _process_signature(self._xsd_type, args, kwargs)
    107 for key, value in items.items():
    108     values[key] = value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:220, in _process_signature(xsd_type, args, kwargs)
    218     values = element.parse_kwargs(kwargs, element_name, available_kwargs)
    219 else:
--> 220     values = element.parse_kwargs(kwargs, None, available_kwargs)
    222 if values is not None:
    223     for key, value in values.items():

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/indicators.py:219, in OrderIndicator.parse_kwargs(self, kwargs, name, available_kwargs)
    217 result = OrderedDict()
    218 for elm_name, element in self.elements_nested:
--> 219     sub_result = element.parse_kwargs(kwargs, elm_name, available_kwargs)
    220     if sub_result:
    221         result.update(sub_result)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/element.py:135, in Element.parse_kwargs(self, kwargs, name, available_kwargs)
    134 def parse_kwargs(self, kwargs, name, available_kwargs):
--> 135     return self.type.parse_kwargs(kwargs, name or self.attr_name, available_kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:338, in ComplexType.parse_kwargs(self, kwargs, name, available_kwargs)
    335     available_kwargs.remove(name)
    337     if value is not Nil:
--> 338         value = self._create_object(value, name)
    340     return {name: value}
    341 return {}

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:362, in ComplexType._create_object(self, value, name)
    359     return value
    361 if isinstance(value, dict):
--> 362     return self(**value)
    364 # Try to automatically create an object. This might fail if there
    365 # are multiple required arguments.
    366 return self(value)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:75, in ComplexType.__call__(self, *args, **kwargs)
     73 if self._array_type:
     74     return self._array_class(*args, **kwargs)
---> 75 return self._value_class(*args, **kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:106, in CompoundValue.__init__(self, *args, **kwargs)
    103     values[attribute_name] = attribute.default_value
    105 # Set elements
--> 106 items = _process_signature(self._xsd_type, args, kwargs)
    107 for key, value in items.items():
    108     values[key] = value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:220, in _process_signature(xsd_type, args, kwargs)
    218     values = element.parse_kwargs(kwargs, element_name, available_kwargs)
    219 else:
--> 220     values = element.parse_kwargs(kwargs, None, available_kwargs)
    222 if values is not None:
    223     for key, value in values.items():

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/indicators.py:219, in OrderIndicator.parse_kwargs(self, kwargs, name, available_kwargs)
    217 result = OrderedDict()
    218 for elm_name, element in self.elements_nested:
--> 219     sub_result = element.parse_kwargs(kwargs, elm_name, available_kwargs)
    220     if sub_result:
    221         result.update(sub_result)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/element.py:135, in Element.parse_kwargs(self, kwargs, name, available_kwargs)
    134 def parse_kwargs(self, kwargs, name, available_kwargs):
--> 135     return self.type.parse_kwargs(kwargs, name or self.attr_name, available_kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:338, in ComplexType.parse_kwargs(self, kwargs, name, available_kwargs)
    335     available_kwargs.remove(name)
    337     if value is not Nil:
--> 338         value = self._create_object(value, name)
    340     return {name: value}
    341 return {}

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:362, in ComplexType._create_object(self, value, name)
    359     return value
    361 if isinstance(value, dict):
--> 362     return self(**value)
    364 # Try to automatically create an object. This might fail if there
    365 # are multiple required arguments.
    366 return self(value)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:75, in ComplexType.__call__(self, *args, **kwargs)
     73 if self._array_type:
     74     return self._array_class(*args, **kwargs)
---> 75 return self._value_class(*args, **kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:106, in CompoundValue.__init__(self, *args, **kwargs)
    103     values[attribute_name] = attribute.default_value
    105 # Set elements
--> 106 items = _process_signature(self._xsd_type, args, kwargs)
    107 for key, value in items.items():
    108     values[key] = value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:220, in _process_signature(xsd_type, args, kwargs)
    218     values = element.parse_kwargs(kwargs, element_name, available_kwargs)
    219 else:
--> 220     values = element.parse_kwargs(kwargs, None, available_kwargs)
    222 if values is not None:
    223     for key, value in values.items():

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/indicators.py:219, in OrderIndicator.parse_kwargs(self, kwargs, name, available_kwargs)
    217 result = OrderedDict()
    218 for elm_name, element in self.elements_nested:
--> 219     sub_result = element.parse_kwargs(kwargs, elm_name, available_kwargs)
    220     if sub_result:
    221         result.update(sub_result)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/element.py:135, in Element.parse_kwargs(self, kwargs, name, available_kwargs)
    134 def parse_kwargs(self, kwargs, name, available_kwargs):
--> 135     return self.type.parse_kwargs(kwargs, name or self.attr_name, available_kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:338, in ComplexType.parse_kwargs(self, kwargs, name, available_kwargs)
    335     available_kwargs.remove(name)
    337     if value is not Nil:
--> 338         value = self._create_object(value, name)
    340     return {name: value}
    341 return {}

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:356, in ComplexType._create_object(self, value, name)
    353     return None
    355 if isinstance(value, list) and not self._array_type:
--> 356     return [self._create_object(val, name) for val in value]
    358 if isinstance(value, CompoundValue) or value is SkipValue:
    359     return value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:356, in <listcomp>(.0)
    353     return None
    355 if isinstance(value, list) and not self._array_type:
--> 356     return [self._create_object(val, name) for val in value]
    358 if isinstance(value, CompoundValue) or value is SkipValue:
    359     return value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:362, in ComplexType._create_object(self, value, name)
    359     return value
    361 if isinstance(value, dict):
--> 362     return self(**value)
    364 # Try to automatically create an object. This might fail if there
    365 # are multiple required arguments.
    366 return self(value)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:75, in ComplexType.__call__(self, *args, **kwargs)
     73 if self._array_type:
     74     return self._array_class(*args, **kwargs)
---> 75 return self._value_class(*args, **kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:106, in CompoundValue.__init__(self, *args, **kwargs)
    103     values[attribute_name] = attribute.default_value
    105 # Set elements
--> 106 items = _process_signature(self._xsd_type, args, kwargs)
    107 for key, value in items.items():
    108     values[key] = value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:220, in _process_signature(xsd_type, args, kwargs)
    218     values = element.parse_kwargs(kwargs, element_name, available_kwargs)
    219 else:
--> 220     values = element.parse_kwargs(kwargs, None, available_kwargs)
    222 if values is not None:
    223     for key, value in values.items():

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/indicators.py:219, in OrderIndicator.parse_kwargs(self, kwargs, name, available_kwargs)
    217 result = OrderedDict()
    218 for elm_name, element in self.elements_nested:
--> 219     sub_result = element.parse_kwargs(kwargs, elm_name, available_kwargs)
    220     if sub_result:
    221         result.update(sub_result)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/element.py:135, in Element.parse_kwargs(self, kwargs, name, available_kwargs)
    134 def parse_kwargs(self, kwargs, name, available_kwargs):
--> 135     return self.type.parse_kwargs(kwargs, name or self.attr_name, available_kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:338, in ComplexType.parse_kwargs(self, kwargs, name, available_kwargs)
    335     available_kwargs.remove(name)
    337     if value is not Nil:
--> 338         value = self._create_object(value, name)
    340     return {name: value}
    341 return {}

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:356, in ComplexType._create_object(self, value, name)
    353     return None
    355 if isinstance(value, list) and not self._array_type:
--> 356     return [self._create_object(val, name) for val in value]
    358 if isinstance(value, CompoundValue) or value is SkipValue:
    359     return value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:356, in <listcomp>(.0)
    353     return None
    355 if isinstance(value, list) and not self._array_type:
--> 356     return [self._create_object(val, name) for val in value]
    358 if isinstance(value, CompoundValue) or value is SkipValue:
    359     return value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:362, in ComplexType._create_object(self, value, name)
    359     return value
    361 if isinstance(value, dict):
--> 362     return self(**value)
    364 # Try to automatically create an object. This might fail if there
    365 # are multiple required arguments.
    366 return self(value)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:75, in ComplexType.__call__(self, *args, **kwargs)
     73 if self._array_type:
     74     return self._array_class(*args, **kwargs)
---> 75 return self._value_class(*args, **kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:106, in CompoundValue.__init__(self, *args, **kwargs)
    103     values[attribute_name] = attribute.default_value
    105 # Set elements
--> 106 items = _process_signature(self._xsd_type, args, kwargs)
    107 for key, value in items.items():
    108     values[key] = value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:220, in _process_signature(xsd_type, args, kwargs)
    218     values = element.parse_kwargs(kwargs, element_name, available_kwargs)
    219 else:
--> 220     values = element.parse_kwargs(kwargs, None, available_kwargs)
    222 if values is not None:
    223     for key, value in values.items():

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/indicators.py:219, in OrderIndicator.parse_kwargs(self, kwargs, name, available_kwargs)
    217 result = OrderedDict()
    218 for elm_name, element in self.elements_nested:
--> 219     sub_result = element.parse_kwargs(kwargs, elm_name, available_kwargs)
    220     if sub_result:
    221         result.update(sub_result)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/element.py:135, in Element.parse_kwargs(self, kwargs, name, available_kwargs)
    134 def parse_kwargs(self, kwargs, name, available_kwargs):
--> 135     return self.type.parse_kwargs(kwargs, name or self.attr_name, available_kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:338, in ComplexType.parse_kwargs(self, kwargs, name, available_kwargs)
    335     available_kwargs.remove(name)
    337     if value is not Nil:
--> 338         value = self._create_object(value, name)
    340     return {name: value}
    341 return {}

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:362, in ComplexType._create_object(self, value, name)
    359     return value
    361 if isinstance(value, dict):
--> 362     return self(**value)
    364 # Try to automatically create an object. This might fail if there
    365 # are multiple required arguments.
    366 return self(value)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:75, in ComplexType.__call__(self, *args, **kwargs)
     73 if self._array_type:
     74     return self._array_class(*args, **kwargs)
---> 75 return self._value_class(*args, **kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:106, in CompoundValue.__init__(self, *args, **kwargs)
    103     values[attribute_name] = attribute.default_value
    105 # Set elements
--> 106 items = _process_signature(self._xsd_type, args, kwargs)
    107 for key, value in items.items():
    108     values[key] = value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:241, in _process_signature(xsd_type, args, kwargs)
    238     available_kwargs.remove("_raw_elements")
    240 if available_kwargs:
--> 241     raise TypeError(
    242         ("%s() got an unexpected keyword argument %r. " + "Signature: `%s`")
    243         % (
    244             xsd_type.qname or "ComplexType",
    245             next(iter(available_kwargs)),
    246             xsd_type.signature(standalone=False),
    247         )
    248     )
    250 return result

TypeError: {http://einlieferung.ws.bswsnt.vsa/xsd}hilfsmittelattribute() got an unexpected keyword argument 'koerperhaelfte'. Signature: `_value_1: ANY[]`

I read the documentation on ANY Zeep documentation

But I can't get this element.

conn.get_element('ns0:hilfsmittelattribute')
>>  LookupError: No element 'hilfsmittelattribute' in namespace http://ws.bswsnt.vsa/xsd. Available elements are:  -

conn.get_element('ns1:hilfsmittelattribute')
>>  LookupError: No element 'hilfsmittelattribute' in namespace http://infopool.ws.bswsnt.vsa/xsd. Available elements are:  -

conn.get_element('ns2:hilfsmittelattribute')
>>   LookupError: No element 'hilfsmittelattribute' in namespace http://einlieferung.ws.bswsnt.vsa/xsd. Available elements are:  -

conn.get_element('ns3:hilfsmittelattribute')
>>   No element 'hilfsmittelattribute' in namespace http://ws.bswsnt.vsa. Available elements are: {http://ws.bswsnt.vsa}sendKostenvoranschlagData, {http://ws.bswsnt.vsa}sendKostenvoranschlagDataResponse, {http://ws.bswsnt.vsa}updateKostenvoranschlagStatusData, {http://ws.bswsnt.vsa}updateKostenvoranschlagStatusDataResponse, {http://ws.bswsnt.vsa}retrieveAnhangEntscheidung, {http://ws.bswsnt.vsa}retrieveAnhangEntscheidungResponse, {http://ws.bswsnt.vsa}retrieveAnhang, {http://ws.bswsnt.vsa}retrieveAnhangResponse, {http://ws.bswsnt.vsa}retrieveKostenvoranschlagData, {http://ws.bswsnt.vsa}retrieveKostenvoranschlagDataResponse, {http://ws.bswsnt.vsa}sendLieferbestaetigung, {http://ws.bswsnt.vsa}sendLieferbestaetigungResponse, {http://ws.bswsnt.vsa}checkInfopool, {http://ws.bswsnt.vsa}checkInfopoolResponse, {http://ws.bswsnt.vsa}confirmInfopoolEntry, {http://ws.bswsnt.vsa}confirmInfopoolEntryResponse, {http://ws.bswsnt.vsa}sendNachricht, {http://ws.bswsnt.vsa}sendNachrichtResponse, {http://ws.bswsnt.vsa}retrieveNachricht, {http://ws.bswsnt.vsa}retrieveNachrichtResponse, {http://ws.bswsnt.vsa}declineVersorgungsanfrage, {http://ws.bswsnt.vsa}declineVersorgungsanfrageResponse, {http://ws.bswsnt.vsa}cancelKostenvoranschlag, {http://ws.bswsnt.vsa}cancelKostenvoranschlagResponse, {http://ws.bswsnt.vsa}retrieveHmaDefinition, {http://ws.bswsnt.vsa}retrieveHmaDefinitionResponse

I can get the type from it

hilfsmittelattribute_type = conn.get_type('ns2:hilfsmittelattribute')

but I don't know how to use it. Whatever I try it doesn't work.