diff options
Diffstat (limited to 'redis/connection.py')
-rw-r--r-- | redis/connection.py | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/redis/connection.py b/redis/connection.py index d35980c..c4a9685 100644 --- a/redis/connection.py +++ b/redis/connection.py @@ -358,9 +358,6 @@ class PythonParser(BaseParser): byte, response = raw[:1], raw[1:] - if byte not in (b"-", b"+", b":", b"$", b"*"): - raise InvalidResponse(f"Protocol Error: {raw!r}") - # server returned an error if byte == b"-": response = response.decode("utf-8", errors="replace") @@ -379,23 +376,24 @@ class PythonParser(BaseParser): pass # int value elif byte == b":": - response = int(response) + return int(response) # bulk response + elif byte == b"$" and response == b"-1": + return None elif byte == b"$": - length = int(response) - if length == -1: - return None - response = self._buffer.read(length) + response = self._buffer.read(int(response)) # multi-bulk response + elif byte == b"*" and response == b"-1": + return None elif byte == b"*": - length = int(response) - if length == -1: - return None response = [ self._read_response(disable_decoding=disable_decoding) - for i in range(length) + for i in range(int(response)) ] - if isinstance(response, bytes) and disable_decoding is False: + else: + raise InvalidResponse(f"Protocol Error: {raw!r}") + + if disable_decoding is False: response = self.encoder.decode(response) return response |