@@ -23,8 +23,11 @@ class XeroExceptionUnknown(XeroException):
23
23
24
24
class Manager (object ):
25
25
DECORATED_METHODS = ('get' , 'save' , 'filter' , 'all' , 'put' )
26
- DATETIME_FIELDS = (u'UpdatedDateUTC' ,)
26
+
27
+ DATETIME_FIELDS = (u'UpdatedDateUTC' , u'Updated' , u'FullyPaidOnDate' )
28
+ DATE_FIELDS = (u'DueDate' , u'Date' )
27
29
BOOLEAN_FIELDS = (u'IsSupplier' , u'IsCustomer' )
30
+
28
31
MULTI_LINES = (u'LineItem' , u'Phone' , u'Address' , 'TaxRate' )
29
32
PLURAL_EXCEPTIONS = {'Addresse' :'Address' }
30
33
@@ -63,44 +66,37 @@ def convert_to_dict(self, deep_list):
63
66
for key , data in zip (keys , lists ):
64
67
65
68
if len (data ) == 1 :
66
- out [key ] = data [0 ]
67
- elif len (data ) > 1 and key in self .MULTI_LINES and out :
68
- out += (self .convert_to_dict (data ),)
69
- elif len (data ) > 1 and key in self .MULTI_LINES :
70
- out = (self .convert_to_dict (data ),)
71
- elif len (data ) > 1 and key == self .singular and out :
72
- out += (self .convert_to_dict (data ),)
73
- elif len (data ) > 1 and key == self .singular :
74
- out = (self .convert_to_dict (data ),)
69
+ # we're setting a value
70
+ # check to see if we need to apply any special
71
+ # formatting to the value
72
+ val = data [0 ]
73
+ if key in self .BOOLEAN_FIELDS :
74
+ val = True if val .lower () == 'true' else False
75
+ if key in self .DATETIME_FIELDS :
76
+ val = parse (val )
77
+ if key in self .DATE_FIELDS :
78
+ val = parse (val ).date ()
79
+
80
+ out [key ] = val
81
+
82
+ elif len (data ) > 1 and ((key in self .MULTI_LINES ) or (key == self .singular )):
83
+ # our data is a collection and needs to be handled as such
84
+ if out :
85
+ out += (self .convert_to_dict (data ),)
86
+ else :
87
+ out = (self .convert_to_dict (data ),)
88
+
75
89
elif len (data ) > 1 :
76
90
out [key ] = self .convert_to_dict (data )
77
91
78
92
elif len (deep_list ) == 2 :
79
- key = deep_list [0 ]
93
+ key = deep_list [0 ]
80
94
data = deep_list [1 ]
81
95
out [key ] = self .convert_to_dict (data )
82
96
else :
83
97
out = deep_list [0 ]
84
98
return out
85
99
86
- def __convert_data (self , data ):
87
- if isinstance (data , tuple ) or isinstance (data , list ):
88
- data = tuple ([self .__convert_fields (line ) for line in data ])
89
- elif isinstance (data , dict ):
90
- data = self .__convert_fields (data )
91
- return data
92
-
93
- def __convert_fields (self , data ):
94
- for key in self .BOOLEAN_FIELDS :
95
- if data .has_key (key ):
96
- val = data [key ]
97
- val = True if val .lower () == 'true' else False
98
- data [key ] = val
99
- for key in self .DATETIME_FIELDS :
100
- if data .has_key (key ):
101
- data [key ] = parse (data [key ])
102
- return data
103
-
104
100
def dict_to_xml ( self , root_elm , dict_data ):
105
101
for key in dict_data .keys ():
106
102
_data = dict_data [key ]
@@ -159,7 +155,7 @@ def wrapper(*args, **kwargs):
159
155
return body
160
156
dom = parseString (body )
161
157
data = self .convert_to_dict (self .walk_dom (dom ))
162
- return self .__convert_data ( self . __get_results (data ) )
158
+ return self .__get_results (data )
163
159
164
160
elif headers ['status' ] == '404' :
165
161
msg = ' : ' .join ([str (headers ['status' ]), body ])
0 commit comments