def determine_node(self, *args, **kwargs): """ TODO: document """ command = args[0] node_flag = self.nodes_flags.get(command) if node_flag == NodeFlag.BLOCKED: return blocked_command(self, command) elif node_flag == NodeFlag.RANDOM: return [self.connection_pool.nodes.random_node()] elif node_flag == NodeFlag.ALL_MASTERS: return self.connection_pool.nodes.all_masters() elif node_flag == NodeFlag.ALL_NODES: return self.connection_pool.nodes.all_nodes() elif node_flag == NodeFlag.SLOT_ID: # if node flag of command is SLOT_ID # `slot_id` should is assumed in kwargs slot = kwargs.get('slot_id') if not slot: raise RedisClusterException( 'slot_id is needed to execute command {}'.format(command)) return [self.connection_pool.nodes.node_from_slot(slot)] else: return None
def test_blocked_command(): with pytest.raises(RedisClusterException) as ex: blocked_command(None, "SET") assert str(ex.value) == "Command: SET is blocked in redis cluster mode"