Skip to content

Commit b6c6c61

Browse files
committed
"modified transform to work with json output from scancode"
Signed-off-by: Srthkdb <[email protected]>
1 parent 295e825 commit b6c6c61

File tree

1 file changed

+73
-9
lines changed

1 file changed

+73
-9
lines changed

src/attributecode/transform.py

Lines changed: 73 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

143204
def 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

Comments
 (0)