Skip to content

Commit 1725e90

Browse files
authored
Merge pull request #374 from splitio/iff-update-parser
Added support for FF to push.parser class
2 parents c85ce86 + 390f498 commit 1725e90

File tree

2 files changed

+61
-14
lines changed

2 files changed

+61
-14
lines changed

splitio/push/parser.py

Lines changed: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from splitio.util.time import utctime_ms
88
from splitio.push.sse import SSE_EVENT_ERROR, SSE_EVENT_MESSAGE
99

10-
1110
class EventType(Enum):
1211
"""Event type enumeration."""
1312

@@ -277,7 +276,7 @@ def __str__(self):
277276

278277

279278
class BaseUpdate(BaseMessage, metaclass=abc.ABCMeta):
280-
"""Split data update notification."""
279+
"""Feature flag data update notification."""
281280

282281
def __init__(self, channel, timestamp, change_number):
283282
"""
@@ -324,11 +323,14 @@ def change_number(self):
324323

325324

326325
class SplitChangeUpdate(BaseUpdate):
327-
"""Split Change notification."""
326+
"""Feature flag Change notification."""
328327

329-
def __init__(self, channel, timestamp, change_number):
328+
def __init__(self, channel, timestamp, change_number, previous_change_number, feature_flag_definition, compression):
330329
"""Class constructor."""
331330
BaseUpdate.__init__(self, channel, timestamp, change_number)
331+
self._previous_change_number = previous_change_number
332+
self._feature_flag_definition = feature_flag_definition
333+
self._compression = compression
332334

333335
@property
334336
def update_type(self): # pylint:disable=no-self-use
@@ -340,18 +342,48 @@ def update_type(self): # pylint:disable=no-self-use
340342
"""
341343
return UpdateType.SPLIT_UPDATE
342344

345+
@property
346+
def previous_change_number(self): # pylint:disable=no-self-use
347+
"""
348+
Return previous change number
349+
350+
:returns: The previous change number
351+
:rtype: int
352+
"""
353+
return self._previous_change_number
354+
355+
@property
356+
def feature_flag_definition(self): # pylint:disable=no-self-use
357+
"""
358+
Return feature flag definition
359+
360+
:returns: The new feature flag definition
361+
:rtype: str
362+
"""
363+
return self._feature_flag_definition
364+
365+
@property
366+
def compression(self): # pylint:disable=no-self-use
367+
"""
368+
Return previous compression type
369+
370+
:returns: The compression type
371+
:rtype: int
372+
"""
373+
return self._compression
374+
343375
def __str__(self):
344376
"""Return string representation."""
345377
return "SplitChange - changeNumber=%d" % (self.change_number)
346378

347379

348380
class SplitKillUpdate(BaseUpdate):
349-
"""Split Kill notification."""
381+
"""Feature flag Kill notification."""
350382

351-
def __init__(self, channel, timestamp, change_number, split_name, default_treatment): # pylint:disable=too-many-arguments
383+
def __init__(self, channel, timestamp, change_number, feature_flag_name, default_treatment): # pylint:disable=too-many-arguments
352384
"""Class constructor."""
353385
BaseUpdate.__init__(self, channel, timestamp, change_number)
354-
self._split_name = split_name
386+
self._feature_flag_name = feature_flag_name
355387
self._default_treatment = default_treatment
356388

357389
@property
@@ -365,14 +397,14 @@ def update_type(self): # pylint:disable=no-self-use
365397
return UpdateType.SPLIT_KILL
366398

367399
@property
368-
def split_name(self):
400+
def feature_flag_name(self):
369401
"""
370-
Return the name of the killed split.
402+
Return the name of the killed feature flag.
371403
372-
:returns: name of the killed split
404+
:returns: name of the killed feature flag
373405
:rtype: str
374406
"""
375-
return self._split_name
407+
return self._feature_flag_name
376408

377409
@property
378410
def default_treatment(self):
@@ -387,7 +419,7 @@ def default_treatment(self):
387419
def __str__(self):
388420
"""Return string representation."""
389421
return "SplitKill - changeNumber=%d, name=%s, defaultTreatment=%s" % \
390-
(self.change_number, self.split_name, self.default_treatment)
422+
(self.change_number, self.feature_flag, self.default_treatment)
391423

392424

393425
class SegmentChangeUpdate(BaseUpdate):
@@ -472,7 +504,7 @@ def _parse_update(channel, timestamp, data):
472504
update_type = UpdateType(data['type'])
473505
change_number = data['changeNumber']
474506
if update_type == UpdateType.SPLIT_UPDATE:
475-
return SplitChangeUpdate(channel, timestamp, change_number)
507+
return SplitChangeUpdate(channel, timestamp, change_number, data.get('pcn'), data.get('d'), data.get('c'))
476508
elif update_type == UpdateType.SPLIT_KILL:
477509
return SplitKillUpdate(channel, timestamp, change_number,
478510
data['splitName'], data['defaultTreatment'])

tests/push/test_parser.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,18 @@ def test_event_parsing(self):
5555
assert isinstance(parsed0, SplitKillUpdate)
5656
assert parsed0.default_treatment == 'some'
5757
assert parsed0.change_number == 1591996754396
58-
assert parsed0.split_name == 'test'
58+
assert parsed0.feature_flag_name == 'test'
59+
60+
e1 = make_message(
61+
'NDA5ODc2MTAyNg==_MzAyODY0NDkyOA==_splits',
62+
{'type':'SPLIT_UPDATE','changeNumber':1591996685190, 'pcn': 12, 'c': 2, 'd': 'eJzEUtFu2kAQ/BU0z4d0hw2Be0MFRVGJIx'},
63+
)
64+
parsed1 = parse_incoming_event(e1)
65+
assert isinstance(parsed1, SplitChangeUpdate)
66+
assert parsed1.change_number == 1591996685190
67+
assert parsed1.previous_change_number == 12
68+
assert parsed1.compression == 2
69+
assert parsed1.feature_flag_definition == 'eJzEUtFu2kAQ/BU0z4d0hw2Be0MFRVGJIx'
5970

6071
e1 = make_message(
6172
'NDA5ODc2MTAyNg==_MzAyODY0NDkyOA==_splits',
@@ -64,6 +75,10 @@ def test_event_parsing(self):
6475
parsed1 = parse_incoming_event(e1)
6576
assert isinstance(parsed1, SplitChangeUpdate)
6677
assert parsed1.change_number == 1591996685190
78+
assert parsed1.previous_change_number == None
79+
assert parsed1.compression == None
80+
assert parsed1.feature_flag_definition == None
81+
6782

6883
e2 = make_message(
6984
'NDA5ODc2MTAyNg==_MzAyODY0NDkyOA==_segments',

0 commit comments

Comments
 (0)