All checks were successful
continuous-integration/drone/push Build is passing
135 lines
3.5 KiB
Python
135 lines
3.5 KiB
Python
from __future__ import absolute_import
|
|
|
|
from io import BytesIO
|
|
|
|
from kafka.protocol.api import Request, Response
|
|
from kafka.protocol.types import Array, CompactArray, CompactString, Int16, Int32, Schema, TaggedFields
|
|
|
|
|
|
class BaseApiVersionsResponse(Response):
|
|
API_KEY = 18
|
|
API_VERSION = 0
|
|
SCHEMA = Schema(
|
|
('error_code', Int16),
|
|
('api_versions', Array(
|
|
('api_key', Int16),
|
|
('min_version', Int16),
|
|
('max_version', Int16)))
|
|
)
|
|
|
|
@classmethod
|
|
def decode(cls, data):
|
|
if isinstance(data, bytes):
|
|
data = BytesIO(data)
|
|
# Check error_code, decode as v0 if any error
|
|
curr = data.tell()
|
|
err = Int16.decode(data)
|
|
data.seek(curr)
|
|
if err != 0:
|
|
return ApiVersionsResponse_v0.decode(data)
|
|
return super(BaseApiVersionsResponse, cls).decode(data)
|
|
|
|
|
|
class ApiVersionsResponse_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)))
|
|
)
|
|
|
|
|
|
class ApiVersionsResponse_v1(BaseApiVersionsResponse):
|
|
API_KEY = 18
|
|
API_VERSION = 1
|
|
SCHEMA = Schema(
|
|
('error_code', Int16),
|
|
('api_versions', Array(
|
|
('api_key', Int16),
|
|
('min_version', Int16),
|
|
('max_version', Int16))),
|
|
('throttle_time_ms', Int32)
|
|
)
|
|
|
|
|
|
class ApiVersionsResponse_v2(BaseApiVersionsResponse):
|
|
API_KEY = 18
|
|
API_VERSION = 2
|
|
SCHEMA = ApiVersionsResponse_v1.SCHEMA
|
|
|
|
|
|
class ApiVersionsResponse_v3(BaseApiVersionsResponse):
|
|
API_KEY = 18
|
|
API_VERSION = 3
|
|
SCHEMA = Schema(
|
|
('error_code', Int16),
|
|
('api_versions', CompactArray(
|
|
('api_key', Int16),
|
|
('min_version', Int16),
|
|
('max_version', Int16),
|
|
('_tagged_fields', TaggedFields))),
|
|
('throttle_time_ms', Int32),
|
|
('_tagged_fields', TaggedFields)
|
|
)
|
|
# Note: ApiVersions Response does not send FLEXIBLE_VERSION header!
|
|
|
|
|
|
class ApiVersionsResponse_v4(BaseApiVersionsResponse):
|
|
API_KEY = 18
|
|
API_VERSION = 4
|
|
SCHEMA = ApiVersionsResponse_v3.SCHEMA
|
|
|
|
|
|
class ApiVersionsRequest_v0(Request):
|
|
API_KEY = 18
|
|
API_VERSION = 0
|
|
RESPONSE_TYPE = ApiVersionsResponse_v0
|
|
SCHEMA = Schema()
|
|
|
|
|
|
class ApiVersionsRequest_v1(Request):
|
|
API_KEY = 18
|
|
API_VERSION = 1
|
|
RESPONSE_TYPE = ApiVersionsResponse_v1
|
|
SCHEMA = ApiVersionsRequest_v0.SCHEMA
|
|
|
|
|
|
class ApiVersionsRequest_v2(Request):
|
|
API_KEY = 18
|
|
API_VERSION = 2
|
|
RESPONSE_TYPE = ApiVersionsResponse_v2
|
|
SCHEMA = ApiVersionsRequest_v1.SCHEMA
|
|
|
|
|
|
class ApiVersionsRequest_v3(Request):
|
|
API_KEY = 18
|
|
API_VERSION = 3
|
|
RESPONSE_TYPE = ApiVersionsResponse_v3
|
|
SCHEMA = Schema(
|
|
('client_software_name', CompactString('utf-8')),
|
|
('client_software_version', CompactString('utf-8')),
|
|
('_tagged_fields', TaggedFields)
|
|
)
|
|
FLEXIBLE_VERSION = True
|
|
|
|
|
|
class ApiVersionsRequest_v4(Request):
|
|
API_KEY = 18
|
|
API_VERSION = 4
|
|
RESPONSE_TYPE = ApiVersionsResponse_v4
|
|
SCHEMA = ApiVersionsRequest_v3.SCHEMA
|
|
FLEXIBLE_VERSION = True
|
|
|
|
|
|
ApiVersionsRequest = [
|
|
ApiVersionsRequest_v0, ApiVersionsRequest_v1, ApiVersionsRequest_v2,
|
|
ApiVersionsRequest_v3, ApiVersionsRequest_v4,
|
|
]
|
|
ApiVersionsResponse = [
|
|
ApiVersionsResponse_v0, ApiVersionsResponse_v1, ApiVersionsResponse_v2,
|
|
ApiVersionsResponse_v3, ApiVersionsResponse_v4,
|
|
]
|