Skip to content
Merged
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: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,5 @@ target/

# vim backup files
*.swp

.DS_Store
4 changes: 2 additions & 2 deletions splitio/client/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@
'redisUnixSocketPath': None,
'redisEncoding': 'utf-8',
'redisEncodingErrors': 'strict',
'redisCharset': None,
'redisCharset': 'utf-8',
'redisErrors': None,
'redisDecodeResponses': False,
'redisDecodeResponses': True,
'redisRetryOnTimeout': False,
'redisSsl': False,
'redisSslKeyfile': None,
Expand Down
26 changes: 10 additions & 16 deletions splitio/storage/adapters/redis.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,6 @@ def missing_redis_dependencies(*_, **__):
StrictRedis = Sentinel = missing_redis_dependencies


def _bytes_to_string(maybe_bytes, encode='utf-8'):
if type(maybe_bytes).__name__ == 'bytes':
return str(maybe_bytes, encode)
return maybe_bytes


class RedisAdapterException(Exception):
"""Exception to be thrown when a redis command fails with an exception."""

Expand Down Expand Up @@ -135,7 +129,7 @@ def keys(self, pattern):
"""Mimic original redis function but using user custom prefix."""
try:
return [
_bytes_to_string(key)
key
for key in self._prefix_helper.remove_prefix(self._decorated.keys(self._prefix_helper.add_prefix(pattern)))
]
except RedisError as exc:
Expand All @@ -153,7 +147,7 @@ def set(self, name, value, *args, **kwargs):
def get(self, name):
"""Mimic original redis function but using user custom prefix."""
try:
return _bytes_to_string(self._decorated.get(self._prefix_helper.add_prefix(name)))
return self._decorated.get(self._prefix_helper.add_prefix(name))
except RedisError as exc:
raise RedisAdapterException('Error executing get operation') from exc

Expand Down Expand Up @@ -189,7 +183,7 @@ def mget(self, names):
"""Mimic original redis function but using user custom prefix."""
try:
return [
_bytes_to_string(item)
item
for item in self._decorated.mget(self._prefix_helper.add_prefix(names))
]
except RedisError as exc:
Expand All @@ -199,7 +193,7 @@ def smembers(self, name):
"""Mimic original redis function but using user custom prefix."""
try:
return [
_bytes_to_string(item)
item
for item in self._decorated.smembers(self._prefix_helper.add_prefix(name))
]
except RedisError as exc:
Expand Down Expand Up @@ -243,7 +237,7 @@ def hset(self, name, key, value):
def hget(self, name, key):
"""Mimic original redis function but using user custom prefix."""
try:
return _bytes_to_string(self._decorated.hget(self._prefix_helper.add_prefix(name), key))
return self._decorated.hget(self._prefix_helper.add_prefix(name), key)
except RedisError as exc:
raise RedisAdapterException('Error executing hget operation') from exc

Expand All @@ -257,7 +251,7 @@ def incr(self, name, amount=1):
def getset(self, name, value):
"""Mimic original redis function but using user custom prefix."""
try:
return _bytes_to_string(self._decorated.getset(self._prefix_helper.add_prefix(name), value))
return self._decorated.getset(self._prefix_helper.add_prefix(name), value)
except RedisError as exc:
raise RedisAdapterException('Error executing getset operation') from exc

Expand All @@ -278,7 +272,7 @@ def expire(self, key, value):
def rpop(self, key):
"""Mimic original redis function but using user custom prefix."""
try:
return _bytes_to_string(self._decorated.rpop(self._prefix_helper.add_prefix(key)))
return self._decorated.rpop(self._prefix_helper.add_prefix(key))
except RedisError as exc:
raise RedisAdapterException('Error executing rpop operation') from exc

Expand Down Expand Up @@ -359,9 +353,9 @@ def _build_default_client(config): # pylint: disable=too-many-locals
unix_socket_path = config.get('redisUnixSocketPath', None)
encoding = config.get('redisEncoding', 'utf-8')
encoding_errors = config.get('redisEncodingErrors', 'strict')
charset = config.get('redisCharset', None)
charset = config.get('redisCharset', 'utf-8')
errors = config.get('redisErrors', None)
decode_responses = config.get('redisDecodeResponses', False)
decode_responses = config.get('redisDecodeResponses', True)
retry_on_timeout = config.get('redisRetryOnTimeout', False)
ssl = config.get('redisSsl', False)
ssl_keyfile = config.get('redisSslKeyfile', None)
Expand Down Expand Up @@ -438,7 +432,7 @@ def _build_sentinel_client(config): # pylint: disable=too-many-locals
connection_pool = config.get('redisConnectionPool', None)
encoding = config.get('redisEncoding', 'utf-8')
encoding_errors = config.get('redisEncodingErrors', 'strict')
decode_responses = config.get('redisDecodeResponses', False)
decode_responses = config.get('redisDecodeResponses', True)
retry_on_timeout = config.get('redisRetryOnTimeout', False)
max_connections = config.get('redisMaxConnections', None)
prefix = config.get('redisPrefix')
Expand Down
6 changes: 2 additions & 4 deletions tests/client/test_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,7 @@ def test_redis_client_creation(self, mocker):
'redisSocketKeepaliveOptions': False,
'redisConnectionPool': False,
'redisUnixSocketPath': '/some_path',
'redisEncoding': 'ascii',
'redisEncodingErrors': 'non-strict',
'redisCharset': 'ascii',
'redisErrors': True,
'redisDecodeResponses': True,
'redisRetryOnTimeout': True,
Expand Down Expand Up @@ -120,9 +118,9 @@ def test_redis_client_creation(self, mocker):
socket_keepalive_options=False,
connection_pool=False,
unix_socket_path='/some_path',
encoding='ascii',
encoding='utf-8',
encoding_errors='non-strict',
charset='ascii',
charset='utf-8',
errors=True,
decode_responses=True,
retry_on_timeout=True,
Expand Down
7 changes: 4 additions & 3 deletions tests/integration/test_client_e2e.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,11 @@
InMemorySegmentStorage, InMemorySplitStorage, InMemoryTelemetryStorage
from splitio.storage.redis import RedisEventsStorage, RedisImpressionsStorage, \
RedisSplitStorage, RedisSegmentStorage, RedisTelemetryStorage
from splitio.storage.adapters.redis import RedisAdapter
from splitio.storage.adapters.redis import build, RedisAdapter
from splitio.models import splits, segments
from splitio.engine.impressions import Manager as ImpressionsManager, ImpressionsMode
from splitio.recorder.recorder import StandardRecorder, PipelinedRecorder
from splitio.client.config import DEFAULT_CONFIG


class InMemoryIntegrationTests(object):
Expand Down Expand Up @@ -489,7 +490,7 @@ class RedisIntegrationTests(object):
def setup_method(self):
"""Prepare storages with test data."""
metadata = SdkMetadata('python-1.2.3', 'some_ip', 'some_name')
redis_client = RedisAdapter(StrictRedis())
redis_client = build(DEFAULT_CONFIG.copy())
split_storage = RedisSplitStorage(redis_client)
segment_storage = RedisSegmentStorage(redis_client)

Expand Down Expand Up @@ -771,7 +772,7 @@ class RedisWithCacheIntegrationTests(RedisIntegrationTests):
def setup_method(self):
"""Prepare storages with test data."""
metadata = SdkMetadata('python-1.2.3', 'some_ip', 'some_name')
redis_client = RedisAdapter(StrictRedis())
redis_client = build(DEFAULT_CONFIG.copy())
split_storage = RedisSplitStorage(redis_client, True)
segment_storage = RedisSegmentStorage(redis_client)

Expand Down
6 changes: 3 additions & 3 deletions tests/storage/adapters/test_redis_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ def test_adapter_building(self, mocker):
'redisUnixSocketPath': '/tmp/socket',
'redisEncoding': 'utf-8',
'redisEncodingErrors': 'strict',
'redisCharset': 'ascii',
'redisCharset': 'utf-8',
'redisErrors': 'abc',
'redisDecodeResponses': True,
'redisRetryOnTimeout': True,
Expand All @@ -117,7 +117,7 @@ def test_adapter_building(self, mocker):
unix_socket_path='/tmp/socket',
encoding='utf-8',
encoding_errors='strict',
charset='ascii',
charset='utf-8',
errors='abc',
decode_responses=True,
retry_on_timeout=True,
Expand All @@ -142,7 +142,7 @@ def test_adapter_building(self, mocker):
'redisUnixSocketPath': '/tmp/socket',
'redisEncoding': 'utf-8',
'redisEncodingErrors': 'strict',
'redisCharset': 'ascii',
'redisCharset': 'utf-8',
'redisErrors': 'abc',
'redisDecodeResponses': True,
'redisRetryOnTimeout': True,
Expand Down