Skip to content

Commit 5a92ee9

Browse files
Update PackageData creation from package metadata
Signed-off-by: Ayan Sinha Mahapatra <ayansmahapatra@gmail.com>
1 parent 44b2734 commit 5a92ee9

File tree

2 files changed

+34
-22
lines changed

2 files changed

+34
-22
lines changed

src/packagedcode/bower.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,7 @@ def parse(cls, location, package_only=False):
8787
)
8888
)
8989

90-
if package_only:
91-
package_klass = models.PackageDataOnly
92-
else:
93-
package_klass = models.PackageData
94-
95-
yield package_klass(
90+
package_data = dict(
9691
datasource_id=cls.datasource_id,
9792
type=cls.default_package_type,
9893
name=name,
@@ -105,3 +100,4 @@ def parse(cls, location, package_only=False):
105100
vcs_url=vcs_url,
106101
dependencies=dependencies,
107102
)
103+
yield models.PackageData.from_data(package_data, package_only)

src/packagedcode/models.py

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -718,10 +718,38 @@ class PackageData(IdentifiablePackageData):
718718
repr=True,
719719
)
720720

721+
@classmethod
722+
def from_data(cls, package_data, package_only=False):
723+
"""
724+
Return PackageData object created out of the package metadata
725+
present in `package_data` mapping. Also populate license and
726+
copyright holder fields by computing them from extracted license
727+
statement and extracted copyright.
721728
722-
def __attrs_post_init__(self, *args, **kwargs):
723-
self.populate_license_fields()
724-
self.populate_holder_field()
729+
Skip the license/copyright detection step if `package_only` is True.
730+
"""
731+
package_data = cls(**package_data)
732+
733+
if not package_only:
734+
package_data.populate_license_fields()
735+
package_data.populate_holder_field()
736+
else:
737+
package_data.normalize_extracted_license_statement()
738+
739+
return package_data
740+
741+
def normalize_extracted_license_statement(self):
742+
"""
743+
Normalizes the extracted license statement to a readable
744+
YAML string if it was a pythonic object.
745+
"""
746+
if (
747+
self.extracted_license_statement and
748+
not isinstance(self.extracted_license_statement, str)
749+
):
750+
self.extracted_license_statement = saneyaml.dump(
751+
self.extracted_license_statement
752+
)
725753

726754
def populate_holder_field(self):
727755
if not self.copyright:
@@ -781,8 +809,7 @@ def populate_license_fields(self):
781809
f"license_detections: {self.license_detections}"
782810
)
783811

784-
if self.extracted_license_statement and not isinstance(self.extracted_license_statement, str):
785-
self.extracted_license_statement = saneyaml.dump(self.extracted_license_statement)
812+
self.normalize_extracted_license_statement()
786813

787814
def update_purl_fields(self, package_data, replace=False):
788815

@@ -905,17 +932,6 @@ def get_license_detections_and_expression(self):
905932
)
906933

907934

908-
class PackageDataOnly(PackageData):
909-
"""
910-
PackageData class which skips the license/copyright detection during instance
911-
creation.
912-
"""
913-
914-
def __attrs_post_init__(self):
915-
if self.extracted_license_statement and not isinstance(self.extracted_license_statement, str):
916-
self.extracted_license_statement = saneyaml.dump(self.extracted_license_statement)
917-
918-
919935
def get_default_relation_license(datasource_id):
920936
from packagedcode import HANDLER_BY_DATASOURCE_ID
921937
handler = HANDLER_BY_DATASOURCE_ID[datasource_id]

0 commit comments

Comments
 (0)