Skip to content

Commit 9ae99af

Browse files
committed
Bytes.encode accepts anything that can self-encode
1 parent 20bb49e commit 9ae99af

3 files changed

Lines changed: 16 additions & 10 deletions

File tree

kafka/coordinator/base.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -540,26 +540,22 @@ def _send_join_group_request(self):
540540

541541
# send a join group request to the coordinator
542542
log.info("(Re-)joining group %s", self.group_id)
543-
member_metadata = [
544-
(protocol, metadata if isinstance(metadata, bytes) else metadata.encode())
545-
for protocol, metadata in self.group_protocols()
546-
]
547543
version = self._client.api_version(JoinGroupRequest, max_version=5)
548544
if version == 0:
549545
request = JoinGroupRequest[version](
550546
self.group_id,
551547
self.config['session_timeout_ms'],
552548
self._generation.member_id,
553549
self.protocol_type(),
554-
member_metadata)
550+
self.group_protocols())
555551
elif version <= 4:
556552
request = JoinGroupRequest[version](
557553
self.group_id,
558554
self.config['session_timeout_ms'],
559555
self.config['max_poll_interval_ms'],
560556
self._generation.member_id,
561557
self.protocol_type(),
562-
member_metadata)
558+
self.group_protocols())
563559
else:
564560
request = JoinGroupRequest[version](
565561
self.group_id,
@@ -568,7 +564,7 @@ def _send_join_group_request(self):
568564
self._generation.member_id,
569565
self.group_instance_id,
570566
self.protocol_type(),
571-
member_metadata)
567+
self.group_protocols())
572568

573569
# create the request for the coordinator
574570
log.debug("Sending JoinGroup (%s) to coordinator %s", request, self.coordinator_id)

kafka/protocol/types.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,9 @@ class Bytes(AbstractType):
141141
def encode(cls, value):
142142
if value is None:
143143
return Int32.encode(-1)
144-
else:
145-
return Int32.encode(len(value)) + value
144+
elif not isinstance(value, bytes):
145+
value = value.encode()
146+
return Int32.encode(len(value)) + value
146147

147148
@classmethod
148149
def decode(cls, data):

test/protocol/test_schema.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import pytest
44

55
from kafka.protocol.struct import Struct
6-
from kafka.protocol.types import Schema, Int32, String, TaggedFields
6+
from kafka.protocol.types import Schema, Int32, String, TaggedFields, Bytes
77

88

99
def test_schema_type():
@@ -52,3 +52,12 @@ def test_struct(args, kwargs):
5252
data = struct(*args, **kwargs)
5353
assert data.encode() == encoded
5454
assert struct.decode(encoded) == data
55+
56+
57+
def test_bytes_struct():
58+
schema = Schema(('f1', Int32), ('f2', String()))
59+
struct = type('TestStruct', (Struct,), {'SCHEMA': schema})
60+
data = struct(f1=123, f2="bar")
61+
bytes_encoded = Bytes.encode(data)
62+
assert bytes_encoded[4:] == data.encode()
63+
assert bytes_encoded[:4] == Int32.encode(len(data.encode()))

0 commit comments

Comments
 (0)