3636import requests
3737from univers .version_specifier import VersionSpecifier
3838from univers .versions import PYPIVersion
39+ from univers .versions import InvalidVersion
3940from packageurl import PackageURL
4041from schema import Or
4142from schema import Regex
@@ -97,8 +98,6 @@ def collect_packages(self):
9798 return {pkg for pkg in self ._api_response }
9899
99100 def updated_advisories (self ) -> Set [Advisory ]:
100- advisories = []
101-
102101 for package_name in self ._api_response :
103102 if package_name == "$meta" or package_name == "cumin" :
104103 # This is the first entry in the data feed. It contains metadata of the feed.
@@ -129,7 +128,7 @@ def updated_advisories(self) -> Set[Advisory]:
129128 )
130129
131130 reference = [Reference (reference_id = advisory ["id" ])]
132-
131+ advisories = []
133132 for cve_id in cve_ids :
134133 advisories .append (
135134 Advisory (
@@ -142,7 +141,7 @@ def updated_advisories(self) -> Set[Advisory]:
142141 )
143142 )
144143
145- return advisories
144+ yield advisories
146145
147146 # FIXME: This is duplicate code. Use the the helper instead.
148147 def create_etag (self , url ):
@@ -172,10 +171,12 @@ def categorize_versions(
172171 for version_spec in version_specs :
173172 vurl_specs .append (VersionSpecifier .from_scheme_version_spec_string ("pypi" , version_spec ))
174173
174+ invalid_versions = set ()
175175 for version in all_versions :
176176 try :
177177 version_object = PYPIVersion (version )
178- except :
178+ except InvalidVersion :
179+ invalid_versions .add (version )
179180 continue
180181
181182 if any ([version_object in vurl_spec for vurl_spec in vurl_specs ]):
@@ -189,6 +190,7 @@ def categorize_versions(
189190 )
190191
191192 resolved_purls = []
193+ all_versions -= invalid_versions
192194 for version in all_versions - impacted_versions :
193195 resolved_purls .append (PackageURL (name = package_name , type = "pypi" , version = version ))
194196 return impacted_purls , resolved_purls
0 commit comments