@@ -2532,6 +2532,20 @@ class Meta:
25322532 verbose_name_plural = "Advisory severities"
25332533 ordering = ["url" , "scoring_system" , "value" ]
25342534
2535+ def to_dict (self ):
2536+ return {
2537+ "system" : self .scoring_system ,
2538+ "value" : self .value ,
2539+ "scoring_elements" : self .scoring_elements ,
2540+ "published_at" : self .published_at ,
2541+ "url" : self .url ,
2542+ }
2543+
2544+ def to_vulnerability_severity_data (self ):
2545+ from vulnerabilities .importer import VulnerabilitySeverity
2546+
2547+ return VulnerabilitySeverity .from_dict (self .to_dict ())
2548+
25352549
25362550class AdvisoryWeakness (models .Model ):
25372551 """
@@ -2625,6 +2639,18 @@ def is_cpe(self):
26252639 """
26262640 return self .reference_id .startswith ("cpe" )
26272641
2642+ def to_dict (self ):
2643+ return {
2644+ "reference_id" : self .reference_id ,
2645+ "reference_type" : self .reference_type ,
2646+ "url" : self .url ,
2647+ }
2648+
2649+ def to_reference_v2_data (self ):
2650+ from vulnerabilities .importer import ReferenceV2
2651+
2652+ return ReferenceV2 .from_dict (self .to_dict ())
2653+
26282654
26292655class AdvisoryAlias (models .Model ):
26302656 alias = models .CharField (
@@ -2806,18 +2832,17 @@ def get_absolute_url(self):
28062832
28072833 def to_advisory_data (self ) -> "AdvisoryData" :
28082834 from vulnerabilities .importer import AdvisoryData
2809- from vulnerabilities .importer import ReferenceV2
28102835
28112836 return AdvisoryData (
28122837 aliases = [item .alias for item in self .aliases .all ()],
28132838 summary = self .summary ,
28142839 affected_packages = [
2815- impacted .to_affected_package () for impacted in self .impacted_packages .all ()
2840+ impacted .to_affected_package_data () for impacted in self .impacted_packages .all ()
28162841 ],
2817- references_v2 = [ReferenceV2 . from_dict ( ref ) for ref in self .references ],
2842+ references_v2 = [ref . to_reference_v2_data ( ) for ref in self .references . all () ],
28182843 date_published = self .date_published ,
2819- weaknesses = self .weaknesses ,
2820- severities = self .severities ,
2844+ weaknesses = [ weak . cwe_id for weak in self .weaknesses . all ()] ,
2845+ severities = [ sev . to_vulnerability_severity_data () for sev in self .severities . all ()] ,
28212846 url = self .url ,
28222847 )
28232848
@@ -2849,14 +2874,12 @@ class ImpactedPackage(models.Model):
28492874 help_text = "Version less PURL related to impacted range." ,
28502875 )
28512876
2852- affecting_vers = models .CharField (
2853- max_length = 500 ,
2877+ affecting_vers = models .TextField (
28542878 blank = True ,
28552879 help_text = "VersionRange expression for package vulnerable to this impact." ,
28562880 )
28572881
2858- fixed_vers = models .CharField (
2859- max_length = 500 ,
2882+ fixed_vers = models .TextField (
28602883 blank = True ,
28612884 help_text = "VersionRange expression for packages fixing the vulnerable package in this impact." ,
28622885 )
@@ -2879,18 +2902,20 @@ class ImpactedPackage(models.Model):
28792902 help_text = "Timestamp indicating when this impact was added." ,
28802903 )
28812904
2882- def to_affected_package (self ):
2905+ def to_dict (self ):
2906+ from vulnerabilities .utils import purl_to_dict
2907+
2908+ return {
2909+ "package" : purl_to_dict (self .base_purl ),
2910+ "affected_version_range" : self .affecting_vers ,
2911+ "fixed_version_range" : self .fixed_vers ,
2912+ }
2913+
2914+ def to_affected_package_data (self ):
28832915 """Return `AffectedPackageV2` data from the impact."""
28842916 from vulnerabilities .importer import AffectedPackageV2
2885- from vulnerabilities .utils import purl_to_dict
28862917
2887- return AffectedPackageV2 .from_dict (
2888- affected_pkg = {
2889- "package" : purl_to_dict (self .base_purl ),
2890- "affected_version_range" : self .affecting_vers ,
2891- "fixed_version_range" : self .fixed_vers ,
2892- }
2893- )
2918+ return AffectedPackageV2 .from_dict (self .to_dict ())
28942919
28952920
28962921class ToDoRelatedAdvisory (models .Model ):
0 commit comments