diff options
Diffstat (limited to 'redis/asyncio/connection.py')
-rw-r--r-- | redis/asyncio/connection.py | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/redis/asyncio/connection.py b/redis/asyncio/connection.py index e77fba3..056998e 100644 --- a/redis/asyncio/connection.py +++ b/redis/asyncio/connection.py @@ -267,9 +267,6 @@ class PythonParser(BaseParser): response: Any 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") @@ -289,22 +286,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 = await self._read(length) + response = await self._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 = [ - (await self._read_response(disable_decoding)) for _ in range(length) + (await self._read_response(disable_decoding)) + for _ in range(int(response)) # noqa ] - 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 |