def multiproduce(self, data, version=DEFAULT_VERSION, **kwargs): """ Sends messages to the broker on multiple topics and/or partitions. >>> client.produce(( ... ('topic-1', 0, ('message',)), ... ('topic-2', 0, ('message', 'message',)), ... )) :param data: sequence of 3-tuples of the format ``(topic, partition, messages)`` :type data: list, generator, or other iterable :param version: version of message encoding :type version: int :param \*\*kwargs: extra (version-specific) keyword arguments to pass to message encoder """ payloads = [] for topic, partition, messages in data: payload = StructuredBytesIO() write_request_header(payload, topic, partition) payload.write(Message.encode(messages, version=version, **kwargs)) payloads.append(payload) request = StructuredBytesIO() request.pack(2, REQUEST_TYPE_MULTIPRODUCE) request.pack(2, len(payloads)) for payload in payloads: request.write(payload) return self.handler.request(request, has_response=False)
def multiproduce(self, data, version=DEFAULT_VERSION, **kwargs): """ Sends messages to the broker on multiple topics and/or partitions. >>> client.produce(( ... ('topic-1', 0, ('message',)), ... ('topic-2', 0, ('message', 'message',)), ... )) :param data: sequence of 3-tuples of the format ``(topic, partition, messages)`` :type data: list, generator, or other iterable :param version: version of message encoding :type version: int :param \*\*kwargs: extra (version-specific) keyword arguments to pass to message encoder """ payloads = [] for topic, partition, messages in data: payload = StructuredBytesIO() write_request_header(payload, topic, partition) payload.write(Message.encode(messages, version=version, **kwargs)) payloads.append(payload) request = StructuredBytesIO() request.pack(2, REQUEST_TYPE_MULTIPRODUCE) request.pack(2, len(payloads)) for payload in payloads: request.write(payload) return self.handler.request(request, has_response=False)
def produce(self, topic, partition, messages, version=DEFAULT_VERSION, **kwargs): """ Sends messages to the broker on a single topic/partition combination. >>> client.produce('topic', 0, ('message',)) :param topic: topic name :param partition: partition ID :param messages: the messages to be sent :type messages: list, generator, or other iterable of strings :param version: version of message encoding :type version: int :param \*\*kwargs: extra (version-specific) keyword arguments to pass to message encoder """ request = StructuredBytesIO() request.pack(2, REQUEST_TYPE_PRODUCE) write_request_header(request, topic, partition) request.write(Message.encode(messages, version=version, **kwargs)) return self.handler.request(request, has_response=False)
def test_write(self): buf = StructuredBytesIO() buf.write('test') self.assertEqual(str(buf), 'test') buf = StructuredBytesIO() buf.write(StructuredBytesIO('test')) self.assertEqual(str(buf), 'test')
def multifetch(self, data): """ Fetches messages from the broker on multiple topics/partitions. >>> topics = ( ... ('topic-1', 0, 0, 1000), ... ('topic-2', 0, 0, 1000), ... ) >>> for i, response in enumerate(client.fetch(topics)): ... print 'response:', i ... for offset, message in messages: ... print offset, message response 0 0L 'hello world' 20L 'hello world' response 1 0L 'hello world' 20L 'hello world' :param data: sequence of 4-tuples of the format ``(topic, partition, offset, size)`` For more information, see :meth:`Client.fetch`. :rtype: generator of fetch responses (message generators). For more information, see :meth:`Client.fetch`. """ payloads = [] from_offsets = [] for topic, partition, offset, size in data: payload = StructuredBytesIO() write_request_header(payload, topic, partition) from_offsets.append(offset) payload.pack(8, offset) payload.pack(4, size) payloads.append(payload) request = StructuredBytesIO() request.pack(2, REQUEST_TYPE_MULTIFETCH) request.pack(2, len(payloads)) for payload in payloads: request.write(payload) response = self.handler.request(request) return decode_message_sets(response.get(), from_offsets)
def multifetch(self, data): """ Fetches messages from the broker on multiple topics/partitions. >>> topics = ( ... ('topic-1', 0, 0, 1000), ... ('topic-2', 0, 0, 1000), ... ) >>> for i, response in enumerate(client.fetch(topics)): ... print 'response:', i ... for offset, message in messages: ... print offset, message response 0 0L 'hello world' 20L 'hello world' response 1 0L 'hello world' 20L 'hello world' :param data: sequence of 4-tuples of the format ``(topic, partition, offset, size)`` For more information, see :meth:`Client.fetch`. :rtype: generator of fetch responses (message generators). For more information, see :meth:`Client.fetch`. """ payloads = [] from_offsets = [] for topic, partition, offset, size in data: payload = StructuredBytesIO() write_request_header(payload, topic, partition) from_offsets.append(offset) payload.pack(8, offset) payload.pack(4, size) payloads.append(payload) request = StructuredBytesIO() request.pack(2, REQUEST_TYPE_MULTIFETCH) request.pack(2, len(payloads)) for payload in payloads: request.write(payload) response = self.handler.request(request) return decode_message_sets(response.get(), from_offsets)
def produce(self, topic, partition, messages, version=DEFAULT_VERSION, **kwargs): """ Sends messages to the broker on a single topic/partition combination. >>> client.produce('topic', 0, ('message',)) :param topic: topic name :param partition: partition ID :param messages: the messages to be sent :type messages: list, generator, or other iterable of strings :param version: version of message encoding :type version: int :param \*\*kwargs: extra (version-specific) keyword arguments to pass to message encoder """ request = StructuredBytesIO() request.pack(2, REQUEST_TYPE_PRODUCE) write_request_header(request, topic, partition) request.write(Message.encode(messages, version=version, **kwargs)) return self.handler.request(request, has_response=False)