Skip to content

Commit 97abacd

Browse files
committed
Added test coverage for decoded responses
1 parent 9852b78 commit 97abacd

File tree

5 files changed

+98
-51
lines changed

5 files changed

+98
-51
lines changed

redis/cache.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,8 @@ def delete_by_redis_keys(self, redis_keys: List[bytes]) -> List[bool]:
201201
keys_to_delete = []
202202

203203
for redis_key in redis_keys:
204-
redis_key = redis_key.decode()
204+
if isinstance(redis_key, bytes):
205+
redis_key = redis_key.decode()
205206
for cache_key in self._cache:
206207
if redis_key in cache_key.get_redis_keys():
207208
keys_to_delete.append(cache_key)

redis/connection.py

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
compare_versions,
4545
format_error_message,
4646
get_lib_version,
47-
str_if_bytes,
47+
str_if_bytes, ensure_string,
4848
)
4949

5050
if HIREDIS_AVAILABLE:
@@ -735,19 +735,10 @@ def _host_error(self):
735735
return f"{self.host}:{self.port}"
736736

737737

738-
def ensure_string(key):
739-
if isinstance(key, bytes):
740-
return key.decode("utf-8")
741-
elif isinstance(key, str):
742-
return key
743-
else:
744-
raise TypeError("Key must be either a string or bytes")
745-
746-
747738
class CacheProxyConnection(ConnectionInterface):
748739
DUMMY_CACHE_VALUE = b"foo"
749740
MIN_ALLOWED_VERSION = "7.4.0"
750-
DEFAULT_SERVER_NAME = b"redis"
741+
DEFAULT_SERVER_NAME = "redis"
751742

752743
def __init__(self, conn: ConnectionInterface, cache: CacheInterface):
753744
self.pid = os.getpid()
@@ -776,12 +767,17 @@ def set_parser(self, parser_class):
776767
def connect(self):
777768
self._conn.connect()
778769

779-
server_name = self._conn.handshake_metadata.get(b"server")
780-
server_ver = self._conn.handshake_metadata.get(b"version")
770+
server_name = self._conn.handshake_metadata.get(b"server", None)
771+
if server_name is None:
772+
server_name = self._conn.handshake_metadata.get("server", None)
773+
server_ver = self._conn.handshake_metadata.get(b"version", None)
781774
if server_ver is None:
775+
server_ver = self._conn.handshake_metadata.get("version", None)
776+
if server_ver is None or server_ver is None:
782777
raise ConnectionError("Cannot retrieve information about server version")
783778

784-
server_ver = server_ver.decode("utf-8")
779+
server_ver = ensure_string(server_ver)
780+
server_name = ensure_string(server_name)
785781

786782
if (
787783
server_name != self.DEFAULT_SERVER_NAME

redis/utils.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,3 +183,12 @@ def compare_versions(version1: str, version2: str) -> int:
183183
return 1
184184

185185
return 0
186+
187+
188+
def ensure_string(key):
189+
if isinstance(key, bytes):
190+
return key.decode("utf-8")
191+
elif isinstance(key, str):
192+
return key
193+
else:
194+
raise TypeError("Key must be either a string or bytes")

tests/conftest.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,13 +442,15 @@ def sentinel_setup(request):
442442
cache = request.param.get("cache", None)
443443
cache_config = request.param.get("cache_config", None)
444444
force_master_ip = request.param.get("force_master_ip", None)
445+
decode_responses = request.param.get("decode_responses", False)
445446
sentinel = Sentinel(
446447
sentinel_endpoints,
447448
force_master_ip=force_master_ip,
448449
socket_timeout=0.1,
449450
cache=cache,
450451
cache_config=cache_config,
451452
protocol=3,
453+
decode_responses=decode_responses,
452454
**kwargs,
453455
)
454456
yield sentinel

0 commit comments

Comments
 (0)