'AnyType objects using Zeep and Workday's SOAP API
I'm trying to edit a custom object's field on a worker object in Workday via Edit_Worker_Additional_Data operation in the Staffing namespace. I think I'm pretty close, but I keep running into an AttributeError which leads me to believe that my formatting is incorrect compared to how Zeep expects it to be. Any tips or ideas would be great, I've tried about everything under the sun: running get_type, get_element, creating factories with those, etc. Intuitively, I shouldn't need to get any type or element, since Workday is expecting an AnyType object for this piece of the request. Here is my full code and request dictionary.
def update_provisioning_flag(user_info, credentials):
user = credentials.get("WD_USERNAME")
password = credentials.get("WD_PASSWORD")
wsdl = "https://wd2-impl-services1.workday.com/ccx/service/tenant/Staffing/v37.2?wsdl"
settings = Settings(strict=False, xml_huge_tree=True, raw_response=True)
client = Client(wsdl, wsse=UsernameToken(user, password), settings=settings)
request_dict = {
"Worker_Custom_Object_Data": {
"Effective_Date": "2022-03-14",
"Worker_Reference": {
"ID": {
'type': "Employee_ID", # user_info['system_id_type'],
'_value_1': "10183"
}
},
"Business_Object_Additional_Data": {
"_value_1": [
{
"usernameAdministration": {
"isProvisioned": "Y"
}
}
]
}
}
}
return client.service.Edit_Worker_Additional_Data(**request_dict)
Below is the full stack trace for the error
Traceback (most recent call last):
File "lambda_function.py", line 188, in <module>
response = update_provisioning_flag({}, creds)
File "lambda_function.py", line 183, in update_provisioning_flag
return client.service.Edit_Worker_Additional_Data(**request_dict)
File "/Users/lukas/Library/Python/3.8/lib/python/site-packages/zeep/proxy.py", line 46, in __call__
return self._proxy._binding.send(
File "/Users/lukas/Library/Python/3.8/lib/python/site-packages/zeep/wsdl/bindings/soap.py", line 123, in send
envelope, http_headers = self._create(
File "/Users/lukas/Library/Python/3.8/lib/python/site-packages/zeep/wsdl/bindings/soap.py", line 73, in _create
serialized = operation_obj.create(*args, **kwargs)
File "/Users/lukas/Library/Python/3.8/lib/python/site-packages/zeep/wsdl/definitions.py", line 222, in create
return self.input.serialize(*args, **kwargs)
File "/Users/lukas/Library/Python/3.8/lib/python/site-packages/zeep/wsdl/messages/soap.py", line 79, in serialize
self.body.render(body, body_value)
File "/Users/lukas/Library/Python/3.8/lib/python/site-packages/zeep/xsd/elements/element.py", line 232, in render
self._render_value_item(parent, value, render_path)
File "/Users/lukas/Library/Python/3.8/lib/python/site-packages/zeep/xsd/elements/element.py", line 256, in _render_value_item
return self.type.render(node, value, None, render_path)
File "/Users/lukas/Library/Python/3.8/lib/python/site-packages/zeep/xsd/types/complex.py", line 295, in render
element.render(node, element_value, child_path)
File "/Users/lukas/Library/Python/3.8/lib/python/site-packages/zeep/xsd/elements/indicators.py", line 251, in render
element.render(parent, element_value, child_path)
File "/Users/lukas/Library/Python/3.8/lib/python/site-packages/zeep/xsd/elements/element.py", line 232, in render
self._render_value_item(parent, value, render_path)
File "/Users/lukas/Library/Python/3.8/lib/python/site-packages/zeep/xsd/elements/element.py", line 256, in _render_value_item
return self.type.render(node, value, None, render_path)
File "/Users/lukas/Library/Python/3.8/lib/python/site-packages/zeep/xsd/types/complex.py", line 295, in render
element.render(node, element_value, child_path)
File "/Users/lukas/Library/Python/3.8/lib/python/site-packages/zeep/xsd/elements/indicators.py", line 251, in render
element.render(parent, element_value, child_path)
File "/Users/lukas/Library/Python/3.8/lib/python/site-packages/zeep/xsd/elements/element.py", line 232, in render
self._render_value_item(parent, value, render_path)
File "/Users/lukas/Library/Python/3.8/lib/python/site-packages/zeep/xsd/elements/element.py", line 256, in _render_value_item
return self.type.render(node, value, None, render_path)
File "/Users/lukas/Library/Python/3.8/lib/python/site-packages/zeep/xsd/types/complex.py", line 295, in render
element.render(node, element_value, child_path)
File "/Users/lukas/Library/Python/3.8/lib/python/site-packages/zeep/xsd/elements/indicators.py", line 251, in render
element.render(parent, element_value, child_path)
File "/Users/lukas/Library/Python/3.8/lib/python/site-packages/zeep/xsd/elements/any.py", line 143, in render
self._render_value_item(parent, val, render_path)
File "/Users/lukas/Library/Python/3.8/lib/python/site-packages/zeep/xsd/elements/any.py", line 161, in _render_value_item
if isinstance(value.value, list):
AttributeError: 'dict' object has no attribute 'value'
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
