Skip to content

Commit 2754b7e

Browse files
author
scls19fr
authored
Remove namedtuple inheritance (#93)
Closes #87 Closes #94 Add entries to CHANGELOG
1 parent 007dde2 commit 2754b7e

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

CHANGELOG

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ Version 2.8.1 (WIP)
1515

1616
* Issue #77 (PR #47). Convert multiple tests into pytest.mark.parametrize
1717
* Issue #89 (PR #90). Add doctests.
18+
* Issue #40 (PR #88). Add a static parse method to VersionInfo
19+
* Issue #87 #94 (PR #93). Remove named tuple inheritance. Fix bad rendering in Pandas DataFrame
1820

1921
Version 2.8.0
2022
=============

semver.py

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,7 @@ def parse(version):
7373
return version_parts
7474

7575

76-
class VersionInfo(collections.namedtuple(
77-
'VersionInfo', 'major minor patch prerelease build')):
76+
class VersionInfo:
7877
"""
7978
:param int major: version when you make incompatible API changes.
8079
:param int minor: version when you add functionality in
@@ -83,7 +82,26 @@ class VersionInfo(collections.namedtuple(
8382
:param str prerelease: an optional prerelease string
8483
:param str build: an optional build string
8584
"""
86-
__slots__ = ()
85+
86+
def __init__(self, major, minor, patch, prerelease, build):
87+
self.major = major
88+
self.minor = minor
89+
self.patch = patch
90+
self.prerelease = prerelease
91+
self.build = build
92+
93+
def _astuple(self):
94+
return (self.major, self.minor, self.patch,
95+
self.prerelease, self.build)
96+
97+
def _asdict(self):
98+
return collections.OrderedDict((
99+
("major", self.major),
100+
("minor", self.minor),
101+
("patch", self.patch),
102+
("prerelease", self.prerelease),
103+
("build", self.build)
104+
))
87105

88106
def __eq__(self, other):
89107
if not isinstance(other, (VersionInfo, dict)):
@@ -115,11 +133,16 @@ def __ge__(self, other):
115133
return NotImplemented
116134
return _compare_by_keys(self._asdict(), _to_dict(other)) >= 0
117135

136+
def __repr__(self):
137+
s = ", ".join("%s=%r" % (key, val)
138+
for key, val in self._asdict().items())
139+
return "VersionInfo(%s)" % s
140+
118141
def __str__(self):
119-
return format_version(*self)
142+
return format_version(*(self._astuple()))
120143

121144
def __hash__(self):
122-
return hash(tuple(self))
145+
return hash(self._astuple())
123146

124147
@staticmethod
125148
def parse(version):

0 commit comments

Comments
 (0)