kafka-python 2.2.19__py2.py3-none-any.whl → 2.2.20__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
kafka/admin/client.py CHANGED
@@ -87,6 +87,9 @@ class KafkaAdminClient(object):
87
87
  max_in_flight_requests_per_connection (int): Requests are pipelined
88
88
  to kafka brokers up to this number of maximum requests per
89
89
  broker connection. Default: 5.
90
+ receive_message_max_bytes (int): Maximum allowed network frame size.
91
+ Used to avoid OOM when decoding malformed network message header.
92
+ Default: 1000000.
90
93
  receive_buffer_bytes (int): The size of the TCP receive buffer
91
94
  (SO_RCVBUF) to use when reading data. Default: None (relies on
92
95
  system defaults). Java client defaults to 32768.
@@ -163,11 +166,10 @@ class KafkaAdminClient(object):
163
166
  'reconnect_backoff_ms': 50,
164
167
  'reconnect_backoff_max_ms': 30000,
165
168
  'max_in_flight_requests_per_connection': 5,
169
+ 'receive_message_max_bytes': 1000000,
166
170
  'receive_buffer_bytes': None,
167
171
  'send_buffer_bytes': None,
168
172
  'socket_options': [(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)],
169
- 'sock_chunk_bytes': 4096, # undocumented experimental option
170
- 'sock_chunk_buffer_count': 1000, # undocumented experimental option
171
173
  'retry_backoff_ms': 100,
172
174
  'metadata_max_age_ms': 300000,
173
175
  'security_protocol': 'PLAINTEXT',
kafka/client_async.py CHANGED
@@ -89,6 +89,9 @@ class KafkaClient(object):
89
89
  max_in_flight_requests_per_connection (int): Requests are pipelined
90
90
  to kafka brokers up to this number of maximum requests per
91
91
  broker connection. Default: 5.
92
+ receive_message_max_bytes (int): Maximum allowed network frame size.
93
+ Used to avoid OOM when decoding malformed network message header.
94
+ Default: 1000000.
92
95
  receive_buffer_bytes (int): The size of the TCP receive buffer
93
96
  (SO_RCVBUF) to use when reading data. Default: None (relies on
94
97
  system defaults). Java client defaults to 32768.
@@ -186,6 +189,7 @@ class KafkaClient(object):
186
189
  'reconnect_backoff_ms': 50,
187
190
  'reconnect_backoff_max_ms': 30000,
188
191
  'max_in_flight_requests_per_connection': 5,
192
+ 'receive_message_max_bytes': 1000000,
189
193
  'receive_buffer_bytes': None,
190
194
  'send_buffer_bytes': None,
191
195
  'socket_options': [(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)],
kafka/conn.py CHANGED
@@ -122,6 +122,9 @@ class BrokerConnection(object):
122
122
  max_in_flight_requests_per_connection (int): Requests are pipelined
123
123
  to kafka brokers up to this number of maximum requests per
124
124
  broker connection. Default: 5.
125
+ receive_message_max_bytes (int): Maximum allowed network frame size.
126
+ Used to avoid OOM when decoding malformed network message header.
127
+ Default: 1000000.
125
128
  receive_buffer_bytes (int): The size of the TCP receive buffer
126
129
  (SO_RCVBUF) to use when reading data. Default: None (relies on
127
130
  system defaults). Java client defaults to 32768.
@@ -202,6 +205,7 @@ class BrokerConnection(object):
202
205
  'reconnect_backoff_ms': 50,
203
206
  'reconnect_backoff_max_ms': 30000,
204
207
  'max_in_flight_requests_per_connection': 5,
208
+ 'receive_message_max_bytes': 1000000,
205
209
  'receive_buffer_bytes': None,
206
210
  'send_buffer_bytes': None,
207
211
  'socket_options': [(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)],
@@ -292,7 +296,8 @@ class BrokerConnection(object):
292
296
 
293
297
  self._protocol = KafkaProtocol(
294
298
  client_id=self.config['client_id'],
295
- api_version=self.config['api_version'])
299
+ api_version=self.config['api_version'],
300
+ max_frame_size=self.config['receive_message_max_bytes'])
296
301
  self.state = ConnectionStates.DISCONNECTED
297
302
  self._reset_reconnect_backoff()
298
303
  self._sock = None
@@ -695,9 +700,12 @@ class BrokerConnection(object):
695
700
  'Kafka broker does not support %s sasl mechanism. Enabled mechanisms are: %s'
696
701
  % (self.config['sasl_mechanism'], response.enabled_mechanisms)))
697
702
  else:
698
- self._sasl_authenticate(future)
703
+ try:
704
+ ret = self._sasl_authenticate()
705
+ future.success(ret)
706
+ except Exception as exc:
707
+ future.failure(exc)
699
708
 
700
- assert future.is_done, 'SASL future not complete after mechanism processing!'
701
709
  if future.failed():
702
710
  self.close(error=future.exception)
703
711
  else:
@@ -809,24 +817,24 @@ class BrokerConnection(object):
809
817
  log.debug('%s: Received %d raw sasl auth bytes from server', self, nbytes)
810
818
  return data[4:]
811
819
 
812
- def _sasl_authenticate(self, future):
820
+ def _sasl_authenticate(self):
813
821
  while not self._sasl_mechanism.is_done():
814
822
  send_token = self._sasl_mechanism.auth_bytes()
815
823
  self._send_sasl_authenticate(send_token)
816
824
  if not self._can_send_recv():
817
- return future.failure(Errors.KafkaConnectionError("%s: Connection failure during Sasl Authenticate" % self))
825
+ raise Errors.KafkaConnectionError("%s: Connection failure during Sasl Authenticate" % self)
818
826
 
819
827
  recv_token = self._recv_sasl_authenticate()
820
828
  if recv_token is None:
821
- return future.failure(Errors.KafkaConnectionError("%s: Connection failure during Sasl Authenticate" % self))
829
+ raise Errors.KafkaConnectionError("%s: Connection failure during Sasl Authenticate" % self)
822
830
  else:
823
831
  self._sasl_mechanism.receive(recv_token)
824
832
 
825
833
  if self._sasl_mechanism.is_authenticated():
826
834
  log.info('%s: %s', self, self._sasl_mechanism.auth_details())
827
- return future.success(True)
835
+ return True
828
836
  else:
829
- return future.failure(Errors.SaslAuthenticationFailedError('Failed to authenticate via SASL %s' % self.config['sasl_mechanism']))
837
+ raise Errors.SaslAuthenticationFailedError('Failed to authenticate via SASL %s' % self.config['sasl_mechanism'])
830
838
 
831
839
  def blacked_out(self):
832
840
  """
kafka/consumer/group.py CHANGED
@@ -163,6 +163,9 @@ class KafkaConsumer(six.Iterator):
163
163
  should be set no higher than 1/3 of that value. It can be
164
164
  adjusted even lower to control the expected time for normal
165
165
  rebalances. Default: 3000
166
+ receive_message_max_bytes (int): Maximum allowed network frame size.
167
+ Used to avoid OOM when decoding malformed network message header.
168
+ Default: 1000000.
166
169
  receive_buffer_bytes (int): The size of the TCP receive buffer
167
170
  (SO_RCVBUF) to use when reading data. Default: None (relies on
168
171
  system defaults). The java client defaults to 32768.
@@ -303,9 +306,8 @@ class KafkaConsumer(six.Iterator):
303
306
  'heartbeat_interval_ms': 3000,
304
307
  'receive_buffer_bytes': None,
305
308
  'send_buffer_bytes': None,
309
+ 'receive_message_max_bytes': 1000000,
306
310
  'socket_options': [(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)],
307
- 'sock_chunk_bytes': 4096, # undocumented experimental option
308
- 'sock_chunk_buffer_count': 1000, # undocumented experimental option
309
311
  'consumer_timeout_ms': float('inf'),
310
312
  'security_protocol': 'PLAINTEXT',
311
313
  'ssl_context': None,
kafka/errors.py CHANGED
@@ -57,6 +57,10 @@ class CorrelationIdError(KafkaProtocolError):
57
57
  retriable = True
58
58
 
59
59
 
60
+ class InvalidReceiveError(KafkaProtocolError):
61
+ pass
62
+
63
+
60
64
  class KafkaTimeoutError(KafkaError):
61
65
  retriable = True
62
66
 
kafka/future.py CHANGED
@@ -37,6 +37,10 @@ class Future(object):
37
37
  self.is_done = True
38
38
  if self._callbacks:
39
39
  self._call_backs('callback', self._callbacks, self.value)
40
+ # Clearing the lists releases any reference cycle held via stored
41
+ # bound methods (e.g. FutureProduceResult<->FutureRecordMetadata).
42
+ self._callbacks = None
43
+ self._errbacks = None
40
44
  return self
41
45
 
42
46
  def failure(self, e):
@@ -48,6 +52,10 @@ class Future(object):
48
52
  self.exception = exception
49
53
  self.is_done = True
50
54
  self._call_backs('errback', self._errbacks, self.exception)
55
+ # Clearing the lists releases any reference cycle held via stored
56
+ # bound methods (e.g. FutureProduceResult<->FutureRecordMetadata).
57
+ self._callbacks = None
58
+ self._errbacks = None
51
59
  return self
52
60
 
53
61
  def add_callback(self, f, *args, **kwargs):
kafka/producer/kafka.py CHANGED
@@ -261,6 +261,9 @@ class KafkaProducer(object):
261
261
  errors. Default: 100.
262
262
  request_timeout_ms (int): Client request timeout in milliseconds.
263
263
  Default: 30000.
264
+ receive_message_max_bytes (int): Maximum allowed network frame size.
265
+ Used to avoid OOM when decoding malformed network message header.
266
+ Default: 1000000.
264
267
  receive_buffer_bytes (int): The size of the TCP receive buffer
265
268
  (SO_RCVBUF) to use when reading data. Default: None (relies on
266
269
  system defaults). Java client defaults to 32768.
@@ -392,11 +395,10 @@ class KafkaProducer(object):
392
395
  'metadata_max_age_ms': 300000,
393
396
  'retry_backoff_ms': 100,
394
397
  'request_timeout_ms': 30000,
398
+ 'receive_message_max_bytes': 1000000,
395
399
  'receive_buffer_bytes': None,
396
400
  'send_buffer_bytes': None,
397
401
  'socket_options': [(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)],
398
- 'sock_chunk_bytes': 4096, # undocumented experimental option
399
- 'sock_chunk_buffer_count': 1000, # undocumented experimental option
400
402
  'reconnect_backoff_ms': 50,
401
403
  'reconnect_backoff_max_ms': 30000,
402
404
  'max_in_flight_requests_per_connection': 5,
kafka/protocol/parser.py CHANGED
@@ -23,12 +23,15 @@ class KafkaProtocol(object):
23
23
  api_version (tuple): Optional tuple to specify api_version to use.
24
24
  Currently only used to check for 0.8.2 protocol quirks, but
25
25
  may be used for more in the future.
26
+ max_frame_size (int): Maximum allowed message frame size.
27
+ Default: 100000000 (100MB).
26
28
  """
27
- def __init__(self, client_id=None, api_version=None):
29
+ def __init__(self, client_id=None, api_version=None, max_frame_size=100000000):
28
30
  if client_id is None:
29
31
  client_id = self._gen_client_id()
30
32
  self._client_id = client_id
31
33
  self._api_version = api_version
34
+ self._max_frame_size = max_frame_size
32
35
  self._correlation_id = 0
33
36
  self._header = KafkaBytes(4)
34
37
  self._rbuffer = None
@@ -105,6 +108,7 @@ class KafkaProtocol(object):
105
108
  if self._header.tell() == 4:
106
109
  self._header.seek(0)
107
110
  nbytes = Int32.decode(self._header)
111
+ self._validate_frame_size(nbytes)
108
112
  # reset buffer and switch state to receiving payload bytes
109
113
  self._rbuffer = KafkaBytes(nbytes)
110
114
  self._receiving = True
@@ -132,6 +136,10 @@ class KafkaProtocol(object):
132
136
  self._reset_buffer()
133
137
  return responses
134
138
 
139
+ def _validate_frame_size(self, nbytes):
140
+ if nbytes < 0 or nbytes > self._max_frame_size:
141
+ raise Errors.InvalidReceiveError('Invalid frame length: %d' % nbytes)
142
+
135
143
  def _process_response(self, read_buffer):
136
144
  if not self.in_flight_requests:
137
145
  raise Errors.CorrelationIdError('No in-flight-request found for server response')
kafka/sasl/scram.py CHANGED
@@ -106,7 +106,12 @@ class ScramClient:
106
106
  self.auth_message += b',c=biws,r=' + self.nonce
107
107
 
108
108
  salt = base64.b64decode(params['s'].encode('utf-8'))
109
- iterations = int(params['i'])
109
+ try:
110
+ iterations = int(params['i'])
111
+ if iterations > 1000000:
112
+ raise ValueError('too many iterations')
113
+ except (TypeError, ValueError):
114
+ raise ValueError('Invalid value (not integer or too large) for Iteration count in server-first-message')
110
115
  self.create_salted_password(salt, iterations)
111
116
 
112
117
  self.client_key = self.hmac(self.salted_password, b'Client Key')
kafka/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = '2.2.19'
1
+ __version__ = '2.2.20'
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.1
2
2
  Name: kafka-python
3
- Version: 2.2.19
3
+ Version: 2.2.20
4
4
  Summary: Pure Python client for Apache Kafka
5
5
  Author-email: Dana Powers <dana.powers@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/dpkp/kafka-python
@@ -26,21 +26,21 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
26
26
  Classifier: Programming Language :: Python :: Implementation :: PyPy
27
27
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
28
28
  Description-Content-Type: text/x-rst
29
+ Provides-Extra: benchmarks
30
+ Requires-Dist: pyperf ; extra == 'benchmarks'
29
31
  Provides-Extra: crc32c
30
- Requires-Dist: crc32c; extra == "crc32c"
32
+ Requires-Dist: crc32c ; extra == 'crc32c'
31
33
  Provides-Extra: lz4
32
- Requires-Dist: lz4; extra == "lz4"
34
+ Requires-Dist: lz4 ; extra == 'lz4'
33
35
  Provides-Extra: snappy
34
- Requires-Dist: python-snappy; extra == "snappy"
35
- Provides-Extra: zstd
36
- Requires-Dist: zstandard; extra == "zstd"
36
+ Requires-Dist: python-snappy ; extra == 'snappy'
37
37
  Provides-Extra: testing
38
- Requires-Dist: pytest; extra == "testing"
39
- Requires-Dist: mock; python_version < "3.3" and extra == "testing"
40
- Requires-Dist: pytest-mock; extra == "testing"
41
- Requires-Dist: pytest-timeout; extra == "testing"
42
- Provides-Extra: benchmarks
43
- Requires-Dist: pyperf; extra == "benchmarks"
38
+ Requires-Dist: pytest ; extra == 'testing'
39
+ Requires-Dist: pytest-mock ; extra == 'testing'
40
+ Requires-Dist: pytest-timeout ; extra == 'testing'
41
+ Requires-Dist: mock ; (python_version < "3.3") and extra == 'testing'
42
+ Provides-Extra: zstd
43
+ Requires-Dist: zstandard ; extra == 'zstd'
44
44
 
45
45
  Kafka Python client
46
46
  ------------------------
@@ -1,17 +1,17 @@
1
1
  kafka/__init__.py,sha256=4dvHKZAxmD_4tfJ5wGcRV2X78vPcm8vsUoqceULevjA,1077
2
- kafka/client_async.py,sha256=R8q_rRpG3RrYrRmcZo7XgO2oSdpLJATNcq8w-1vIJ_8,56878
2
+ kafka/client_async.py,sha256=rvWDWGDFC5oFWDtkobm5IoAA-8Tfle_foyvVW1465QY,57109
3
3
  kafka/cluster.py,sha256=B4tOZYhZaYrcGsyAtdA8yejFm9ue7ElJxn_pd6Xhdfk,16775
4
4
  kafka/codec.py,sha256=_jglwQ8yn-B85hzf0nvOvazRwGQSBx22Bb8R4sSCvcs,9977
5
- kafka/conn.py,sha256=hDwKQ93zpZAWfACdiInEfcBSD6MpYCxVNoAjFneQW9Q,70406
6
- kafka/errors.py,sha256=qX2Fp0qawU_HBNcZCwB7EDCmx3C2PehrETi6qSEJHmk,33290
7
- kafka/future.py,sha256=ZQStbfUYIPJRrgMfAWxxjrIRVxsw4WCtSR0J0bkyGno,2847
5
+ kafka/conn.py,sha256=QjIvbI-oj2-rW4NYy5w3hxrR2aNPDqlQVdKT5vz_Bxw,70675
6
+ kafka/errors.py,sha256=_ijc6rr0XGTCBfShgbeEayRxhFLO8c1Ho8-Ge9gZLq0,33348
7
+ kafka/future.py,sha256=8GzUbOsLFHywit6Z-F2FjCXyoq0Jfa2K4JImFioQg_I,3267
8
8
  kafka/socks5_wrapper.py,sha256=h0Gag3xAOp8io2MfzeYLOiNvLRmq3rkmpZ6Aj-9uKTw,10716
9
9
  kafka/structs.py,sha256=SJGzmLdV21jZyQ7247k0WFy16UiusgTHK3I-e4qzI-E,3058
10
10
  kafka/util.py,sha256=WGqI5yT1yWGgHqSuRF9Fi8ejpiB53SurMy7ABkYxJ2g,4584
11
- kafka/version.py,sha256=6WkzpprHDoy9mj0_FucCX1HxhMEqxYStYqflNHdfW-4,23
11
+ kafka/version.py,sha256=nwmH8z726M8dBiBJjm4Q1x8QPDqTdz0gDmV_b4Jc7B4,23
12
12
  kafka/admin/__init__.py,sha256=S_XxqyyV480_yXhttK79XZqNAmZyXRjspd3SoqYykE8,720
13
13
  kafka/admin/acl_resource.py,sha256=ak_dUsSni4SyP0ORbSKenZpwTy0Ykxq3FSt_9XgLR8k,8265
14
- kafka/admin/client.py,sha256=94UpHTsgzvhOoB6_1QLeKxvZKlStKfI96xuWyaY9_Sc,78814
14
+ kafka/admin/client.py,sha256=HTd85FqwyXEhh5bBHaxGzsbO5cGhJXgD6--YKgXRL0U,78898
15
15
  kafka/admin/config_resource.py,sha256=_JZWN_Q7jbuTtq2kdfHxWyTt_jI1LI-xnVGsf6oYGyY,1039
16
16
  kafka/admin/new_partitions.py,sha256=rYSb7S6VL706ZauSmiN5J9GDsep0HYRmkkAZUgT2JIg,757
17
17
  kafka/admin/new_topic.py,sha256=fvezLP9JXumqX-nU27Fgo0tj4d85ybcJgKluQImm3-0,1306
@@ -24,7 +24,7 @@ kafka/benchmarks/record_batch_read.py,sha256=vlFaWU2YWI379n_2M8qieb_S2uHUWKV0Nqu
24
24
  kafka/benchmarks/varint_speed.py,sha256=s4CuvKgDZL-_zna5E3vM8RgHjhXuW6pcaO1z1WYZ_0Y,12585
25
25
  kafka/consumer/__init__.py,sha256=NDdvtyuJgFyQZahqL9i5sYXGP6rOMIXWwHQEaZ1fCcs,122
26
26
  kafka/consumer/fetcher.py,sha256=Ft4FsafYH-_u03ktRrxGBQLVfSvMPnKSuo2vVZzRjPg,69204
27
- kafka/consumer/group.py,sha256=rkjqEjWY72is-tRfm2mjAF1m6dACUP83PO_XGbkJu8I,59071
27
+ kafka/consumer/group.py,sha256=OA9dGm7eABvED834Klpke92EpLEOdnz51_c5YL8lbHM,59155
28
28
  kafka/consumer/subscription_state.py,sha256=bK-YTVbOzhy8OB206QAfXVuo7zPA9YqYXnrRRST369c,24289
29
29
  kafka/coordinator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
30
  kafka/coordinator/base.py,sha256=4GdPwC28S5a6e7B20fvzMVcL0YKemS43B4JiogeEd0E,54507
@@ -67,7 +67,7 @@ kafka/partitioner/__init__.py,sha256=Fks3C5_kokVWYw1Ad5wv0sVVzaaBtOejL-2bIL1yRII
67
67
  kafka/partitioner/default.py,sha256=tW-RC1PWIPRDEbeEAaPTLn-00oiZnXoVouEk9AnYE4w,2879
68
68
  kafka/producer/__init__.py,sha256=i3Wxih0NHjmqCkRNE54ial8fBp9siqabUE6ZGyL6oX8,122
69
69
  kafka/producer/future.py,sha256=UC3-g9QlgVFmbitrtMXVpeP0Pbvr7xl2kcw6bAehKG8,2983
70
- kafka/producer/kafka.py,sha256=T0c-QmoagY6HMyomNlvYaYSVfUHe42W72EDiegX6XyY,53573
70
+ kafka/producer/kafka.py,sha256=_ORqiAp5gciGlBIUx5wDOapbem7yyaR4gaP6S6iy4rk,53657
71
71
  kafka/producer/record_accumulator.py,sha256=b6aoqCS_O40N_JBSOPW5ffQBMIdITaANU4U9QQfJC5A,28260
72
72
  kafka/producer/sender.py,sha256=8-TLTw6vQO7AheWSDPI33cQdWMyTDxi1k-pkXuUb9k0,37789
73
73
  kafka/producer/transaction_manager.py,sha256=q3e9Lc9o-ofWvjT9FbHdTQH08XQBeRtoQEcQHGcnp7g,41535
@@ -90,7 +90,7 @@ kafka/protocol/list_offsets.py,sha256=3kvif8X-B2LBSpR3qwbkGYyJ0GLKbQdENDGpxWV0sc
90
90
  kafka/protocol/message.py,sha256=9wNwJvfl9bsrdk_YcxbmAFjgvwZ5R1EBLSif2KILg9s,7657
91
91
  kafka/protocol/metadata.py,sha256=X99gdDTQJZWDrEa0sGWbwVED9cpKZ2zax6s6cMnN4xw,7403
92
92
  kafka/protocol/offset_for_leader_epoch.py,sha256=aunp-LMIuwcCsKwvgBZ8OcUhcgb0blaq5d3PAh22JOo,4304
93
- kafka/protocol/parser.py,sha256=OB3yebOp6JSQpl-5fEpV1_0SdAtYkiqIk6ffDIkHzu0,6859
93
+ kafka/protocol/parser.py,sha256=Jn5xRJbjaD5rntBxlvUCr5UIReGqMWXXteF0sGdY0-Y,7274
94
94
  kafka/protocol/pickle.py,sha256=FGEv-1l1aXY3TogqzCwOS1gCNpEg6-xNLbrysqNdHcs,920
95
95
  kafka/protocol/produce.py,sha256=JDWCRY5B7eSL3vp0N977MIgYMrR2qxgrbUZrqQMlGWk,6540
96
96
  kafka/protocol/sasl_authenticate.py,sha256=HaFAHPRhCKgyGEoJ5LwGffcpMUBNCphgBgXCsITLho8,1150
@@ -111,7 +111,7 @@ kafka/sasl/gssapi.py,sha256=pwLxXqcmJJxkuFQUoEfX5PWgZxr-8TziuRCg9K7fO3E,4705
111
111
  kafka/sasl/msk.py,sha256=FCv0uUTQKjvR2gIGyiv-dlwIvkpvEtaHvhqhXtC2q8w,8101
112
112
  kafka/sasl/oauth.py,sha256=dh87tVi-dlS5lIzgYsC4m7IXUhlLdejaMb9Ua6oYaB0,3425
113
113
  kafka/sasl/plain.py,sha256=PMfoWT856wx6nF_LhpfPKEnD7BRNx5l6rDhAqxBnMWU,1317
114
- kafka/sasl/scram.py,sha256=77If2o9x-QZDBs2fqml17S-wGyR5YkOMr2nZxXrCW9c,5045
114
+ kafka/sasl/scram.py,sha256=Kvve3CP9QGKx4ZOFeg8aBB1683FVTWEI0l0iPthPx0E,5312
115
115
  kafka/sasl/sspi.py,sha256=RUIVyWCEdlJPV1oj7bdzG8gORvFyR_9Bt79TzIohwMM,5001
116
116
  kafka/serializer/__init__.py,sha256=_I4utl_8nNhcRzLLezFtwYX5akk6QKYmxa1HanRlYPU,103
117
117
  kafka/serializer/abstract.py,sha256=doiXDkMYt2SEHRarBdd8xVZKvr5S1qPdNEtl4syWA6Q,486
@@ -120,7 +120,7 @@ kafka/vendor/enum34.py,sha256=-u-lxAiJMt6ru4Do7NUDY9OpeWkYJMksb2xengJawFE,31204
120
120
  kafka/vendor/selectors34.py,sha256=gxejLO4eXf8mRSGXaQiknPig3GdX1rtsZiYOQJVuAy8,20594
121
121
  kafka/vendor/six.py,sha256=lLBa9_HrANP5BMZ7twEzg1M3wofwPmXyptuWmHX0brY,34826
122
122
  kafka/vendor/socketpair.py,sha256=Fi3PoY1Okkppab720wFk1BhHXyjcw7hi5DwhqrYZH2Y,2737
123
- kafka_python-2.2.19.dist-info/METADATA,sha256=Mk_bmFfBWrAOzcfTWLGyMNILRLHkMjvVXdw_2za3cwA,9952
124
- kafka_python-2.2.19.dist-info/WHEEL,sha256=TdQ5LtNwLuxTCjgxN51AgdU5w-KkB9ttmLbzjTH02pg,109
125
- kafka_python-2.2.19.dist-info/top_level.txt,sha256=IivJz7l5WHdLNDT6RIiVAlhjQzYRwGqBBmKHZ7WjPeM,6
126
- kafka_python-2.2.19.dist-info/RECORD,,
123
+ kafka_python-2.2.20.dist-info/METADATA,sha256=IxlSW6PAJnNBoKYEKFbRz2lQ_CDrLHfNZ0HMDpne9iw,9963
124
+ kafka_python-2.2.20.dist-info/WHEEL,sha256=a5ogxI61vGGBHYbAAwISCXsfU7mxKr76gTpCEmSNOI8,109
125
+ kafka_python-2.2.20.dist-info/top_level.txt,sha256=IivJz7l5WHdLNDT6RIiVAlhjQzYRwGqBBmKHZ7WjPeM,6
126
+ kafka_python-2.2.20.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (82.0.1)
2
+ Generator: setuptools (75.3.4)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py2-none-any
5
5
  Tag: py3-none-any