def new_execute_redis_con(self, command, *args, encoding=_NOTSET): """Executes redis command and returns Future waiting for the answer. Raises: * TypeError if any of args can not be encoded as bytes. * ReplyError on redis '-ERR' responses. * ProtocolError when response can not be decoded meaning connection is broken. * ConnectionClosedError when either client or server has closed the connection. """ try: command = command.encode() except AttributeError: pass try: command_run = self.__rsm[command.upper()] except KeyError: raise ValueError("You must setup RSM map before execute any command") if self._reader is None or self._reader.at_eof(): msg = self._close_msg or "Connection closed or corrupted" raise ConnectionClosedError(msg) if command is None: raise TypeError("command must not be None") if None in args: raise TypeError("args must not contain None") command = command.upper().strip() is_pubsub = command in _PUBSUB_COMMANDS is_ping = command in ('PING', b'PING') if self._in_pubsub and not (is_pubsub or is_ping): raise RedisError("Connection in SUBSCRIBE mode") elif is_pubsub: logger.warning("Deprecated. Use `execute_pubsub` method directly") return self.execute_pubsub(command, *args) if command in ('SELECT', b'SELECT'): cb = partial(self._set_db, args=args) elif command in ('MULTI', b'MULTI'): cb = self._start_transaction elif command in ('EXEC', b'EXEC'): cb = partial(self._end_transaction, discard=False) encoding = None elif command in ('DISCARD', b'DISCARD'): cb = partial(self._end_transaction, discard=True) else: cb = None if encoding is _NOTSET: encoding = self._encoding command = command_run fut = get_event_loop().create_future() if self._pipeline_buffer is None: self._writer.write(encode_command(command, *args)) else: encode_command(command, *args, buf=self._pipeline_buffer) self._waiters.append((fut, encoding, cb)) return fut
def test_encode_bytes(self): res = encode_command(b'Hello') self.assertEqual(res, b'*1\r\n$5\r\nHello\r\n') res = encode_command(b'Hello', b'World') self.assertEqual(res, b'*2\r\n$5\r\nHello\r\n$5\r\nWorld\r\n') res = encode_command(b'\0') self.assertEqual(res, b'*1\r\n$1\r\n\0\r\n') res = encode_command(bytearray(b'Hello\r\n')) self.assertEqual(res, b'*1\r\n$7\r\nHello\r\n\r\n')
def test_encode_bytes(): res = encode_command(b'Hello') assert res == b'*1\r\n$5\r\nHello\r\n' res = encode_command(b'Hello', b'World') assert res == b'*2\r\n$5\r\nHello\r\n$5\r\nWorld\r\n' res = encode_command(b'\0') assert res == b'*1\r\n$1\r\n\0\r\n' res = encode_command(bytearray(b'Hello\r\n')) assert res == b'*1\r\n$7\r\nHello\r\n\r\n'
def test_encode_bytes(): res = encode_command(b"Hello") assert res == b"*1\r\n$5\r\nHello\r\n" res = encode_command(b"Hello", b"World") assert res == b"*2\r\n$5\r\nHello\r\n$5\r\nWorld\r\n" res = encode_command(b"\0") assert res == b"*1\r\n$1\r\n\0\r\n" res = encode_command(bytearray(b"Hello\r\n")) assert res == b"*1\r\n$7\r\nHello\r\n\r\n"
def test_encode_errors(self): with self.assertRaises(TypeError): encode_command(dict()) with self.assertRaises(TypeError): encode_command(list()) with self.assertRaises(TypeError): encode_command(None)
def test_encode_errors(): with pytest.raises(TypeError): encode_command(dict()) with pytest.raises(TypeError): encode_command(list()) with pytest.raises(TypeError): encode_command(None)
def test_encode_bytearray(): res = encode_command(bytearray(b"Hello")) assert res == b"*1\r\n$5\r\nHello\r\n" res = encode_command(bytearray(b"Hello"), bytearray(b"world")) assert res == b"*2\r\n$5\r\nHello\r\n$5\r\nworld\r\n"
def test_encode_float(self): res = encode_command(1.0) self.assertEqual(res, b'*1\r\n$3\r\n1.0\r\n') res = encode_command(-1.0) self.assertEqual(res, b'*1\r\n$4\r\n-1.0\r\n')
def test_encode_empty(self): res = encode_command() self.assertEqual(res, b'*0\r\n')
def test_encode_empty(): res = encode_command() assert res == b'*0\r\n'
def test_encode_float(): res = encode_command(1.0) assert res == b"*1\r\n$3\r\n1.0\r\n" res = encode_command(-1.0) assert res == b"*1\r\n$4\r\n-1.0\r\n"
def test_encode_int(self): res = encode_command(1) self.assertEqual(res, b'*1\r\n$1\r\n1\r\n') res = encode_command(-1) self.assertEqual(res, b'*1\r\n$2\r\n-1\r\n')
def test_encode_empty(): res = encode_command() assert res == b"*0\r\n"
def do(cmd, args): val = encode_command(cmd, *args) assert isinstance(val, bytearray)
def test_encode_str(self): res = encode_command('Hello') self.assertEqual(res, b'*1\r\n$5\r\nHello\r\n') res = encode_command('Hello', 'world') self.assertEqual(res, b'*2\r\n$5\r\nHello\r\n$5\r\nworld\r\n')
def test_encode_str(): res = encode_command("Hello") assert res == b"*1\r\n$5\r\nHello\r\n" res = encode_command("Hello", "world") assert res == b"*2\r\n$5\r\nHello\r\n$5\r\nworld\r\n"
def test_encode_int(): res = encode_command(1) assert res == b'*1\r\n$1\r\n1\r\n' res = encode_command(-1) assert res == b'*1\r\n$2\r\n-1\r\n'
def test_encode_int(): res = encode_command(1) assert res == b"*1\r\n$1\r\n1\r\n" res = encode_command(-1) assert res == b"*1\r\n$2\r\n-1\r\n"
def test_encode_float(): res = encode_command(1.0) assert res == b'*1\r\n$3\r\n1.0\r\n' res = encode_command(-1.0) assert res == b'*1\r\n$4\r\n-1.0\r\n'
def test_encode_bytearray(): res = encode_command(bytearray(b'Hello')) assert res == b'*1\r\n$5\r\nHello\r\n' res = encode_command(bytearray(b'Hello'), bytearray(b'world')) assert res == b'*2\r\n$5\r\nHello\r\n$5\r\nworld\r\n'
def test_encode_str(): res = encode_command('Hello') assert res == b'*1\r\n$5\r\nHello\r\n' res = encode_command('Hello', 'world') assert res == b'*2\r\n$5\r\nHello\r\n$5\r\nworld\r\n'