Skip to content

Commit e48eefa

Browse files
committed
Remove dupe Package.get_non_vulnerable_versions
We had a duplicated Package.get_non_vulnerable_versions method. This removes a dupe and merges the code of both functions. Package.get_non_vulnerable_versions now returns a Package object Signed-off-by: Philippe Ombredanne <[email protected]>
1 parent 5b982c6 commit e48eefa

File tree

2 files changed

+11
-68
lines changed

2 files changed

+11
-68
lines changed

vulnerabilities/models.py

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -734,7 +734,7 @@ def latest_non_vulnerable_version(self):
734734

735735
def get_non_vulnerable_versions(self):
736736
"""
737-
Return a tuple of the next and latest non-vulnerable versions as PackageURL objects.
737+
Return a tuple of the next and latest non-vulnerable versions as Package instance.
738738
Return a tuple of (None, None) if there is no non-vulnerable version.
739739
"""
740740
non_vulnerable_versions = Package.objects.get_fixed_by_package_versions(
@@ -750,10 +750,9 @@ def get_non_vulnerable_versions(self):
750750

751751
if later_non_vulnerable_versions:
752752
sorted_versions = self.sort_by_version(later_non_vulnerable_versions)
753-
next_non_vulnerable_version = sorted_versions[0]
754-
latest_non_vulnerable_version = sorted_versions[-1]
755-
756-
return next_non_vulnerable_version, latest_non_vulnerable_version
753+
next_non_vulnerable = sorted_versions[0]
754+
latest_non_vulnerable = sorted_versions[-1]
755+
return next_non_vulnerable, latest_non_vulnerable
757756

758757
return None, None
759758

@@ -774,33 +773,6 @@ def fixed_package_details(self):
774773

775774
return package_details
776775

777-
def get_non_vulnerable_versions(self):
778-
"""
779-
Return a tuple of the next and latest non-vulnerable versions as PackageURLs. Return a tuple of
780-
(None, None) if there is no non-vulnerable version.
781-
"""
782-
non_vulnerable_versions = Package.objects.get_fixed_by_package_versions(
783-
self, fix=False
784-
).only_non_vulnerable()
785-
sorted_versions = self.sort_by_version(non_vulnerable_versions)
786-
787-
later_non_vulnerable_versions = []
788-
for non_vuln_ver in sorted_versions:
789-
if self.version_class(non_vuln_ver.version) > self.current_version:
790-
later_non_vulnerable_versions.append(non_vuln_ver)
791-
792-
if later_non_vulnerable_versions:
793-
sorted_versions = self.sort_by_version(later_non_vulnerable_versions)
794-
next_non_vulnerable_version = sorted_versions[0]
795-
latest_non_vulnerable_version = sorted_versions[-1]
796-
797-
next_non_vulnerable = PackageURL.from_string(next_non_vulnerable_version.purl)
798-
latest_non_vulnerable = PackageURL.from_string(latest_non_vulnerable_version.purl)
799-
800-
return next_non_vulnerable, latest_non_vulnerable
801-
802-
return None, None
803-
804776
def get_affecting_vulnerabilities(self):
805777
"""
806778
Return a list of vulnerabilities that affect this package together with information regarding

vulnerabilities/tests/test_models.py

Lines changed: 7 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -579,47 +579,18 @@ def test_get_affecting_vulnerabilities_package_method(self):
579579
assert redis_4_1_1_affecting_vulnerabilities == affecting_vulnerabilities
580580

581581
def test_get_non_vulnerable_versions(self):
582-
"""
583-
Return a tuple of the next and latest non-vulnerable versions of this package as PackageURLs.
584-
"""
585-
searched_for_package_redis_4_1_1 = self.package_pypi_redis_4_1_1
586-
redis_4_1_1_non_vulnerable_versions = (
587-
searched_for_package_redis_4_1_1.get_non_vulnerable_versions()
588-
)
589-
590-
non_vulnerable_versions = (
591-
PackageURL(
592-
type="pypi",
593-
namespace=None,
594-
name="redis",
595-
version="5.0.0b1",
596-
qualifiers={},
597-
subpath=None,
598-
),
599-
PackageURL(
600-
type="pypi",
601-
namespace=None,
602-
name="redis",
603-
version="5.0.0b1",
604-
qualifiers={},
605-
subpath=None,
606-
),
607-
)
608-
609-
assert redis_4_1_1_non_vulnerable_versions == non_vulnerable_versions
582+
redis_next, redis_later = self.package_pypi_redis_4_1_1.get_non_vulnerable_versions()
583+
assert redis_next.version == "5.0.0b1"
584+
assert redis_later.version == "5.0.0b1"
610585

611586
def test_version_class_and_current_version(self):
612-
searched_for_package_redis_4_1_1 = self.package_pypi_redis_4_1_1
587+
package = self.package_pypi_redis_4_1_1
613588

614-
package_version_class = RANGE_CLASS_BY_SCHEMES[
615-
searched_for_package_redis_4_1_1.type
616-
].version_class
589+
package_version_class = RANGE_CLASS_BY_SCHEMES[package.type].version_class
617590

618591
assert package_version_class == versions.PypiVersion
619-
assert searched_for_package_redis_4_1_1.current_version == package_version_class(
620-
string="4.1.1"
621-
)
622-
assert str(searched_for_package_redis_4_1_1.current_version) == "4.1.1"
592+
assert package.current_version == package_version_class(string="4.1.1")
593+
assert str(package.current_version) == "4.1.1"
623594

624595
def test_get_fixed_by_package_versions(self):
625596
searched_for_package_redis_4_1_1 = self.package_pypi_redis_4_1_1

0 commit comments

Comments
 (0)