Skip to content

Commit 8ff29e6

Browse files
author
Bilal Al
committed
polish
1 parent 48a5a46 commit 8ff29e6

File tree

2 files changed

+49
-19
lines changed

2 files changed

+49
-19
lines changed

splitio/models/grammar/matchers/semver.py

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ def _build(self, raw_matcher):
177177
:type raw_matcher: dict
178178
"""
179179
self._data = raw_matcher.get('stringMatcherData')
180-
self._semver = Semver(self._data)
180+
self._semver = Semver.build(self._data)
181181

182182
def _match(self, key, attributes=None, context=None):
183183
"""
@@ -193,15 +193,19 @@ def _match(self, key, attributes=None, context=None):
193193
:returns: Wheter the match is successful.
194194
:rtype: bool
195195
"""
196-
if self._data is None:
196+
if self._data is None or self._semver is None:
197197
_LOGGER.error("stringMatcherData is required for EQUAL_TO_SEMVER matcher type")
198-
return None
198+
return False
199199

200200
matching_data = Sanitizer.ensure_string(self._get_matcher_input(key, attributes))
201201
if matching_data is None:
202202
return False
203203

204-
return self._semver.version == Semver(matching_data).version
204+
matching_semver = Semver.build(matching_data)
205+
if matching_semver is None:
206+
return False
207+
208+
return self._semver.version == matching_semver.version
205209

206210
def __str__(self):
207211
"""Return string Representation."""
@@ -222,7 +226,7 @@ def _build(self, raw_matcher):
222226
:type raw_matcher: dict
223227
"""
224228
self._data = raw_matcher.get('stringMatcherData')
225-
self._semver = Semver(self._data)
229+
self._semver = Semver.build(self._data)
226230

227231
def _match(self, key, attributes=None, context=None):
228232
"""
@@ -238,15 +242,19 @@ def _match(self, key, attributes=None, context=None):
238242
:returns: Wheter the match is successful.
239243
:rtype: bool
240244
"""
241-
if self._data is None:
245+
if self._data is None or self._semver is None:
242246
_LOGGER.error("stringMatcherData is required for GREATER_THAN_OR_EQUAL_TO_SEMVER matcher type")
243-
return None
247+
return False
244248

245249
matching_data = Sanitizer.ensure_string(self._get_matcher_input(key, attributes))
246250
if matching_data is None:
247251
return False
248252

249-
return Semver(matching_data).compare(self._semver) in [0, 1]
253+
matching_semver = Semver.build(matching_data)
254+
if matching_semver is None:
255+
return False
256+
257+
return matching_semver.compare(self._semver) in [0, 1]
250258

251259
def __str__(self):
252260
"""Return string Representation."""
@@ -267,7 +275,7 @@ def _build(self, raw_matcher):
267275
:type raw_matcher: dict
268276
"""
269277
self._data = raw_matcher.get('stringMatcherData')
270-
self._semver = Semver(self._data)
278+
self._semver = Semver.build(self._data)
271279

272280
def _match(self, key, attributes=None, context=None):
273281
"""
@@ -283,15 +291,19 @@ def _match(self, key, attributes=None, context=None):
283291
:returns: Wheter the match is successful.
284292
:rtype: bool
285293
"""
286-
if self._data is None:
294+
if self._data is None or self._semver is None:
287295
_LOGGER.error("stringMatcherData is required for LESS_THAN_OR_EQUAL_TO_SEMVER matcher type")
288-
return None
296+
return False
289297

290298
matching_data = Sanitizer.ensure_string(self._get_matcher_input(key, attributes))
291299
if matching_data is None:
292300
return False
293301

294-
return Semver(matching_data).compare(self._semver) in [0, -1]
302+
matching_semver = Semver.build(matching_data)
303+
if matching_semver is None:
304+
return False
305+
306+
return matching_semver.compare(self._semver) in [0, -1]
295307

296308
def __str__(self):
297309
"""Return string Representation."""
@@ -312,8 +324,8 @@ def _build(self, raw_matcher):
312324
:type raw_matcher: dict
313325
"""
314326
self._data = raw_matcher.get('betweenStringMatcherData')
315-
self._semver_start = Semver(self._data['start']) if self._data.get('start') is not None else None
316-
self._semver_end = Semver(self._data['end']) if self._data.get('end') is not None else None
327+
self._semver_start = Semver.build(self._data['start']) if self._data.get('start') is not None else None
328+
self._semver_end = Semver.build(self._data['end']) if self._data.get('end') is not None else None
317329

318330
def _match(self, key, attributes=None, context=None):
319331
"""
@@ -331,13 +343,17 @@ def _match(self, key, attributes=None, context=None):
331343
"""
332344
if self._data is None or self._semver_start is None or self._semver_end is None:
333345
_LOGGER.error("betweenStringMatcherData is required for BETWEEN_SEMVER matcher type")
334-
return None
346+
return False
335347

336348
matching_data = Sanitizer.ensure_string(self._get_matcher_input(key, attributes))
337349
if matching_data is None:
338350
return False
339351

340-
return (self._semver_start.compare(Semver(matching_data)) in [0, -1]) and (self._semver_end.compare(Semver(matching_data)) in [0, 1])
352+
matching_semver = Semver.build(matching_data)
353+
if matching_semver is None:
354+
return False
355+
356+
return (self._semver_start.compare(matching_semver) in [0, -1]) and (self._semver_end.compare(matching_semver) in [0, 1])
341357

342358
def __str__(self):
343359
"""Return string Representation."""
@@ -361,7 +377,7 @@ def _build(self, raw_matcher):
361377
if self._data is not None:
362378
self._data = self._data.get('whitelist')
363379

364-
self._semver_list = [Semver(item) if item is not None else None for item in self._data] if self._data is not None else []
380+
self._semver_list = [Semver.build(item) if item is not None else None for item in self._data] if self._data is not None else []
365381

366382
def _match(self, key, attributes=None, context=None):
367383
"""
@@ -379,13 +395,17 @@ def _match(self, key, attributes=None, context=None):
379395
"""
380396
if self._data is None:
381397
_LOGGER.error("whitelistMatcherData is required for IN_LIST_SEMVER matcher type")
382-
return None
398+
return False
383399

384400
matching_data = Sanitizer.ensure_string(self._get_matcher_input(key, attributes))
385401
if matching_data is None:
386402
return False
387403

388-
return any([item.version == Semver(matching_data).version if item is not None else False for item in self._semver_list])
404+
matching_semver = Semver.build(matching_data)
405+
if matching_semver is None:
406+
return False
407+
408+
return any([item.version == matching_semver.version if item is not None else False for item in self._semver_list])
389409

390410
def __str__(self):
391411
"""Return string Representation."""

tests/models/grammar/test_matchers.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -913,6 +913,8 @@ def test_matcher_behaviour(self, mocker):
913913
assert parsed._match("2.1.8")
914914
assert not parsed._match("2.1.5")
915915
assert not parsed._match("2.1.5-rc1")
916+
assert not parsed._match(None)
917+
assert not parsed._match("semver")
916918

917919
def test_to_json(self):
918920
"""Test that the object serializes to JSON properly."""
@@ -953,6 +955,8 @@ def test_matcher_behaviour(self, mocker):
953955
assert parsed._match("2.1.11")
954956
assert not parsed._match("2.1.5")
955957
assert not parsed._match("2.1.5-rc1")
958+
assert not parsed._match(None)
959+
assert not parsed._match("semver")
956960

957961
def test_to_json(self):
958962
"""Test that the object serializes to JSON properly."""
@@ -993,6 +997,8 @@ def test_matcher_behaviour(self, mocker):
993997
assert not parsed._match("2.1.11")
994998
assert parsed._match("2.1.5")
995999
assert parsed._match("2.1.5-rc1")
1000+
assert not parsed._match(None)
1001+
assert not parsed._match("semver")
9961002

9971003
def test_to_json(self):
9981004
"""Test that the object serializes to JSON properly."""
@@ -1039,6 +1045,8 @@ def test_matcher_behaviour(self, mocker):
10391045
assert parsed._match("2.1.11-rc12")
10401046
assert not parsed._match("2.1.5")
10411047
assert not parsed._match("2.1.12-rc1")
1048+
assert not parsed._match(None)
1049+
assert not parsed._match("semver")
10421050

10431051
def test_to_json(self):
10441052
"""Test that the object serializes to JSON properly."""
@@ -1084,6 +1092,8 @@ def test_matcher_behaviour(self, mocker):
10841092
assert not parsed._match("2.1.11-rc12")
10851093
assert parsed._match("2.1.11")
10861094
assert not parsed._match("2.1.7")
1095+
assert not parsed._match(None)
1096+
assert not parsed._match("semver")
10871097

10881098
def test_to_json(self):
10891099
"""Test that the object serializes to JSON properly."""

0 commit comments

Comments
 (0)