Skip to content

Commit 4378b5b

Browse files
authored
Merge pull request #225 from splitio/task/stringsencoding
Task/stringsencoding
2 parents 89e6059 + 6aa18c2 commit 4378b5b

File tree

6 files changed

+23
-28
lines changed

6 files changed

+23
-28
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,5 @@ target/
7171

7272
# vim backup files
7373
*.swp
74+
75+
.DS_Store

splitio/client/config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@
4141
'redisUnixSocketPath': None,
4242
'redisEncoding': 'utf-8',
4343
'redisEncodingErrors': 'strict',
44-
'redisCharset': None,
44+
'redisCharset': 'utf-8',
4545
'redisErrors': None,
46-
'redisDecodeResponses': False,
46+
'redisDecodeResponses': True,
4747
'redisRetryOnTimeout': False,
4848
'redisSsl': False,
4949
'redisSslKeyfile': None,

splitio/storage/adapters/redis.py

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,6 @@ def missing_redis_dependencies(*_, **__):
1515
StrictRedis = Sentinel = missing_redis_dependencies
1616

1717

18-
def _bytes_to_string(maybe_bytes, encode='utf-8'):
19-
if type(maybe_bytes).__name__ == 'bytes':
20-
return str(maybe_bytes, encode)
21-
return maybe_bytes
22-
23-
2418
class RedisAdapterException(Exception):
2519
"""Exception to be thrown when a redis command fails with an exception."""
2620

@@ -135,7 +129,7 @@ def keys(self, pattern):
135129
"""Mimic original redis function but using user custom prefix."""
136130
try:
137131
return [
138-
_bytes_to_string(key)
132+
key
139133
for key in self._prefix_helper.remove_prefix(self._decorated.keys(self._prefix_helper.add_prefix(pattern)))
140134
]
141135
except RedisError as exc:
@@ -153,7 +147,7 @@ def set(self, name, value, *args, **kwargs):
153147
def get(self, name):
154148
"""Mimic original redis function but using user custom prefix."""
155149
try:
156-
return _bytes_to_string(self._decorated.get(self._prefix_helper.add_prefix(name)))
150+
return self._decorated.get(self._prefix_helper.add_prefix(name))
157151
except RedisError as exc:
158152
raise RedisAdapterException('Error executing get operation') from exc
159153

@@ -189,7 +183,7 @@ def mget(self, names):
189183
"""Mimic original redis function but using user custom prefix."""
190184
try:
191185
return [
192-
_bytes_to_string(item)
186+
item
193187
for item in self._decorated.mget(self._prefix_helper.add_prefix(names))
194188
]
195189
except RedisError as exc:
@@ -199,7 +193,7 @@ def smembers(self, name):
199193
"""Mimic original redis function but using user custom prefix."""
200194
try:
201195
return [
202-
_bytes_to_string(item)
196+
item
203197
for item in self._decorated.smembers(self._prefix_helper.add_prefix(name))
204198
]
205199
except RedisError as exc:
@@ -243,7 +237,7 @@ def hset(self, name, key, value):
243237
def hget(self, name, key):
244238
"""Mimic original redis function but using user custom prefix."""
245239
try:
246-
return _bytes_to_string(self._decorated.hget(self._prefix_helper.add_prefix(name), key))
240+
return self._decorated.hget(self._prefix_helper.add_prefix(name), key)
247241
except RedisError as exc:
248242
raise RedisAdapterException('Error executing hget operation') from exc
249243

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

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

@@ -359,9 +353,9 @@ def _build_default_client(config): # pylint: disable=too-many-locals
359353
unix_socket_path = config.get('redisUnixSocketPath', None)
360354
encoding = config.get('redisEncoding', 'utf-8')
361355
encoding_errors = config.get('redisEncodingErrors', 'strict')
362-
charset = config.get('redisCharset', None)
356+
charset = config.get('redisCharset', 'utf-8')
363357
errors = config.get('redisErrors', None)
364-
decode_responses = config.get('redisDecodeResponses', False)
358+
decode_responses = config.get('redisDecodeResponses', True)
365359
retry_on_timeout = config.get('redisRetryOnTimeout', False)
366360
ssl = config.get('redisSsl', False)
367361
ssl_keyfile = config.get('redisSslKeyfile', None)
@@ -438,7 +432,7 @@ def _build_sentinel_client(config): # pylint: disable=too-many-locals
438432
connection_pool = config.get('redisConnectionPool', None)
439433
encoding = config.get('redisEncoding', 'utf-8')
440434
encoding_errors = config.get('redisEncodingErrors', 'strict')
441-
decode_responses = config.get('redisDecodeResponses', False)
435+
decode_responses = config.get('redisDecodeResponses', True)
442436
retry_on_timeout = config.get('redisRetryOnTimeout', False)
443437
max_connections = config.get('redisMaxConnections', None)
444438
prefix = config.get('redisPrefix')

tests/client/test_factory.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,7 @@ def test_redis_client_creation(self, mocker):
8181
'redisSocketKeepaliveOptions': False,
8282
'redisConnectionPool': False,
8383
'redisUnixSocketPath': '/some_path',
84-
'redisEncoding': 'ascii',
8584
'redisEncodingErrors': 'non-strict',
86-
'redisCharset': 'ascii',
8785
'redisErrors': True,
8886
'redisDecodeResponses': True,
8987
'redisRetryOnTimeout': True,
@@ -120,9 +118,9 @@ def test_redis_client_creation(self, mocker):
120118
socket_keepalive_options=False,
121119
connection_pool=False,
122120
unix_socket_path='/some_path',
123-
encoding='ascii',
121+
encoding='utf-8',
124122
encoding_errors='non-strict',
125-
charset='ascii',
123+
charset='utf-8',
126124
errors=True,
127125
decode_responses=True,
128126
retry_on_timeout=True,

tests/integration/test_client_e2e.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@
1212
InMemorySegmentStorage, InMemorySplitStorage, InMemoryTelemetryStorage
1313
from splitio.storage.redis import RedisEventsStorage, RedisImpressionsStorage, \
1414
RedisSplitStorage, RedisSegmentStorage, RedisTelemetryStorage
15-
from splitio.storage.adapters.redis import RedisAdapter
15+
from splitio.storage.adapters.redis import build, RedisAdapter
1616
from splitio.models import splits, segments
1717
from splitio.engine.impressions import Manager as ImpressionsManager, ImpressionsMode
1818
from splitio.recorder.recorder import StandardRecorder, PipelinedRecorder
19+
from splitio.client.config import DEFAULT_CONFIG
1920

2021

2122
class InMemoryIntegrationTests(object):
@@ -489,7 +490,7 @@ class RedisIntegrationTests(object):
489490
def setup_method(self):
490491
"""Prepare storages with test data."""
491492
metadata = SdkMetadata('python-1.2.3', 'some_ip', 'some_name')
492-
redis_client = RedisAdapter(StrictRedis())
493+
redis_client = build(DEFAULT_CONFIG.copy())
493494
split_storage = RedisSplitStorage(redis_client)
494495
segment_storage = RedisSegmentStorage(redis_client)
495496

@@ -771,7 +772,7 @@ class RedisWithCacheIntegrationTests(RedisIntegrationTests):
771772
def setup_method(self):
772773
"""Prepare storages with test data."""
773774
metadata = SdkMetadata('python-1.2.3', 'some_ip', 'some_name')
774-
redis_client = RedisAdapter(StrictRedis())
775+
redis_client = build(DEFAULT_CONFIG.copy())
775776
split_storage = RedisSplitStorage(redis_client, True)
776777
segment_storage = RedisSegmentStorage(redis_client)
777778

tests/storage/adapters/test_redis_adapter.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def test_adapter_building(self, mocker):
9090
'redisUnixSocketPath': '/tmp/socket',
9191
'redisEncoding': 'utf-8',
9292
'redisEncodingErrors': 'strict',
93-
'redisCharset': 'ascii',
93+
'redisCharset': 'utf-8',
9494
'redisErrors': 'abc',
9595
'redisDecodeResponses': True,
9696
'redisRetryOnTimeout': True,
@@ -117,7 +117,7 @@ def test_adapter_building(self, mocker):
117117
unix_socket_path='/tmp/socket',
118118
encoding='utf-8',
119119
encoding_errors='strict',
120-
charset='ascii',
120+
charset='utf-8',
121121
errors='abc',
122122
decode_responses=True,
123123
retry_on_timeout=True,
@@ -142,7 +142,7 @@ def test_adapter_building(self, mocker):
142142
'redisUnixSocketPath': '/tmp/socket',
143143
'redisEncoding': 'utf-8',
144144
'redisEncodingErrors': 'strict',
145-
'redisCharset': 'ascii',
145+
'redisCharset': 'utf-8',
146146
'redisErrors': 'abc',
147147
'redisDecodeResponses': True,
148148
'redisRetryOnTimeout': True,

0 commit comments

Comments
 (0)