You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/dev-python/semver/files/2.10.1-getitem.patch

148 lines
4.1 KiB

From f332326e54a5582092b50c8fa113d11bbdf1a9e6 Mon Sep 17 00:00:00 2001
From: Thomas Laferriere <t.laferriere@hotmail.ca>
Date: Wed, 10 Jun 2020 01:44:11 -0400
Subject: [PATCH] Fix #260 __getitem__ returning `None` on falsy parts
* Fix #260 and add tests for these special cases
* Fix IndexError not being thrown every time it should
* Update CHANGELOG.rst
Co-authored-by: Tom Schraitle <tomschr@users.noreply.github.com>
---
CHANGELOG.rst | 28 ++++++++++++++++++++++++++++
semver.py | 9 ++++-----
test_semver.py | 35 ++++++++++++++++++++++++++++-------
3 files changed, 60 insertions(+), 12 deletions(-)
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index c28880e..2671ef2 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -7,6 +7,34 @@ All notable changes to this code base will be documented in this file,
in every released version.
+Version 2.10.2 (WIP)
+====================
+
+:Released: 2020-xx-yy
+:Maintainer:
+
+Features
+--------
+
+n/a
+
+Bug Fixes
+---------
+
+:gh:`260` (:pr:`261`): Fixed ``__getitem__`` returning None on wrong parts
+
+
+Additions
+---------
+
+n/a
+
+Removals
+--------
+
+n/a
+
+
Version 2.10.1
==============
diff --git a/semver.py b/semver.py
index 00338e8..0c98af9 100644
--- a/semver.py
+++ b/semver.py
@@ -548,17 +548,16 @@ def __getitem__(self, index):
if (
isinstance(index, slice)
- and (index.start is None or index.start < 0)
- and (index.stop is None or index.stop < 0)
+ and (index.start is not None and index.start < 0)
+ or (index.stop is not None and index.stop < 0)
):
raise IndexError("Version index cannot be negative")
- # Could raise IndexError:
- part = tuple(filter(None, self.to_tuple()[index]))
+ part = tuple(filter(lambda p: p is not None, self.to_tuple()[index]))
if len(part) == 1:
part = part[0]
- if not part:
+ elif not part:
raise IndexError("Version part undefined")
return part
diff --git a/test_semver.py b/test_semver.py
index 8ecc81f..1fd87ee 100644
--- a/test_semver.py
+++ b/test_semver.py
@@ -774,6 +774,8 @@ def test_should_be_able_to_use_integers_as_prerelease_build():
("1.2.3", 0, 1),
("1.2.3", 1, 2),
("1.2.3", 2, 3),
+ # Special cases
+ ("1.0.2", 1, 0),
],
)
def test_version_info_should_be_accessed_with_index(version, index, expected):
@@ -801,6 +803,7 @@ def test_version_info_should_be_accessed_with_index(version, index, expected):
("1.2.3-rc.0+build.0", slice(0, 5, 2), (1, 3, "build.0")),
("1.2.3-rc.0+build.0", slice(None, 5, 2), (1, 3, "build.0")),
("1.2.3-rc.0+build.0", slice(5, 0, -2), ("build.0", 3)),
+ ("1.2.0-rc.0+build.0", slice(3), (1, 2, 0)),
],
)
def test_version_info_should_be_accessed_with_slice_object(
@@ -813,19 +816,37 @@ def test_version_info_should_be_accessed_with_slice_object(
@pytest.mark.parametrize(
"version, index",
[
- ("1.2.3-rc.0+build.0", -1),
- ("1.2.3-rc.0", -1),
- ("1.2.3-rc.0", 4),
- ("1.2.3", -1),
("1.2.3", 3),
+ ("1.2.3", slice(3, 4)),
("1.2.3", 4),
- ("1.2.3", 10),
- ("1.2.3", slice(-3)),
+ ("1.2.3", slice(4, 5)),
+ ("1.2.3", 5),
+ ("1.2.3", slice(5, 6)),
+ ("1.2.3-rc.0", 5),
+ ("1.2.3-rc.0", slice(5, 6)),
+ ("1.2.3-rc.0", 6),
+ ("1.2.3-rc.0", slice(6, 7)),
],
)
def test_version_info_should_throw_index_error(version, index):
version_info = VersionInfo.parse(version)
- with pytest.raises(IndexError):
+ with pytest.raises(IndexError, match=r"Version part undefined"):
+ version_info[index]
+
+
+@pytest.mark.parametrize(
+ "version, index",
+ [
+ ("1.2.3", -1),
+ ("1.2.3", -2),
+ ("1.2.3", slice(-2, 2)),
+ ("1.2.3", slice(2, -2)),
+ ("1.2.3", slice(-2, -2)),
+ ],
+)
+def test_version_info_should_throw_index_error_when_negative_index(version, index):
+ version_info = VersionInfo.parse(version)
+ with pytest.raises(IndexError, match=r"Version index cannot be negative"):
version_info[index]