Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
'docopt>=0.6.2',
'enum34;python_version<"3.4"',
'bloom-filter2>=2.0.0',
'splitio_commons==1.1.0'
'splitio_commons==2.0.0'
]

with open(path.join(path.abspath(path.dirname(__file__)), 'splitio', 'version.py')) as f:
Expand Down
183 changes: 103 additions & 80 deletions splitio/client/factory.py

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions splitio/events/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Storage tests module
37 changes: 37 additions & 0 deletions splitio/events/events_emitter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
"""Events Manager."""
import logging

from splitio_commons.events.events_metadata import EventsMetadata
from splitio_commons.models.notification import SdkInternalEventNotification

_LOGGER = logging.getLogger(__name__)

class EventsEmitter(object):
"""Events Emitter class."""

def __init__(self, internal_event_queue):
"""
Construct Events Emitter instance.
"""
self._internal_event_queue = internal_event_queue

def emit(self, sdk_internal_event_type, sdk_event_type, event_metadata={}):
metadata = None
if sdk_event_type != None:
_LOGGER.debug("Emitting SDKEventType %s", sdk_event_type)
metadata = EventsMetadata(sdk_event_type, event_metadata)

self._internal_event_queue.put(
SdkInternalEventNotification(
sdk_internal_event_type, metadata))

async def emit_async(self, sdk_internal_event_type, sdk_event_type, event_metadata={}):
metadata = None
if sdk_event_type != None:
_LOGGER.debug("Emitting SDKEventType %s", sdk_event_type)
metadata = EventsMetadata(sdk_event_type, event_metadata)

await self._internal_event_queue.put(
SdkInternalEventNotification(
sdk_internal_event_type,
metadata))
164 changes: 164 additions & 0 deletions splitio/push/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
from enum import Enum
from itertools import chain

from splitio_commons.push.parser import BaseUpdate
from splitio_commons.push.event_update_type import EventUpdateType as BaseUpdateType

class EventUpdateType(Enum):
"""Message type enumeration."""

SPLIT_UPDATE = 'SPLIT_UPDATE'
SPLIT_KILL = 'SPLIT_KILL'
RB_SEGMENT_UPDATE = 'RB_SEGMENT_UPDATE'

EventUpdateType = Enum('EventUpdateType', [(m.name, m.value) for m in chain(EventUpdateType, BaseUpdateType)])

class SplitChangeUpdate(BaseUpdate):
"""Feature flag Change notification."""

def __init__(self, channel, timestamp, change_number, data, update_type_class):
"""Class constructor."""
BaseUpdate.__init__(self, channel, timestamp, change_number)
self._previous_change_number = data.get('pcn')
self._object_definition = data.get('d')
self._compression = data.get('c')
self._update_type_class = update_type_class

@property
def update_type(self): # pylint:disable=no-self-use
"""
Return the message type.

:returns: The type of this parsed Update.
:rtype: UpdateType
"""
return self._update_type_class.SPLIT_UPDATE

@property
def previous_change_number(self): # pylint:disable=no-self-use
"""
Return previous change number
:returns: The previous change number
:rtype: int
"""
return self._previous_change_number

@property
def object_definition(self): # pylint:disable=no-self-use
"""
Return feature flag definition
:returns: The new feature flag definition
:rtype: str
"""
return self._object_definition

@property
def compression(self): # pylint:disable=no-self-use
"""
Return previous compression type
:returns: The compression type
:rtype: int
"""
return self._compression

def __str__(self):
"""Return string representation."""
return "SplitChange - changeNumber=%d" % (self.change_number)


class SplitKillUpdate(BaseUpdate):
"""Feature flag Kill notification."""

def __init__(self, channel, timestamp, change_number, data, update_type_class): # pylint:disable=too-many-arguments
"""Class constructor."""
BaseUpdate.__init__(self, channel, timestamp, change_number)
self._feature_flag_name = data.get('feature_flag_name')
self._default_treatment = data.get('default_treatment')
self._update_type_class = update_type_class

@property
def update_type(self): # pylint:disable=no-self-use
"""
Return the message type.

:returns: The type of this parsed Update.
:rtype: UpdateType
"""
return self._update_type_class.SPLIT_KILL

@property
def feature_flag_name(self):
"""
Return the name of the killed feature flag.

:returns: name of the killed feature flag
:rtype: str
"""
return self._feature_flag_name

@property
def default_treatment(self):
"""
Return the default treatment.

:returns: default treatment
:rtype: str
"""
return self._default_treatment

def __str__(self):
"""Return string representation."""
return "SplitKill - changeNumber=%d, name=%s, defaultTreatment=%s" % \
(self.change_number, self.feature_flag_name, self.default_treatment)

class RBSChangeUpdate(BaseUpdate):
"""rbs Change notification."""

def __init__(self, channel, timestamp, change_number, data, update_type_class):
"""Class constructor."""
BaseUpdate.__init__(self, channel, timestamp, change_number)
self._previous_change_number = data.get('pcn')
self._object_definition = data.get('d')
self._compression = data.get('c')
self._update_type_class = update_type_class

@property
def update_type(self): # pylint:disable=no-self-use
"""
Return the message type.

:returns: The type of this parsed Update.
:rtype: UpdateType
"""
return self._update_type_class.RB_SEGMENT_UPDATE

@property
def previous_change_number(self): # pylint:disable=no-self-use
"""
Return previous change number
:returns: The previous change number
:rtype: int
"""
return self._previous_change_number

@property
def object_definition(self): # pylint:disable=no-self-use
"""
Return rbs definition
:returns: The new rbs definition
:rtype: str
"""
return self._object_definition

@property
def compression(self): # pylint:disable=no-self-use
"""
Return previous compression type
:returns: The compression type
:rtype: int
"""
return self._compression

def __str__(self):
"""Return string representation."""
return "RBSChange - changeNumber=%d" % (self.change_number)
Loading