summaryrefslogtreecommitdiff
path: root/redis/asyncio/connection.py
diff options
context:
space:
mode:
Diffstat (limited to 'redis/asyncio/connection.py')
-rw-r--r--redis/asyncio/connection.py25
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