Skip to content

Commit d3ad0af

Browse files
committed
added tool to convert suds object output to dict
1 parent b8680b2 commit d3ad0af

File tree

1 file changed

+44
-45
lines changed

1 file changed

+44
-45
lines changed

fedex/tools/response_tools.py

Lines changed: 44 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,52 @@
11
"""Response output conversion tools to help parse suds
22
response object output.
33
"""
4-
from suds.sudsobject import asdict
5-
from suds.sax.text import Text
64

7-
8-
def object_to_dict(obj):
9-
""" Converts a suds object to a dictionary.
10-
:param o: object
11-
:return: dictionary
12-
"""
13-
out = {}
14-
for k, v in asdict(obj).items():
15-
k = k.lower()
16-
if hasattr(v, '__keylist__'):
17-
out[k] = object_to_dict(v)
18-
elif isinstance(v, list):
19-
out[k] = []
20-
for item in v:
21-
if hasattr(item, '__keylist__'):
22-
out[k].append(object_to_dict(item))
23-
else:
24-
out[k].append(
25-
item.title() if isinstance(item, Text) else item)
26-
else:
27-
out[k] = v.title() if isinstance(v, Text) else v
28-
return out
29-
#
30-
# import datetime
5+
# This is the suds way of doing this, but its slower.
6+
# For reference only.
7+
# from suds.sudsobject import asdict
8+
# from suds.sax.text import Text
319
#
32-
# def object_to_dict(obj):
33-
# """ Converts an object to a dictionary.
34-
# :param o: object
10+
# def response_to_dict(obj):
11+
# """ Converts a suds object to a dictionary.
12+
# :param obj: object
3513
# :return: dictionary
3614
# """
37-
# if isinstance(obj, (str, unicode, bool, int, long, float, datetime.datetime, datetime.date, datetime.time)):
38-
# return obj
39-
# data_dict = {}
40-
# try:
41-
# all_keys = obj.__dict__.keys() # vars(obj).keys()
42-
# except AttributeError:
43-
# return obj
44-
# fields = [k for k in all_keys if not k.startswith('_')]
45-
# for field in fields:
46-
# val = getattr(obj, field)
47-
# if isinstance(val, (list, tuple)):
48-
# data_dict[field] = []
49-
# for item in val:
50-
# data_dict[field].append(object_to_dict(item))
15+
# out = {}
16+
# for k, v in asdict(obj).items(): # k = k.lower()
17+
# if hasattr(v, '__keylist__'):
18+
# out[k] = response_to_dict(v)
19+
# elif isinstance(v, list): # tuple not used
20+
# out[k] = []
21+
# for item in v:
22+
# if hasattr(item, '__keylist__'):
23+
# out[k].append(response_to_dict(item))
24+
# else:
25+
# out[k].append(
26+
# item.title() if isinstance(item, Text) else item)
5127
# else:
52-
# data_dict[field] = object_to_dict(val)
53-
# return data_dict
28+
# out[k] = v.title() if isinstance(v, Text) else v
29+
# return out
30+
31+
32+
def sobject_to_dict(obj, key_to_lower=False):
33+
""" Converts a suds object to a dict.
34+
:param key_to_lower: If set, changes index key name to lower case.
35+
:param obj: suds object
36+
:return: dict object
37+
"""
38+
if not hasattr(obj, '__keylist__'):
39+
return obj
40+
data = {}
41+
fields = obj.__keylist__
42+
for field in fields:
43+
val = getattr(obj, field)
44+
if key_to_lower:
45+
field = field.lower()
46+
if isinstance(val, list):
47+
data[field] = []
48+
for item in val:
49+
data[field].append(sobject_to_dict(item))
50+
else:
51+
data[field] = sobject_to_dict(val)
52+
return data

0 commit comments

Comments
 (0)