@@ -50,10 +50,10 @@ def __init__(self, body):
50
50
if type (data ) == list :
51
51
self .entities = map (self .process_entity , data )
52
52
53
- elif parsed_data .get ('include' ) is not None or \
54
- parsed_data .get ('exclude' ) is not None or \
55
- parsed_data .get ('enabled' ) is not None :
56
- self ._parse_target_dimensions (parsed_data )
53
+ elif data .get ('include' ) is not None or \
54
+ data .get ('exclude' ) is not None or \
55
+ data .get ('enabled' ) is not None :
56
+ self ._parse_target_dimensions (data )
57
57
58
58
elif data .get ('permissions' ) is not None :
59
59
self .entities = self ._parse_permissions (data ['permissions' ])
@@ -109,16 +109,14 @@ def _parse_permissions(self, permissions):
109
109
110
110
def _parse_target_dimensions (self , data ):
111
111
"""Iterate over target dimensions and parse into dicts"""
112
- exclude = data .get ('exclude' , {})
113
- include = data .get ('include' , {})
114
- exclude_entities = exclude .get ('entities' )
115
- include_entities = include .get ('entities' )
112
+ exclude_entities = data .get ('exclude' )
113
+ include_entities = data .get ('include' )
116
114
if include_entities is not None :
117
- include_list = map (self .process_entity , include_entities [ 0 ]. get ( 'entity' , []) )
115
+ include_list = map (self .process_entity , include_entities )
118
116
else :
119
117
include_list = []
120
118
if exclude_entities is not None :
121
- exclude_list = map (self .process_entity , exclude_entities [ 0 ]. get ( 'entity' , []) )
119
+ exclude_list = map (self .process_entity , exclude_entities )
122
120
else :
123
121
exclude_list = []
124
122
self .entity_count = 1
@@ -149,20 +147,28 @@ def process_entity(cls, entity):
149
147
output ['_type' ] = output ['entity_type' ]
150
148
151
149
for key , val in six .iteritems (output ):
152
- # FIXME this isn't the correct thing to do;
153
- # however it's linked to an inconsistency in t1 json api - so fix when that's changed.
154
- if type (val ) == list : # Get parent entities recursively
150
+ if type ( val ) is dict and 'entity_type' in val : # Get parent entities recursively
151
+ cls . process_related_entity ( relations , val )
152
+ elif type (val ) is list and 'entity_type' in next ( iter ( val ), {}):
155
153
for child in val :
156
- ent = cls .process_entity ( child )
157
- if child [ 'rel' ] == ent [ '_type' ]:
158
- relations [ child [ 'rel' ]] = ent
159
- else :
160
- relations . setdefault ( child [ 'rel' ], []). append ( ent )
154
+ cls .process_related_entity ( relations , child )
155
+ # this is new as we are potentially returning multiple
156
+ # currency types, but for now let's grab the first value
157
+ elif type ( val ) is list and 'currency_code' in next ( iter ( val ), {}) :
158
+ output [ key ] = val [ 0 ][ 'value' ]
161
159
162
160
if relations :
163
161
output ['relations' ] = relations
164
162
return output
165
163
164
+ @classmethod
165
+ def process_related_entity (cls , relations , val ):
166
+ ent = cls .process_entity (val )
167
+ if val ['rel' ] == ent ['_type' ]:
168
+ relations [val ['rel' ]] = ent
169
+ else :
170
+ relations .setdefault (val ['rel' ], []).append (ent )
171
+
166
172
@staticmethod
167
173
def process_permission (permission , type ):
168
174
if not permission :
0 commit comments