Skip to content

Commit b5ac2d6

Browse files
author
Bilal Al
committed
fixed compare
1 parent 2a467e4 commit b5ac2d6

File tree

1 file changed

+31
-13
lines changed

1 file changed

+31
-13
lines changed

splitio/models/grammar/matchers/semver.py

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
_LOGGER = logging.getLogger(__name__)
99

10-
class Semver(object, metaclass=abc.ABCMeta):
10+
class Semver(object):
1111
"""Semver class."""
1212

1313
_METADATA_DELIMITER = "+"
@@ -26,14 +26,25 @@ def __init__(self, version):
2626
self._patch = 0
2727
self._pre_release = []
2828
self._is_stable = False
29-
self._old_version = version
30-
self._parse()
29+
self.version = ""
30+
self._metadata = ""
31+
self._parse(version)
32+
33+
@classmethod
34+
def build(cls, version):
35+
try:
36+
self = cls(version)
37+
except RuntimeError as e:
38+
_LOGGER.error("Failed to parse Semver data, incorrect data type: %s", e)
39+
return None
40+
41+
return self
3142

32-
def _parse(self):
43+
def _parse(self, version):
3344
"""
34-
Parse the string in self._old_version to update the other internal variables
45+
Parse the string in self.version to update the other internal variables
3546
"""
36-
without_metadata = self.remove_metadata_if_exists()
47+
without_metadata = self.remove_metadata_if_exists(version)
3748

3849
index = without_metadata.find(self._PRE_RELEASE_DELIMITER)
3950
if index == -1:
@@ -45,18 +56,19 @@ def _parse(self):
4556

4657
self.set_major_minor_and_patch(without_metadata)
4758

48-
def remove_metadata_if_exists(self):
59+
def remove_metadata_if_exists(self, version):
4960
"""
50-
Check if there is any metadata characters in self._old_version.
61+
Check if there is any metadata characters in self.version.
5162
5263
:returns: The semver string without the metadata
5364
:rtype: str
5465
"""
55-
index = self._old_version.find(self._METADATA_DELIMITER)
66+
index = version.find(self._METADATA_DELIMITER)
5667
if index == -1:
57-
return self._old_version
68+
return version
5869

59-
return self._old_version[:index]
70+
self._metadata = version[index:]
71+
return version[:index]
6072

6173
def set_major_minor_and_patch(self, version):
6274
"""
@@ -74,6 +86,12 @@ def set_major_minor_and_patch(self, version):
7486
self._minor = int(parts[1])
7587
self._patch = int(parts[2])
7688

89+
self.version = "{major}{DELIMITER}{minor}{DELIMITER}{patch}".format(major = self._major, DELIMITER = self._VALUE_DELIMITER,
90+
minor = self._minor, patch = self._patch)
91+
self.version += "{DELIMITER}{pre_release}".format(DELIMITER=self._PRE_RELEASE_DELIMITER,
92+
pre_release = '.'.join(self._pre_release)) if len(self._pre_release) > 0 else ""
93+
self.version += "{DELIMITER}{metadata}".format(DELIMITER=self._METADATA_DELIMITER, metadata = self._metadata) if self._metadata != "" else ""
94+
7795
def compare(self, to_compare):
7896
"""
7997
Compare the current Semver object to a given Semver object, return:
@@ -87,7 +105,7 @@ def compare(self, to_compare):
87105
:returns: integer based on comparison
88106
:rtype: int
89107
"""
90-
if self._old_version == to_compare._old_version:
108+
if self.version == to_compare.version:
91109
return 0
92110

93111
# Compare major, minor, and patch versions numerically
@@ -178,7 +196,7 @@ def _match(self, key, attributes=None, context=None):
178196
if matching_data is None:
179197
return False
180198

181-
return self._semver.compare(Semver(matching_data)) == 0
199+
return self._semver.version == Semver(matching_data).version
182200

183201
def __str__(self):
184202
"""Return string Representation."""

0 commit comments

Comments
 (0)