@@ -666,53 +666,32 @@ def compute_content_id_v2(advisory_data):
666666 """
667667 Compute a unique content_id for an advisory by normalizing its data and hashing it.
668668
669- :param advisory_data: An AdvisoryData object
669+ :param advisory_data: An AdvisoryDataV2 or AdvisoryV2 object
670670 :return: SHA-256 hash digest as content_id
671671 """
672-
673- # Normalize fields
674672 from vulnerabilities .importer import AdvisoryDataV2
675673 from vulnerabilities .models import AdvisoryV2
676674
677- if isinstance (advisory_data , AdvisoryV2 ):
678- normalized_data = {
679- "aliases" : normalize_list (advisory_data .aliases ),
680- "summary" : normalize_text (advisory_data .summary ),
681- "impacted_packages" : sorted (
682- [impact .to_dict () for impact in advisory_data .impacted_packages .all ()],
683- key = lambda x : json .dumps (x , sort_keys = True ),
684- ),
685- "patches" : sorted (
686- [patch .to_patch_data ().to_dict () for patch in advisory_data .patches .all ()],
687- key = lambda x : json .dumps (x , sort_keys = True ),
688- ),
689- "references" : [ref for ref in normalize_list (advisory_data .references ) if ref ],
690- "weaknesses" : normalize_list (advisory_data .weaknesses ),
691- }
692- normalized_data ["url" ] = advisory_data .url
693-
694- elif isinstance (advisory_data , AdvisoryDataV2 ):
695- normalized_data = {
696- "advisory_id" : normalize_text (advisory_data .advisory_id ),
697- "aliases" : normalize_list (advisory_data .aliases ),
698- "summary" : normalize_text (advisory_data .summary ),
699- "affected_packages" : [
700- pkg .to_dict () for pkg in normalize_list (advisory_data .affected_packages ) if pkg
701- ],
702- "references" : [
703- ref .to_dict () for ref in normalize_list (advisory_data .references ) if ref
704- ],
705- "severities" : [
706- sev .to_dict () for sev in normalize_list (advisory_data .severities ) if sev
707- ],
708- "weaknesses" : normalize_list (advisory_data .weaknesses ),
709- "patches" : [patch .to_dict () for patch in normalize_list (advisory_data .patches )],
710- }
711- normalized_data ["url" ] = advisory_data .url
712-
713- else :
675+ if not isinstance (advisory_data , (AdvisoryV2 , AdvisoryDataV2 )):
714676 raise ValueError ("Unsupported advisory data type for content ID computation" )
715677
678+ if isinstance (advisory_data , AdvisoryV2 ):
679+ advisory_data = advisory_data .to_advisory_data ()
680+
681+ normalized_data = {
682+ "advisory_id" : normalize_text (advisory_data .advisory_id ),
683+ "aliases" : normalize_list (advisory_data .aliases ),
684+ "summary" : normalize_text (advisory_data .summary ),
685+ "affected_packages" : [
686+ pkg .to_dict () for pkg in normalize_list (advisory_data .affected_packages ) if pkg
687+ ],
688+ "references" : [ref .to_dict () for ref in normalize_list (advisory_data .references ) if ref ],
689+ "severities" : [sev .to_dict () for sev in normalize_list (advisory_data .severities ) if sev ],
690+ "weaknesses" : normalize_list (advisory_data .weaknesses ),
691+ "patches" : [patch .to_dict () for patch in normalize_list (advisory_data .patches )],
692+ }
693+ normalized_data ["url" ] = advisory_data .url
694+
716695 normalized_json = json .dumps (normalized_data , separators = ("," , ":" ), sort_keys = True )
717696 content_id = hashlib .sha256 (normalized_json .encode ("utf-8" )).hexdigest ()
718697
0 commit comments