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