Package fedex :: Package tools :: Module conversion
[hide private]
[frames] | no frames]

Source Code for Module fedex.tools.conversion

 1  """Response output conversion tools to help parse suds 
 2  response object output. 
 3  """ 
 4   
 5   
 6  # This is the suds way of doing this, but its slower. 
 7  # For reference only. 
 8  # from suds.sudsobject import asdict 
 9  # from suds.sax.text import Text 
10  # 
11  # def response_to_dict(obj): 
12  #     """ Converts a suds object to a dictionary. 
13  #     :param obj: object 
14  #     :return: dictionary 
15  #     """ 
16  #     out = {} 
17  #     for k, v in asdict(obj).items():  # k = k.lower() 
18  #         if hasattr(v, '__keylist__'): 
19  #             out[k] = response_to_dict(v) 
20  #         elif isinstance(v, list):  # tuple not used 
21  #             out[k] = [] 
22  #             for item in v: 
23  #                 if hasattr(item, '__keylist__'): 
24  #                     out[k].append(response_to_dict(item)) 
25  #                 else: 
26  #                     out[k].append( 
27  #                         item.title() if isinstance(item, Text) else item) 
28  #         else: 
29  #             out[k] = v.title() if isinstance(v, Text) else v 
30  #     return out 
31   
32   
33 -def basic_sobject_to_dict(obj):
34 """Converts suds object to dict very quickly. 35 Does not serialize date time or normalize key case. 36 :param obj: suds object 37 :return: dict object 38 """ 39 if not hasattr(obj, '__keylist__'): 40 return obj 41 data = {} 42 fields = obj.__keylist__ 43 for field in fields: 44 val = getattr(obj, field) 45 if isinstance(val, list): 46 data[field] = [] 47 for item in val: 48 data[field].append(basic_sobject_to_dict(item)) 49 else: 50 data[field] = basic_sobject_to_dict(val) 51 return data
52 53
54 -def sobject_to_dict(obj, key_to_lower=False, json_serialize=False):
55 """ 56 Converts a suds object to a dict. 57 :param json_serialize: If set, changes date and time types to iso string. 58 :param key_to_lower: If set, changes index key name to lower case. 59 :param obj: suds object 60 :return: dict object 61 """ 62 import datetime 63 64 if not hasattr(obj, '__keylist__'): 65 if json_serialize and isinstance(obj, (datetime.datetime, datetime.time, datetime.date)): 66 return obj.isoformat() 67 else: 68 return obj 69 data = {} 70 fields = obj.__keylist__ 71 for field in fields: 72 val = getattr(obj, field) 73 if key_to_lower: 74 field = field.lower() 75 if isinstance(val, list): 76 data[field] = [] 77 for item in val: 78 data[field].append(sobject_to_dict(item, json_serialize=json_serialize)) 79 else: 80 data[field] = sobject_to_dict(val, json_serialize=json_serialize) 81 return data
82 83
84 -def sobject_to_json(obj, key_to_lower=False):
85 """ 86 Converts a suds object to json. 87 :param obj: suds object 88 :param key_to_lower: If set, changes index key name to lower case. 89 :return: json object 90 """ 91 import json 92 data = sobject_to_dict(obj, key_to_lower=key_to_lower, json_serialize=True) 93 return json.dumps(data)
94