Skip to content

Commit 1dc4827

Browse files
Fix Package/PackageData creation bugs in purldb (#3710)
Signed-off-by: Ayan Sinha Mahapatra <ayansmahapatra@gmail.com>
1 parent dd675aa commit 1dc4827

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

src/packagedcode/models.py

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -978,7 +978,10 @@ def get_license_detections_and_expression(self):
978978

979979
def get_default_relation_license(datasource_id):
980980
from packagedcode import HANDLER_BY_DATASOURCE_ID
981-
handler = HANDLER_BY_DATASOURCE_ID[datasource_id]
981+
handler = HANDLER_BY_DATASOURCE_ID.get(datasource_id, None)
982+
if not handler:
983+
return 'AND'
984+
982985
return handler.default_relation_license
983986

984987

@@ -1562,6 +1565,8 @@ class Package(PackageData):
15621565
)
15631566

15641567
def __attrs_post_init__(self, *args, **kwargs):
1568+
if not self.purl:
1569+
self.purl = self.set_purl()
15651570
if not self.package_uid:
15661571
self.package_uid = build_package_uid(self.purl)
15671572

@@ -1576,7 +1581,7 @@ def to_package_data(self):
15761581
return PackageData.from_dict(mapping)
15771582

15781583
@classmethod
1579-
def from_package_data(cls, package_data, datafile_path, package_only=False):
1584+
def from_package_data(cls, package_data, datafile_path=None, package_only=False):
15801585
"""
15811586
Return a Package from a ``package_data`` PackageData object
15821587
or mapping. Or None.
@@ -1591,20 +1596,21 @@ def from_package_data(cls, package_data, datafile_path, package_only=False):
15911596
elif package_data:
15921597
raise Exception(f'Invalid type: {package_data!r}', package_data)
15931598

1594-
package_data_mapping['datafile_paths'] = [datafile_path]
15951599
package_data_mapping['datasource_ids'] = [dsid]
15961600

1597-
license_detections = package_data_mapping['license_detections']
1598-
for detection in license_detections:
1599-
for license_match in detection['matches']:
1600-
if not license_match['from_file']:
1601-
license_match['from_file'] = datafile_path
1601+
if datafile_path:
1602+
package_data_mapping['datafile_paths'] = [datafile_path]
1603+
license_detections = package_data_mapping.get('license_detections', [])
1604+
for detection in license_detections:
1605+
for license_match in detection['matches']:
1606+
if not license_match['from_file']:
1607+
license_match['from_file'] = datafile_path
16021608

16031609
package = cls.from_dict(package_data_mapping)
1604-
1610+
16051611
if not package.package_uid:
16061612
package.package_uid = build_package_uid(package.purl)
1607-
1613+
16081614
if not package_only:
16091615
package.populate_license_fields()
16101616
package.populate_holder_field()

0 commit comments

Comments
 (0)