@@ -73,8 +73,7 @@ def parse(version):
73
73
return version_parts
74
74
75
75
76
- class VersionInfo (collections .namedtuple (
77
- 'VersionInfo' , 'major minor patch prerelease build' )):
76
+ class VersionInfo :
78
77
"""
79
78
:param int major: version when you make incompatible API changes.
80
79
:param int minor: version when you add functionality in
@@ -83,7 +82,26 @@ class VersionInfo(collections.namedtuple(
83
82
:param str prerelease: an optional prerelease string
84
83
:param str build: an optional build string
85
84
"""
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
+ ))
87
105
88
106
def __eq__ (self , other ):
89
107
if not isinstance (other , (VersionInfo , dict )):
@@ -115,11 +133,16 @@ def __ge__(self, other):
115
133
return NotImplemented
116
134
return _compare_by_keys (self ._asdict (), _to_dict (other )) >= 0
117
135
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
+
118
141
def __str__ (self ):
119
- return format_version (* self )
142
+ return format_version (* ( self . _astuple ()) )
120
143
121
144
def __hash__ (self ):
122
- return hash (tuple ( self ))
145
+ return hash (self . _astuple ( ))
123
146
124
147
@staticmethod
125
148
def parse (version ):
0 commit comments