@@ -301,6 +301,7 @@ def summarize_values(values, attribute):
301301 holders = summarize_holders ,
302302 authors = summarize_holders ,
303303 programming_language = summarize_languages ,
304+ packages = summarize_packages ,
304305 )
305306 return value_summarizers_by_attr [attribute ](values )
306307
@@ -502,11 +503,29 @@ def package_summarizer(resource, children, keep_details=False):
502503 logger_debug ('package_summarizer: for:' , resource ,
503504 'packages are:' , packs )
504505
506+ package_purls = []
507+ for package in packages :
508+ if package .get ("purl" , False ):
509+ package_purls .append (package ["purl" ])
510+
505511 # Collect direct children packages summary
506512 for child in children :
507513 child_summaries = get_resource_summary (child , key = 'packages' , as_attribute = False ) or []
508- packages .extend (child_summaries )
509-
514+ for child_summary in child_summaries :
515+ values = [child_summary ['value' ]] * child_summary ['count' ]
516+ package_purls .extend (values )
517+
510518 # summarize proper
511- set_resource_summary (resource , key = 'packages' , value = packages , as_attribute = False )
512- return packages
519+ packages_counter = summarize_licenses (package_purls )
520+ summarized = sorted_counter (packages_counter )
521+ set_resource_summary (resource , key = "packages" , value = summarized , as_attribute = keep_details )
522+
523+ return summarized
524+
525+
526+ def summarize_packages (package_purls ):
527+ """
528+ Given a list of package purls, return a mapping of {expression: count
529+ of occurences}
530+ """
531+ return Counter (package_purls )
0 commit comments