@@ -127,18 +127,79 @@ def transform_json(data, transformer):
127127 errors = []
128128 new_data = []
129129 renamings = transformer .column_renamings
130- if isinstance (data , list ):
131- for item in data :
132- element , err = process_json_keys (item , renamings , transformer )
133- for e in element :
134- new_data .append (e )
135- for e in err :
136- errors .append (e )
130+ #if json is output of scancode-toolkit
131+ if (data ["headers" ][0 ]["tool_name" ] == "scancode-toolkit" ):
132+ new_data , errors = process_json_keys_scancode (data , renamings , transformer )
133+
134+ elif isinstance (data , list ):
135+ for item in data :
136+ element , err = process_json_keys (item , renamings , transformer )
137+ for e in element :
138+ new_data .append (e )
139+ for e in err :
140+ errors .append (e )
137141 else :
138142 new_data , errors = process_json_keys (data , renamings , transformer )
139143
140144 return new_data , errors
141145
146+ def process_json_keys_scancode (data , renamings , transformer ):
147+ o_dict = OrderedDict ()
148+ o_dict_headers_list = []
149+ o_dict_files_list = []
150+ new_data = []
151+
152+ for item in data ["headers" ]:
153+ o_dict_headers = OrderedDict ()
154+ for k in item .keys ():
155+ if k in renamings .keys ():
156+ for r_key in renamings .keys ():
157+ if k == r_key :
158+ o_dict_headers [renamings [r_key ]] = item [k ]
159+ else :
160+ o_dict_headers [k ] = item [k ]
161+ o_dict_headers_list .append (o_dict_headers )
162+
163+
164+ for item in data ["files" ]:
165+ o_dict_files = OrderedDict ()
166+ for k in item .keys ():
167+ if k in renamings .keys ():
168+ for r_key in renamings .keys ():
169+ if k == r_key :
170+ o_dict_files [renamings [r_key ]] = item [k ]
171+ else :
172+ o_dict_files [k ] = item [k ]
173+ o_dict_files_list .append (o_dict_files )
174+
175+
176+ for k in data .keys ():
177+ if k in renamings .keys ():
178+ for r_key in renamings .keys ():
179+ if k == r_key :
180+ o_dict [renamings [r_key ]] = data [k ]
181+ else :
182+ o_dict [k ] = data [k ]
183+
184+ if ("files" in renamings .keys ()):
185+ o_dict [renamings ["files" ]] = o_dict_files_list
186+ else :
187+ o_dict ["files" ] = o_dict_files_list
188+ if ("headers" in renamings .keys ()):
189+ o_dict [renamings ["headers" ]] = o_dict_headers_list
190+ else :
191+ o_dict ["headers" ] = o_dict_headers_list
192+ new_data = [o_dict ]
193+
194+ if transformer .column_filters :
195+ new_data = list (transformer .filter_columns (new_data ))
196+ else :
197+ new_data = list (new_data )
198+
199+ errors = transformer .check_required_columns (new_data , isFromScancode = True )
200+
201+ return new_data , errors
202+
142203
143204def process_json_keys (data , renamings , transformer ):
144205 o_dict = OrderedDict ()
@@ -254,13 +315,16 @@ def from_file(cls, location):
254315 column_filters = data .get ('column_filters' , []),
255316 )
256317
257- def check_required_columns (self , data ):
318+ def check_required_columns (self , data , isFromScancode = False ):
258319 """
259320 Return a list of Error for a `data` list of ordered dict where a
260321 dict is missing a value for a required column name.
261322 """
262323 errors = []
263- required = set (self .essential_columns + self .required_columns )
324+ if (isFromScancode ):
325+ required = set (self .required_columns )
326+ else :
327+ required = set (self .essential_columns + self .required_columns )
264328 if not required :
265329 return []
266330
0 commit comments