Created
October 10, 2016 20:55
-
-
Save checkaayush/915d2600d696e818349bb1c955ebdcf8 to your computer and use it in GitHub Desktop.
Convert Suds object to Python dictionary
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Source: http://stackoverflow.com/questions/17581731/parsing-suds-soap-complex-data-type-into-python-dict | |
def basic_sobject_to_dict(obj): | |
"""Converts suds object to dict very quickly. | |
Does not serialize date time or normalize key case. | |
:param obj: suds object | |
:return: dict object | |
""" | |
if not hasattr(obj, '__keylist__'): | |
return obj | |
data = {} | |
fields = obj.__keylist__ | |
for field in fields: | |
val = getattr(obj, field) | |
if isinstance(val, list): | |
data[field] = [] | |
for item in val: | |
data[field].append(basic_sobject_to_dict(item)) | |
else: | |
data[field] = basic_sobject_to_dict(val) | |
return data | |
def sobject_to_dict(obj, key_to_lower=False, json_serialize=False): | |
""" | |
Converts a suds object to a dict. | |
:param json_serialize: If set, changes date and time types to iso string. | |
:param key_to_lower: If set, changes index key name to lower case. | |
:param obj: suds object | |
:return: dict object | |
""" | |
import datetime | |
if not hasattr(obj, '__keylist__'): | |
if json_serialize and isinstance(obj, (datetime.datetime, datetime.time, datetime.date)): | |
return obj.isoformat() | |
else: | |
return obj | |
data = {} | |
fields = obj.__keylist__ | |
for field in fields: | |
val = getattr(obj, field) | |
if key_to_lower: | |
field = field.lower() | |
if isinstance(val, list): | |
data[field] = [] | |
for item in val: | |
data[field].append(sobject_to_dict(item, json_serialize=json_serialize)) | |
else: | |
data[field] = sobject_to_dict(val, json_serialize=json_serialize) | |
return data | |
def sobject_to_json(obj, key_to_lower=False): | |
""" | |
Converts a suds object to json. | |
:param obj: suds object | |
:param key_to_lower: If set, changes index key name to lower case. | |
:return: json object | |
""" | |
import json | |
data = sobject_to_dict(obj, key_to_lower=key_to_lower, json_serialize=True) | |
return json.dumps(data) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
👍
Well done!