class DeleteAclsResponse_v0(Response): API_KEY = 31 API_VERSION = 0 SCHEMA = Schema( ('throttle_time_ms', Int32), ('filter_responses', Array( ('error_code', Int16), ('error_message', String('utf-8')), ('matching_acls', Array( ('error_code', Int16), ('error_message', String('utf-8')), ('resource_type', Int8), ('resource_name', String('utf-8')), ('principal', String('utf-8')), ('host', String('utf-8')), ('operation', Int8), ('permission_type', Int8))))) )
class OffsetDeleteResponse_v0(Response): API_KEY = 47 API_VERSION = 0 SCHEMA = Schema( ('error_code', Int16), ('throttle_time_ms', Int32), ('topics', Array(('topic', String('utf-8')), ('partitions', Array(('partition', Int32), ('error_code', Int16))))))
class ProduceRequest_v0(ProduceRequest): API_VERSION = 0 RESPONSE_TYPE = ProduceResponse_v0 SCHEMA = Schema( ('required_acks', Int16), ('timeout', Int32), ('topics', Array(('topic', String('utf-8')), ('partitions', Array(('partition', Int32), ('messages', Bytes))))))
class CreateAclsResponse_v0(Response): API_KEY = 30 API_VERSION = 0 SCHEMA = Schema( ('throttle_time_ms', Int32), ('creation_responses', Array( ('error_code', Int16), ('error_message', String('utf-8')))) )
class CreateTopicsRequest_v1(Request): API_KEY = 19 API_VERSION = 1 RESPONSE_TYPE = CreateTopicsResponse_v1 SCHEMA = Schema( ('create_topic_requests', Array( ('topic', String('utf-8')), ('num_partitions', Int32), ('replication_factor', Int16), ('replica_assignment', Array( ('partition_id', Int32), ('replicas', Array(Int32)))), ('configs', Array( ('config_key', String('utf-8')), ('config_value', String('utf-8')))))), ('timeout', Int32), ('validate_only', Boolean) )
class OffsetRequest_v0(Struct): API_KEY = API_KEY API_VERSION = 0 SCHEMA = Schema(('replica_id', Int32), ('topics', Array(('topic', String('utf-8')), ('partitions', Array(('partition', Int32), ('time', Int64), ('max_offsets', Int32))))))
class FetchResponse_v0(Response): API_KEY = 1 API_VERSION = 0 SCHEMA = Schema( ('topics', Array(('topics', String('utf-8')), ('partitions', Array(('partition', Int32), ('error_code', Int16), ('highwater_offset', Int64), ('message_set', Bytes))))))
class DeleteRecordsResponse_v0(Response): API_KEY = 21 API_VERSION = 0 SCHEMA = Schema( ('topics', Array(('name', String('utf-8')), ('partitions', Array(('partition_index', Int32), ('low_watermark', Int64), ('error_code', Int16))))), ('throttle_time_ms', Int32))
class GroupCoordinatorResponse_v0(Response): API_KEY = 10 API_VERSION = 0 SCHEMA = Schema( ("error_code", Int16), ("coordinator_id", Int32), ("host", String("utf-8")), ("port", Int32), )
class OffsetResponse_v2(Response): API_KEY = 2 API_VERSION = 2 SCHEMA = Schema(('throttle_time_ms', Int32), ('topics', Array(('topic', String('utf-8')), ('partitions', Array(('partition', Int32), ('error_code', Int16), ('timestamp', Int64), ('offset', Int64))))))
class OffsetFetchResponse_v0(Response): API_KEY = 9 API_VERSION = 0 SCHEMA = Schema(( "topics", Array( ("topic", String("utf-8")), ( "partitions", Array( ("partition", Int32), ("offset", Int64), ("metadata", String("utf-8")), ("error_code", Int16), ), ), ), ))
class JoinGroupRequest_v5(Request): API_KEY = 11 API_VERSION = 5 RESPONSE_TYPE = JoinGroupResponse_v5 SCHEMA = Schema( ("group", String("utf-8")), ("session_timeout", Int32), ("rebalance_timeout", Int32), ("member_id", String("utf-8")), ("group_instance_id", String("utf-8")), ("protocol_type", String("utf-8")), ( "group_protocols", Array(("protocol_name", String("utf-8")), ("protocol_metadata", Bytes)), ), ) UNKNOWN_MEMBER_ID = ""
def test_decode_fetch_response_partial(): encoded = b''.join([ Int32.encode(1), # Num Topics (Array) String('utf-8').encode('foobar'), Int32.encode(2), # Num Partitions (Array) Int32.encode(0), # Partition id Int16.encode(0), # Error Code Int64.encode(1234), # Highwater offset Int32.encode(52), # MessageSet size Int64.encode(0), # Msg Offset Int32.encode(18), # Msg Size struct.pack('>i', 1474775406), # CRC struct.pack('>bb', 0, 0), # Magic, flags struct.pack('>i', 2), # Length of key b'k1', # Key struct.pack('>i', 2), # Length of value b'v1', # Value Int64.encode(1), # Msg Offset struct.pack('>i', 24), # Msg Size (larger than remaining MsgSet size) struct.pack('>i', -16383415), # CRC struct.pack('>bb', 0, 0), # Magic, flags struct.pack('>i', 2), # Length of key b'k2', # Key struct.pack('>i', 8), # Length of value b'ar', # Value (truncated) Int32.encode(1), Int16.encode(0), Int64.encode(2345), Int32.encode(52), # MessageSet size Int64.encode(0), # Msg Offset Int32.encode(18), # Msg Size struct.pack('>i', 1474775406), # CRC struct.pack('>bb', 0, 0), # Magic, flags struct.pack('>i', 2), # Length of key b'k1', # Key struct.pack('>i', 2), # Length of value b'v1', # Value Int64.encode(1), # Msg Offset struct.pack('>i', 24), # Msg Size (larger than remaining MsgSet size) struct.pack('>i', -16383415), # CRC struct.pack('>bb', 0, 0), # Magic, flags struct.pack('>i', 2), # Length of key b'k2', # Key struct.pack('>i', 8), # Length of value b'ar', # Value (truncated) ]) resp = FetchResponse[0].decode(io.BytesIO(encoded)) assert len(resp.topics) == 1 topic, partitions = resp.topics[0] assert topic == 'foobar' assert len(partitions) == 2 m1 = partitions[0][3] assert len(m1) == 2 assert m1[1] == (None, None, PartialMessage())
class MetadataResponse_v0(Response): API_KEY = 3 API_VERSION = 0 SCHEMA = Schema( ('brokers', Array( ('node_id', Int32), ('host', String('utf-8')), ('port', Int32))), ('topics', Array( ('error_code', Int16), ('topic', String('utf-8')), ('partitions', Array( ('error_code', Int16), ('partition', Int32), ('leader', Int32), ('replicas', Array(Int32)), ('isr', Array(Int32)))))) )
class ProduceResponse_v1(Response): API_KEY = 0 API_VERSION = 1 SCHEMA = Schema(('topics', Array(('topic', String('utf-8')), ('partitions', Array(('partition', Int32), ('error_code', Int16), ('offset', Int64))))), ('throttle_time_ms', Int32))
class DeleteTopicsResponse_v1(Response): API_KEY = 20 API_VERSION = 1 SCHEMA = Schema( ('throttle_time_ms', Int32), ('topic_error_codes', Array( ('topic', String('utf-8')), ('error_code', Int16))) )
class DeleteGroupsResponse_v0(Response): API_KEY = 42 API_VERSION = 0 SCHEMA = Schema( ("throttle_time_ms", Int32), ("results", Array( ("group_id", String("utf-8")), ("error_code", Int16))) )
class SaslAuthenticateResponse_v1(Response): API_KEY = 36 API_VERSION = 1 SCHEMA = Schema( ('error_code', Int16), ('error_message', String('utf-8')), ('sasl_auth_bytes', Bytes), ('session_lifetime_ms', Int64) )
class SaslAuthenticateResponse_v1(Response): API_KEY = 36 API_VERSION = 1 SCHEMA = Schema( ("error_code", Int16), ("error_message", String("utf-8")), ("sasl_auth_bytes", Bytes), ("session_lifetime_ms", Int64), )
class DeleteAclsRequest_v1(Request): API_KEY = 31 API_VERSION = 1 RESPONSE_TYPE = DeleteAclsResponse_v1 SCHEMA = Schema( ( "filters", Array( ("resource_type", Int8), ("resource_name", String("utf-8")), ("resource_pattern_type_filter", Int8), ("principal", String("utf-8")), ("host", String("utf-8")), ("operation", Int8), ("permission_type", Int8), ), ) )
class CreatePartitionsRequest_v0(Request): API_KEY = 37 API_VERSION = 0 RESPONSE_TYPE = CreatePartitionsResponse_v0 SCHEMA = Schema(('topic_partitions', Array(('topic', String('utf-8')), ('new_partitions', Schema(('count', Int32), ('assignment', Array(Int32)))))), ('timeout', Int32), ('validate_only', Boolean))
class OffsetCommitResponse_v0(Response): API_KEY = 8 API_VERSION = 0 SCHEMA = Schema(( "topics", Array( ("topic", String("utf-8")), ("partitions", Array(("partition", Int32), ("error_code", Int16))), ), ))
class StickyAssignorUserDataV1(Struct): """ Used for preserving consumer's previously assigned partitions list and sending it as user data to the leader during a rebalance """ SCHEMA = Schema(("previous_assignment", Array(("topic", String("utf-8")), ("partitions", Array(Int32)))), ("generation", Int32))
class CreateAclsResponse_v0(Response): API_KEY = 30 API_VERSION = 0 SCHEMA = Schema( ("throttle_time_ms", Int32), ( "creation_responses", Array(("error_code", Int16), ("error_message", String("utf-8"))), ), )
class ControlledShutdownResponse_v1(Struct): API_KEY = API_KEY API_VERSION = 1 SCHEMA = Schema( ('error_code', Int16), ('partitions_remaining', Array( ('topic', String('utf-8')), ('partition', Int32), )) )
class MetadataRequest_v4(Request): API_KEY = 3 API_VERSION = 4 RESPONSE_TYPE = MetadataResponse_v4 SCHEMA = Schema( ('topics', Array(String('utf-8'))), ('allow_auto_topic_creation', Boolean) ) ALL_TOPICS = -1 # Null Array (len -1) for topics returns all topics NO_TOPICS = None # Empty array (len 0) for topics returns no topics
class EndTxnRequest_v0(Request): API_KEY = 26 API_VERSION = 0 RESPONSE_TYPE = EndTxnResponse_v0 SCHEMA = Schema( ('transactional_id', String('utf-8')), ('producer_id', Int64), ('producer_epoch', Int16), ('transaction_result', Boolean) )
class JoinGroupResponse_v5(Response): API_KEY = 11 API_VERSION = 5 SCHEMA = Schema( ("throttle_time_ms", Int32), ("error_code", Int16), ("generation_id", Int32), ("group_protocol", String("utf-8")), ("leader_id", String("utf-8")), ("member_id", String("utf-8")), ( "members", Array( ("member_id", String("utf-8")), ("group_instance_id", String("utf-8")), ("member_metadata", Bytes), ), ), )
class OffsetCommitResponse_v0(Response): API_KEY = 8 API_VERSION = 0 SCHEMA = Schema( ('topics', Array( ('topic', String('utf-8')), ('partitions', Array( ('partition', Int32), ('error_code', Int16))))) )
class DeleteRecordsRequest_v0(Request): API_KEY = 21 API_VERSION = 0 RESPONSE_TYPE = DeleteRecordsResponse_v0 SCHEMA = Schema( ('topics', Array( ('name', String('utf-8')), ('partitions', Array(('partition_index', Int32), ('offset', Int64))))), ('timeout_ms', Int32))