Skip to content

Commit 9d02f36

Browse files
committed
Unpack summarized_dirs_by_license_and_holder
* Make this a nested defaultdict instead of using a tuple for the key Signed-off-by: Jono Yang <jyang@nexb.com>
1 parent 96141a1 commit 9d02f36

1 file changed

Lines changed: 15 additions & 13 deletions

File tree

src/scancode/plugin_summary.py

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,9 @@ def process_codebase(self, codebase, **kwargs):
9898
# TODO: Raise warning(?) if these fields are not there
9999
return
100100

101-
summarized_dirs_by_license_and_holder = defaultdict(list)
101+
summarized_dirs_by_license_and_holder = defaultdict(lambda: defaultdict(list))
102102

103-
# Pass 1: summarize origin clues to directory level and tag summarized Resources
103+
# Summarize origin clues to directory level and tag summarized Resources
104104
for resource in codebase.walk(topdown=False):
105105
# TODO: Consider facets for later
106106

@@ -142,7 +142,8 @@ def process_codebase(self, codebase, **kwargs):
142142
codebase.save_resource(resource)
143143

144144
if resource.is_dir:
145-
summarized_dirs_by_license_and_holder[origin].append(resource.path)
145+
holder = '\n'.join(holders)
146+
summarized_dirs_by_license_and_holder[license_expression][holder].append(resource.path)
146147

147148
for child_rid in child_rids:
148149
child = codebase.get_resource(child_rid)
@@ -156,18 +157,19 @@ def process_codebase(self, codebase, **kwargs):
156157
child.summarized_to = resource.path
157158
child.save(codebase)
158159

159-
repacked_summarized_dirs = defaultdict(lambda: defaultdict(list))
160-
for (holders, license_expression), summarized_dirs in summarized_dirs_by_license_and_holder.items():
161-
holder = '\n'.join(holders)
162-
repacked_summarized_dirs[license_expression][holder].extend(summarized_dirs)
163-
164-
for license_expression, summarized_dirs_by_holders in sorted(repacked_summarized_dirs.items()):
160+
# Add summarized directory info to the `summarized_directories` codebase attribute in sorted order
161+
for license_expression, summarized_dirs_by_holders in sorted(summarized_dirs_by_license_and_holder.items()):
165162
for holder, summarized_dirs in sorted(summarized_dirs_by_holders.items()):
166-
codebase_summarized_directories = codebase.attributes.summarized_directories
167-
if license_expression in codebase_summarized_directories:
168-
codebase.attributes.summarized_directories[license_expression].update({holder: sorted(summarized_dirs)})
163+
codebase_summarized_dirs = codebase.attributes.summarized_directories
164+
sorted_summarized_dirs = sorted(summarized_dirs)
165+
# TODO: These checks could be avoided if there was an ordered defaultdict
166+
if license_expression in codebase_summarized_dirs:
167+
if holder in codebase_summarized_dirs[license_expression]:
168+
codebase_summarized_dirs[license_expression][holder].extend(sorted_summarized_dirs)
169+
else:
170+
codebase_summarized_dirs[license_expression][holder] = sorted_summarized_dirs
169171
else:
170-
codebase.attributes.summarized_directories[license_expression] = OrderedDict({holder: sorted(summarized_dirs)})
172+
codebase_summarized_dirs[license_expression] = OrderedDict({holder: sorted_summarized_dirs})
171173

172174

173175
def is_majority(count, files_count):

0 commit comments

Comments
 (0)