From 2500f8f2f5fed9b96f50e5d623ca876785d85e66 Mon Sep 17 00:00:00 2001 From: swastik Date: Sat, 13 Jul 2024 01:53:54 +0530 Subject: [PATCH] Update: Create a deep copy of package attribute of codebase to have resources #1395 Signed-off-by: swastik --- src/packagedcode/plugin_package.py | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/packagedcode/plugin_package.py b/src/packagedcode/plugin_package.py index 39ad3cf03df..45637f3ff67 100644 --- a/src/packagedcode/plugin_package.py +++ b/src/packagedcode/plugin_package.py @@ -13,6 +13,7 @@ import attr import click +import copy from commoncode.cliutils import PluggableCommandLineOption from commoncode.cliutils import DOC_GROUP @@ -39,6 +40,7 @@ from packagedcode.models import Package from packagedcode.models import PackageData from packagedcode.models import PackageWithResources +from packagedcode.models import get_files_for_packages from summarycode.score import compute_license_score_package_level TRACE = os.environ.get('SCANCODE_DEBUG_PACKAGE_API', False) @@ -304,12 +306,34 @@ def process_codebase(self, codebase, package_summary, **kwargs): if not self.is_enabled(package_summary): return - packages= codebase.attributes.packages - for package in packages: + packages = codebase.attributes.packages + resource_for_packages = list(get_files_for_packages(codebase)) + packages_copy = copy.deepcopy(packages) # created a deep copy + package_resources = {} + + for resource, package_uid in resource_for_packages: + if package_uid not in package_resources: + package_resources[package_uid] = [] + package_resources[package_uid].append(resource) + + for package in packages_copy: + package_uid = package['package_uid'] + if package_uid in package_resources: + resources_for_package = package_resources[package_uid] + for resource in resources_for_package: + package['resources']= resource.to_dict() + else: + print(f"No resources found for package {package_uid}") + + for package in packages_copy: scoring_elements= compute_license_score_package_level(package) license_clarity_score= scoring_elements.to_dict() - package['license_clarity_score'] = license_clarity_score + # adding license_clarity_score to package attribute(orignal) + for package in packages: + package['license_clarity_score'] = license_clarity_score + + def add_license_from_file(resource, codebase): """ Given a Resource, check if the detected package_data doesn't have license detections