Skip to content

Commit 4d2e912

Browse files
committed
kafka.util 32 bit field helpers for authorized operations
1 parent bbcf61f commit 4d2e912

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

kafka/util.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,3 +138,21 @@ def wrapper(self, *args, **kwargs):
138138
return func(self, *args, **kwargs)
139139
functools.update_wrapper(wrapper, func)
140140
return wrapper
141+
142+
143+
def to_32_bit_field(vals):
144+
value = 0
145+
for b in vals:
146+
assert 0 <= b < 32
147+
value |= 1 << b
148+
return value
149+
150+
def from_32_bit_field(value):
151+
result = set()
152+
count = 0
153+
while value != 0:
154+
if (value & 1) != 0:
155+
result.add(count)
156+
count += 1
157+
value = (value & 0xFFFFFFFF) >> 1
158+
return result

test/test_util.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import pytest
55

6-
from kafka.util import ensure_valid_topic_name
6+
from kafka.util import ensure_valid_topic_name, from_32_bit_field, to_32_bit_field
77

88
@pytest.mark.parametrize(('topic_name', 'expectation'), [
99
(0, pytest.raises(TypeError)),
@@ -22,3 +22,11 @@
2222
def test_topic_name_validation(topic_name, expectation):
2323
with expectation:
2424
ensure_valid_topic_name(topic_name)
25+
26+
27+
@pytest.mark.parametrize(('test_set',), [
28+
(set([0, 1, 5, 10, 31]),),
29+
(set(range(32)),),
30+
])
31+
def test_32_bit_field(test_set):
32+
assert from_32_bit_field(to_32_bit_field(test_set)) == test_set

0 commit comments

Comments
 (0)