Skip to content

Commit 1a0c766

Browse files
author
Bilal Al
committed
fixed compare
1 parent 2bb5c0b commit 1a0c766

File tree

2 files changed

+32
-15
lines changed

2 files changed

+32
-15
lines changed

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
TESTS_REQUIRES = [
88
'flake8',
99
'pytest==7.0.1',
10-
'pytest-mock>=3.5.1',
10+
'pytest-mock==3.13.0',
1111
'coverage==6.2',
1212
'pytest-cov',
1313
'importlib-metadata==4.2',

splitio/models/grammar/matchers/semver.py

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
"""Semver matcher classes."""
2-
import abc
32
import logging
43

54
from splitio.models.grammar.matchers.base import Matcher
65
from splitio.models.grammar.matchers.string import Sanitizer
76

87
_LOGGER = logging.getLogger(__name__)
98

10-
class Semver(object, metaclass=abc.ABCMeta):
9+
class Semver(object):
1110
"""Semver class."""
1211

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

32-
def _parse(self):
42+
def _parse(self, version):
3343
"""
34-
Parse the string in self._old_version to update the other internal variables
44+
Parse the string in self.version to update the other internal variables
3545
"""
36-
without_metadata = self.remove_metadata_if_exists()
46+
without_metadata = self.remove_metadata_if_exists(version)
3747

3848
index = without_metadata.find(self._PRE_RELEASE_DELIMITER)
3949
if index == -1:
@@ -45,18 +55,19 @@ def _parse(self):
4555

4656
self.set_major_minor_and_patch(without_metadata)
4757

48-
def remove_metadata_if_exists(self):
58+
def remove_metadata_if_exists(self, version):
4959
"""
50-
Check if there is any metadata characters in self._old_version.
60+
Check if there is any metadata characters in self.version.
5161
5262
:returns: The semver string without the metadata
5363
:rtype: str
5464
"""
55-
index = self._old_version.find(self._METADATA_DELIMITER)
65+
index = version.find(self._METADATA_DELIMITER)
5666
if index == -1:
57-
return self._old_version
67+
return version
5868

59-
return self._old_version[:index]
69+
self._metadata = version[index:]
70+
return version[:index]
6071

6172
def set_major_minor_and_patch(self, version):
6273
"""
@@ -74,6 +85,12 @@ def set_major_minor_and_patch(self, version):
7485
self._minor = int(parts[1])
7586
self._patch = int(parts[2])
7687

88+
self.version = "{major}{DELIMITER}{minor}{DELIMITER}{patch}".format(major = self._major, DELIMITER = self._VALUE_DELIMITER,
89+
minor = self._minor, patch = self._patch)
90+
self.version += "{DELIMITER}{pre_release}".format(DELIMITER=self._PRE_RELEASE_DELIMITER,
91+
pre_release = '.'.join(self._pre_release)) if len(self._pre_release) > 0 else ""
92+
self.version += "{DELIMITER}{metadata}".format(DELIMITER=self._METADATA_DELIMITER, metadata = self._metadata) if self._metadata != "" else ""
93+
7794
def compare(self, to_compare):
7895
"""
7996
Compare the current Semver object to a given Semver object, return:
@@ -87,7 +104,7 @@ def compare(self, to_compare):
87104
:returns: integer based on comparison
88105
:rtype: int
89106
"""
90-
if self._old_version == to_compare._old_version:
107+
if self.version == to_compare.version:
91108
return 0
92109

93110
# Compare major, minor, and patch versions numerically
@@ -178,7 +195,7 @@ def _match(self, key, attributes=None, context=None):
178195
if matching_data is None:
179196
return False
180197

181-
return self._semver.compare(Semver(matching_data)) == 0
198+
return self._semver.version == Semver(matching_data).version
182199

183200
def __str__(self):
184201
"""Return string Representation."""

0 commit comments

Comments
 (0)