Пример #1
0
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))),
    )
Пример #2
0
class SaslAuthenticateRequest_v0(Request):
    API_KEY = 36
    API_VERSION = 0
    RESPONSE_TYPE = SaslAuthenticateResponse_v0
    SCHEMA = Schema(
        ('sasl_auth_bytes', Bytes)
    )
Пример #3
0
class Struct(AbstractType):
    SCHEMA = Schema()

    def __init__(self, *args, **kwargs):
        if len(args) == len(self.SCHEMA.fields):
            for i, name in enumerate(self.SCHEMA.names):
                self.__dict__[name] = args[i]
        elif len(args) > 0:
            raise ValueError("Args must be empty or mirror schema")
        else:
            for name in self.SCHEMA.names:
                self.__dict__[name] = kwargs.pop(name, None)
            if kwargs:
                raise ValueError(
                    "Keyword(s) not in schema %s: %s" %
                    (list(self.SCHEMA.names), ", ".join(kwargs.keys())))

        # overloading encode() to support both class and instance
        # Without WeakMethod() this creates circular ref, which
        # causes instances to "leak" to garbage
        self.encode = WeakMethod(self._encode_self)

    @classmethod
    def encode(cls, item):  # pylint: disable=E0202
        bits = []
        for i, field in enumerate(cls.SCHEMA.fields):
            bits.append(field.encode(item[i]))
        return b"".join(bits)

    def _encode_self(self):
        return self.SCHEMA.encode(
            [self.__dict__[name] for name in self.SCHEMA.names])

    @classmethod
    def decode(cls, data):
        if isinstance(data, bytes):
            data = BytesIO(data)
        return cls(*[field.decode(data) for field in cls.SCHEMA.fields])

    def get_item(self, name):
        if name not in self.SCHEMA.names:
            raise KeyError("%s is not in the schema" % name)
        return self.__dict__[name]

    def __repr__(self):
        key_vals = []
        for name, field in zip(self.SCHEMA.names, self.SCHEMA.fields):
            key_vals.append("%s=%s" % (name, field.repr(self.__dict__[name])))
        return self.__class__.__name__ + "(" + ", ".join(key_vals) + ")"

    def __hash__(self):
        return hash(self.encode())

    def __eq__(self, other):
        if self.SCHEMA != other.SCHEMA:
            return False
        for attr in self.SCHEMA.names:
            if self.__dict__[attr] != other.__dict__[attr]:
                return False
        return True
class OffsetCommitRequest_v2(Request):
    API_KEY = 8
    API_VERSION = 2  # added retention_time, dropped timestamp
    RESPONSE_TYPE = OffsetCommitResponse_v2
    SCHEMA = Schema(
        ("consumer_group", String("utf-8")),
        ("consumer_group_generation_id", Int32),
        ("consumer_id", String("utf-8")),
        ("retention_time", Int64),
        (
            "topics",
            Array(
                ("topic", String("utf-8")),
                (
                    "partitions",
                    Array(
                        ("partition", Int32),
                        ("offset", Int64),
                        ("metadata", String("utf-8")),
                    ),
                ),
            ),
        ),
    )
    DEFAULT_GENERATION_ID = -1
    DEFAULT_RETENTION_TIME = -1
Пример #5
0
class FetchRequest_v11(Request):
    """
    added rack ID to support read from followers (KIP-392)
    """
    API_KEY = 1
    API_VERSION = 11
    RESPONSE_TYPE = FetchResponse_v11
    SCHEMA = Schema(
        ('replica_id', Int32),
        ('max_wait_time', Int32),
        ('min_bytes', Int32),
        ('max_bytes', Int32),
        ('isolation_level', Int8),
        ('session_id', Int32),
        ('session_epoch', Int32),
        ('topics',
         Array(('topic', String('utf-8')),
               ('partitions',
                Array(('partition', Int32), ('current_leader_epoch', Int32),
                      ('fetch_offset', Int64), ('log_start_offset', Int64),
                      ('max_bytes', Int32))))),
        ('forgotten_topics_data',
         Array(('topic', String), ('partitions', Array(Int32)))),
        ('rack_id', String('utf-8')),
    )
Пример #6
0
class CreatePartitionsResponse_v0(Response):
    API_KEY = 37
    API_VERSION = 0
    SCHEMA = Schema(('throttle_time_ms', Int32),
                    ('topic_errors',
                     Array(('topic', String('utf-8')), ('error_code', Int16),
                           ('error_message', String('utf-8')))))
Пример #7
0
class ApiVersionResponse_v0(Response):
    API_KEY = 18
    API_VERSION = 0
    SCHEMA = Schema(('error_code', Int16),
                    ('api_versions',
                     Array(('api_key', Int16), ('min_version', Int16),
                           ('max_version', Int16))))
Пример #8
0
class DeleteAclsResponse_v1(Response):
    API_KEY = 31
    API_VERSION = 1
    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")),
                        ("resource_pattern_type", Int8),
                        ("principal", String("utf-8")),
                        ("host", String("utf-8")),
                        ("operation", Int8),
                        ("permission_type", Int8),
                    ),
                ),
            ),
        ),
    )
Пример #9
0
class DescribeConfigsResponse_v2(Response):
    API_KEY = 32
    API_VERSION = 2
    SCHEMA = Schema(
        ("throttle_time_ms", Int32),
        (
            "resources",
            Array(
                ("error_code", Int16),
                ("error_message", String("utf-8")),
                ("resource_type", Int8),
                ("resource_name", String("utf-8")),
                (
                    "config_entries",
                    Array(
                        ("config_names", String("utf-8")),
                        ("config_value", String("utf-8")),
                        ("read_only", Boolean),
                        ("config_source", Int8),
                        ("is_sensitive", Boolean),
                        (
                            "config_synonyms",
                            Array(
                                ("config_name", String("utf-8")),
                                ("config_value", String("utf-8")),
                                ("config_source", Int8),
                            ),
                        ),
                    ),
                ),
            ),
        ),
    )
Пример #10
0
class DescribeGroupsResponse_v3(Response):
    API_KEY = 15
    API_VERSION = 3
    SCHEMA = Schema(
        ("throttle_time_ms", Int32),
        (
            "groups",
            Array(
                ("error_code", Int16),
                ("group", String("utf-8")),
                ("state", String("utf-8")),
                ("protocol_type", String("utf-8")),
                ("protocol", String("utf-8")),
                (
                    "members",
                    Array(
                        ("member_id", String("utf-8")),
                        ("client_id", String("utf-8")),
                        ("client_host", String("utf-8")),
                        ("member_metadata", Bytes),
                        ("member_assignment", Bytes),
                    ),
                ),
            ),
            ("authorized_operations", Int32),
        ),
    )
Пример #11
0
class DescribeGroupsRequest_v3(Request):
    API_KEY = 15
    API_VERSION = 3
    RESPONSE_TYPE = DescribeGroupsResponse_v2
    SCHEMA = Schema(
        ("groups", Array(String("utf-8"))), ("include_authorized_operations", Boolean)
    )
Пример #12
0
class DescribeGroupsResponse_v0(Response):
    API_KEY = 15
    API_VERSION = 0
    SCHEMA = Schema(
        (
            "groups",
            Array(
                ("error_code", Int16),
                ("group", String("utf-8")),
                ("state", String("utf-8")),
                ("protocol_type", String("utf-8")),
                ("protocol", String("utf-8")),
                (
                    "members",
                    Array(
                        ("member_id", String("utf-8")),
                        ("client_id", String("utf-8")),
                        ("client_host", String("utf-8")),
                        ("member_metadata", Bytes),
                        ("member_assignment", Bytes),
                    ),
                ),
            ),
        )
    )
Пример #13
0
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))),
    )
Пример #14
0
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),
    )
Пример #15
0
class ListGroupsResponse_v1(Response):
    API_KEY = 16
    API_VERSION = 1
    SCHEMA = Schema(('throttle_time_ms', Int32), ('error_code', Int16),
                    ('groups',
                     Array(('group', String('utf-8')),
                           ('protocol_type', String('utf-8')))))
Пример #16
0
class DeleteGroupsRequest_v0(Request):
    API_KEY = 42
    API_VERSION = 0
    RESPONSE_TYPE = DeleteGroupsResponse_v0
    SCHEMA = Schema(
        ("groups_names", Array(String("utf-8")))
    )
Пример #17
0
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')))))
Пример #18
0
class DescribeGroupsRequest_v0(Request):
    API_KEY = 15
    API_VERSION = 0
    RESPONSE_TYPE = DescribeGroupsResponse_v0
    SCHEMA = Schema(
        ('groups', Array(String('utf-8')))
    )
Пример #19
0
class CreateTopicsResponse_v2(Response):
    API_KEY = 19
    API_VERSION = 2
    SCHEMA = Schema(('throttle_time_ms', Int32),
                    ('topic_errors',
                     Array(('topic', String('utf-8')), ('error_code', Int16),
                           ('error_message', String('utf-8')))))
Пример #20
0
class SaslHandShakeResponse_v0(Response):
    API_KEY = 17
    API_VERSION = 0
    SCHEMA = Schema(
        ('error_code', Int16),
        ('enabled_mechanisms', Array(String('utf-8')))
    )
Пример #21
0
class OffsetFetchRequest_v0(Struct):
    API_KEY = API_KEY
    API_VERSION = 0
    SCHEMA = Schema(('group_id', String('utf-8')),
                    ('topics',
                     Array(('topic', String('utf-8')),
                           ('partitions', Array(Int32)))))
Пример #22
0
class SaslHandShakeRequest_v0(Request):
    API_KEY = 17
    API_VERSION = 0
    RESPONSE_TYPE = SaslHandShakeResponse_v0
    SCHEMA = Schema(
        ('mechanism', String('utf-8'))
    )
Пример #23
0
class FetchRequest_v9(Request):
    """
    adds the current leader epoch (see KIP-320)
    """
    API_KEY = 1
    API_VERSION = 9
    RESPONSE_TYPE = FetchResponse_v9
    SCHEMA = Schema(
        ('replica_id', Int32),
        ('max_wait_time', Int32),
        ('min_bytes', Int32),
        ('max_bytes', Int32),
        ('isolation_level', Int8),
        ('session_id', Int32),
        ('session_epoch', Int32),
        ('topics',
         Array(('topic', String('utf-8')),
               ('partitions',
                Array(('partition', Int32), ('current_leader_epoch', Int32),
                      ('fetch_offset', Int64), ('log_start_offset', Int64),
                      ('max_bytes', Int32))))),
        ('forgotten_topics_data',
         Array(
             ('topic', String),
             ('partitions', Array(Int32)),
         )),
    )
Пример #24
0
class ListGroupsResponse_v0(Response):
    API_KEY = 16
    API_VERSION = 0
    SCHEMA = Schema(('error_code', Int16),
                    ('groups',
                     Array(('group', String('utf-8')),
                           ('protocol_type', String('utf-8')))))
Пример #25
0
class UpdateMetadataRequest_v2(Struct):
    API_KEY = API_KEY
    API_VERSION = 2
    SCHEMA = Schema(('controller_id', Int32), ('controller_epoch', Int32),
                    ('partition_states',
                     Array(
                         ('topic', String('utf-8')),
                         ('partition', Int32),
                         ('controller_epoch', Int32),
                         ('leader', Int32),
                         ('leader_epoch', Int32),
                         ('isrs', Array(Int32)),
                         ('zk_version', Int32),
                         ('replicas', Array(Int32)),
                     )), ('live_leaders',
                          Array(
                              ('id', Int32),
                              ('end_points',
                               Array(
                                   ('port', Int32),
                                   ('host', String('utf-8')),
                                   ('security_protocol_type', Int16),
                               )),
                              ('rack', String('utf-8')),
                          )))
Пример #26
0
class GroupCoordinatorRequest_v1(Request):
    API_KEY = 10
    API_VERSION = 1
    RESPONSE_TYPE = GroupCoordinatorResponse_v1
    SCHEMA = Schema(
        ('coordinator_key', String('utf-8')),
        ('coordinator_type', Int8)
    )
Пример #27
0
class DescribeConfigsRequest_v0(Request):
    API_KEY = 32
    API_VERSION = 0
    RESPONSE_TYPE = DescribeConfigsResponse_v0
    SCHEMA = Schema(
        ('resources',
         Array(('resource_type', Int8), ('resource_name', String('utf-8')),
               ('config_names', Array(String('utf-8'))))))
Пример #28
0
class RequestHeader(Struct):
    SCHEMA = Schema(('api_key', Int16), ('api_version', Int16),
                    ('correlation_id', Int32), ('client_id', String('utf-8')))

    def __init__(self, request, correlation_id=0, client_id='kafka-python'):
        super(RequestHeader,
              self).__init__(request.API_KEY, request.API_VERSION,
                             correlation_id, client_id)
Пример #29
0
class AlterConfigsResponse_v0(Response):
    API_KEY = 33
    API_VERSION = 0
    SCHEMA = Schema(
        ('throttle_time_ms', Int32),
        ('resources',
         Array(('error_code', Int16), ('error_message', String('utf-8')),
               ('resource_type', Int8), ('resource_name', String('utf-8')))))
Пример #30
0
 class TestClass(superclass):
     API_KEY = 0
     API_VERSION = 0
     RESPONSE_TYPE = None  # To satisfy the Request ABC
     SCHEMA = Schema(('myarray',
                      Array(('subobject', Int16),
                            ('othersubobject', String('utf-8')))),
                     ('notarray', Int16))