5959from dejacode_toolkit .download import collect_package_data
6060from dejacode_toolkit .purldb import PurlDB
6161from dejacode_toolkit .purldb import pick_purldb_entry
62+ from dejacode_toolkit .purldb import pick_source_package
6263from dejacode_toolkit .scancodeio import ScanCodeIO
6364from dje import urn
6465from dje .copier import post_copy
@@ -2535,7 +2536,7 @@ def create_from_url(cls, url, user):
25352536 package_for_match = cls (download_url = download_url )
25362537 package_for_match .set_package_url (package_url )
25372538 purldb_entries = package_for_match .get_purldb_entries (user )
2538- # Look for one ith the same exact purl in that case
2539+ # Look for one with the same exact purl in that case
25392540 if purldb_data := pick_purldb_entry (purldb_entries , purl = url ):
25402541 # The format from PurlDB is "2019-11-18T00:00:00Z" from DateTimeField
25412542 if release_date := purldb_data .get ("release_date" ):
@@ -2597,7 +2598,7 @@ def get_purldb_entries(self, user, max_request_call=0, timeout=10):
25972598 if self .download_url :
25982599 payloads .append ({"download_url" : self .download_url })
25992600 if package_url :
2600- payloads .append ({"purl" : package_url , "sort" : "package_content" })
2601+ payloads .append ({"purl" : package_url })
26012602
26022603 purldb = PurlDB (user .dataspace )
26032604 for index , payload in enumerate (payloads ):
@@ -2628,6 +2629,8 @@ def update_from_purldb(self, user):
26282629
26292630 - Retrieves matching entries from PurlDB using the given user.
26302631 - If exactly one match is found, its data is used directly.
2632+ - If multiple entries are found, leverage the package_content value when
2633+ available to select a "source" package.
26312634 - If multiple entries are found, only values that are non-empty and
26322635 common across all entries are merged and used to update the Package.
26332636 """
@@ -2638,6 +2641,11 @@ def update_from_purldb(self, user):
26382641 purldb_entries_count = len (purldb_entries )
26392642 if purldb_entries_count == 1 :
26402643 package_data = purldb_entries [0 ]
2644+ elif source_package := pick_source_package (purldb_entries ):
2645+ package_data = source_package
2646+ package_data ["package_content" ] = Package .get_package_content_value_from_label (
2647+ package_data ["package_content" ]
2648+ )
26412649 else :
26422650 package_data = merge_common_non_empty_values (purldb_entries )
26432651
@@ -2678,6 +2686,12 @@ def update_from_purldb(self, user):
26782686 override = False ,
26792687 override_unknown = True ,
26802688 )
2689+
2690+ if updated_fields :
2691+ msg = f"Automatically updated { ', ' .join (updated_fields )} from PurlDB."
2692+ logger .debug (f"PurlDB: { msg } " )
2693+ History .log_change (user , self , message = msg )
2694+
26812695 return updated_fields
26822696
26832697 def update_from_scan (self , user , update_products = False ):
0 commit comments