11"""Response output conversion tools to help parse suds
22response 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