@@ -978,7 +978,10 @@ def get_license_detections_and_expression(self):
978978
979979def 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