kafka-python 3.0.6__py3-none-any.whl → 3.0.8__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/net/manager.py +4 -24
- kafka/net/transport.py +51 -8
- kafka/producer/kafka.py +1 -1
- kafka/producer/sender.py +3 -2
- kafka/version.py +1 -1
- {kafka_python-3.0.6.dist-info → kafka_python-3.0.8.dist-info}/METADATA +1 -1
- {kafka_python-3.0.6.dist-info → kafka_python-3.0.8.dist-info}/RECORD +11 -11
- {kafka_python-3.0.6.dist-info → kafka_python-3.0.8.dist-info}/WHEEL +1 -1
- {kafka_python-3.0.6.dist-info → kafka_python-3.0.8.dist-info}/entry_points.txt +0 -0
- {kafka_python-3.0.6.dist-info → kafka_python-3.0.8.dist-info}/licenses/LICENSE +0 -0
- {kafka_python-3.0.6.dist-info → kafka_python-3.0.8.dist-info}/top_level.txt +0 -0
kafka/net/manager.py
CHANGED
|
@@ -3,7 +3,6 @@ import logging
|
|
|
3
3
|
import inspect
|
|
4
4
|
import random
|
|
5
5
|
import socket
|
|
6
|
-
import ssl
|
|
7
6
|
import time
|
|
8
7
|
|
|
9
8
|
from .inet import create_connection
|
|
@@ -205,35 +204,16 @@ class KafkaConnectionManager:
|
|
|
205
204
|
def ssl_enabled(self):
|
|
206
205
|
return self.config['security_protocol'] in ('SSL', 'SASL_SSL')
|
|
207
206
|
|
|
208
|
-
def _build_ssl_context(self):
|
|
209
|
-
if self.config['ssl_context'] is not None:
|
|
210
|
-
return self.config['ssl_context']
|
|
211
|
-
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
|
|
212
|
-
ctx.minimum_version = ssl.TLSVersion.TLSv1_2
|
|
213
|
-
ctx.check_hostname = self.config['ssl_check_hostname']
|
|
214
|
-
if self.config['ssl_cafile']:
|
|
215
|
-
ctx.load_verify_locations(self.config['ssl_cafile'])
|
|
216
|
-
else:
|
|
217
|
-
ctx.load_default_certs()
|
|
218
|
-
if self.config['ssl_certfile']:
|
|
219
|
-
ctx.load_cert_chain(
|
|
220
|
-
certfile=self.config['ssl_certfile'],
|
|
221
|
-
keyfile=self.config['ssl_keyfile'],
|
|
222
|
-
password=self.config['ssl_password'],
|
|
223
|
-
)
|
|
224
|
-
if self.config['ssl_crlfile']:
|
|
225
|
-
ctx.load_verify_locations(crl=self.config['ssl_crlfile'])
|
|
226
|
-
ctx.verify_flags |= ssl.VERIFY_CRL_CHECK_LEAF
|
|
227
|
-
return ctx
|
|
228
|
-
|
|
229
207
|
async def _build_transport(self, node, timeout_at=None):
|
|
230
208
|
sock = await create_connection(self._net, node.host, node.port,
|
|
231
209
|
self.config['socket_options'],
|
|
232
210
|
proxy_url=self.config['proxy_url'],
|
|
233
211
|
timeout_at=timeout_at)
|
|
234
212
|
if self.ssl_enabled:
|
|
235
|
-
|
|
236
|
-
|
|
213
|
+
ssl_configs = {key: value
|
|
214
|
+
for key, value in self.config.items()
|
|
215
|
+
if key.startswith('ssl_')}
|
|
216
|
+
transport = KafkaSSLTransport(self._net, sock, host=node.host, **ssl_configs)
|
|
237
217
|
else:
|
|
238
218
|
transport = KafkaTCPTransport(self._net, sock, host=node.host)
|
|
239
219
|
|
kafka/net/transport.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from collections import deque
|
|
2
|
+
import copy
|
|
2
3
|
import logging
|
|
3
4
|
import selectors
|
|
4
5
|
import socket
|
|
@@ -19,6 +20,8 @@ class KafkaTCPTransport:
|
|
|
19
20
|
self._closed = False
|
|
20
21
|
self._write_buffer = deque()
|
|
21
22
|
self._writing = False
|
|
23
|
+
self._read_task = None
|
|
24
|
+
self._write_task = None
|
|
22
25
|
self._protocol = None
|
|
23
26
|
self._read = False
|
|
24
27
|
self._write = True
|
|
@@ -80,7 +83,7 @@ class KafkaTCPTransport:
|
|
|
80
83
|
data_received() method.
|
|
81
84
|
"""
|
|
82
85
|
if not self._read:
|
|
83
|
-
self._net.call_soon(self._read_from_sock)
|
|
86
|
+
self._read_task = self._net.call_soon(self._read_from_sock)
|
|
84
87
|
self._read = True
|
|
85
88
|
log.debug('%s: Resumed reading', self)
|
|
86
89
|
|
|
@@ -173,7 +176,7 @@ class KafkaTCPTransport:
|
|
|
173
176
|
self._write_buffer.append(data)
|
|
174
177
|
if not self._writing:
|
|
175
178
|
self._writing = True
|
|
176
|
-
self._net.call_soon(self._write_to_sock)
|
|
179
|
+
self._write_task = self._net.call_soon(self._write_to_sock)
|
|
177
180
|
|
|
178
181
|
def writelines(self, list_of_data):
|
|
179
182
|
"""Write a list (or any iterable) of data bytes to the transport."""
|
|
@@ -182,7 +185,7 @@ class KafkaTCPTransport:
|
|
|
182
185
|
self._write_buffer.extend(list_of_data)
|
|
183
186
|
if not self._writing:
|
|
184
187
|
self._writing = True
|
|
185
|
-
self._net.call_soon(self._write_to_sock)
|
|
188
|
+
self._write_task = self._net.call_soon(self._write_to_sock)
|
|
186
189
|
|
|
187
190
|
async def _write_to_sock(self):
|
|
188
191
|
try:
|
|
@@ -272,6 +275,10 @@ class KafkaTCPTransport:
|
|
|
272
275
|
except OSError:
|
|
273
276
|
pass
|
|
274
277
|
sock.close()
|
|
278
|
+
for task in (self._read_task, self._write_task):
|
|
279
|
+
if task is not None:
|
|
280
|
+
self._net.cancel(task)
|
|
281
|
+
self._read_task = self._write_task = None
|
|
275
282
|
proto = self._protocol
|
|
276
283
|
self._protocol = None
|
|
277
284
|
if proto is not None:
|
|
@@ -365,13 +372,49 @@ class KafkaTCPTransport:
|
|
|
365
372
|
|
|
366
373
|
|
|
367
374
|
class KafkaSSLTransport(KafkaTCPTransport):
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
375
|
+
DEFAULT_CONFIG = {
|
|
376
|
+
'ssl_context': None,
|
|
377
|
+
'ssl_check_hostname': True,
|
|
378
|
+
'ssl_cafile': None,
|
|
379
|
+
'ssl_certfile': None,
|
|
380
|
+
'ssl_keyfile': None,
|
|
381
|
+
'ssl_password': None,
|
|
382
|
+
'ssl_crlfile': None,
|
|
383
|
+
}
|
|
384
|
+
def __init__(self, net, sock, host=None, **configs):
|
|
385
|
+
self.ssl_config = copy.copy(self.DEFAULT_CONFIG)
|
|
386
|
+
for key in self.ssl_config:
|
|
387
|
+
if key in configs:
|
|
388
|
+
self.ssl_config[key] = configs[key]
|
|
389
|
+
self._ssl_context = self._build_ssl_context(self.ssl_config)
|
|
390
|
+
server_hostname = host.rstrip('.') if host is not None else None
|
|
391
|
+
sock = self._ssl_context.wrap_socket(
|
|
392
|
+
sock, server_hostname=server_hostname,
|
|
393
|
+
do_handshake_on_connect=False)
|
|
373
394
|
super().__init__(net, sock, host=host)
|
|
374
395
|
|
|
396
|
+
@staticmethod
|
|
397
|
+
def _build_ssl_context(config):
|
|
398
|
+
if config['ssl_context'] is not None:
|
|
399
|
+
return config['ssl_context']
|
|
400
|
+
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
|
|
401
|
+
ctx.minimum_version = ssl.TLSVersion.TLSv1_2
|
|
402
|
+
ctx.check_hostname = config['ssl_check_hostname']
|
|
403
|
+
if config['ssl_cafile']:
|
|
404
|
+
ctx.load_verify_locations(config['ssl_cafile'])
|
|
405
|
+
else:
|
|
406
|
+
ctx.load_default_certs()
|
|
407
|
+
if config['ssl_certfile']:
|
|
408
|
+
ctx.load_cert_chain(
|
|
409
|
+
certfile=config['ssl_certfile'],
|
|
410
|
+
keyfile=config['ssl_keyfile'],
|
|
411
|
+
password=config['ssl_password'],
|
|
412
|
+
)
|
|
413
|
+
if config['ssl_crlfile']:
|
|
414
|
+
ctx.load_verify_locations(crl=config['ssl_crlfile'])
|
|
415
|
+
ctx.verify_flags |= ssl.VERIFY_CRL_CHECK_LEAF
|
|
416
|
+
return ctx
|
|
417
|
+
|
|
375
418
|
async def handshake(self):
|
|
376
419
|
while True:
|
|
377
420
|
try:
|
kafka/producer/kafka.py
CHANGED
kafka/producer/sender.py
CHANGED
|
@@ -310,7 +310,7 @@ class Sender(threading.Thread):
|
|
|
310
310
|
return False
|
|
311
311
|
|
|
312
312
|
log.debug("%s: Sending transactional request %s", str(self), next_request_handler.request)
|
|
313
|
-
while not self._force_close:
|
|
313
|
+
while self._running and not self._force_close:
|
|
314
314
|
target_node = None
|
|
315
315
|
try:
|
|
316
316
|
if next_request_handler.needs_coordinator():
|
|
@@ -325,7 +325,8 @@ class Sender(threading.Thread):
|
|
|
325
325
|
else:
|
|
326
326
|
target_node = self._client.least_loaded_node()
|
|
327
327
|
if target_node is None:
|
|
328
|
-
self._client.poll(
|
|
328
|
+
self._client.poll(timeout_ms=self.config['retry_backoff_ms'],
|
|
329
|
+
future=self._metadata.request_update())
|
|
329
330
|
elif not self._client.await_ready(target_node, timeout_ms=self.config['request_timeout_ms']):
|
|
330
331
|
continue
|
|
331
332
|
|
kafka/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = '3.0.
|
|
1
|
+
__version__ = '3.0.8'
|
|
@@ -6,7 +6,7 @@ kafka/errors.py,sha256=9owgtTIcttdTCD1vAF9wz5jL9G72ljpR7M-vjLKEGvY,33206
|
|
|
6
6
|
kafka/future.py,sha256=INmMIy2-BPxJ4zlw-V_i8Tj_OG9DMbyYyUEjOQ5pn_o,5440
|
|
7
7
|
kafka/structs.py,sha256=ZOFmVJRbhSXykkw9cnuv-DGYE7g2KjaUGsytSOv4xVw,3146
|
|
8
8
|
kafka/util.py,sha256=hvSdRbh5-IsUbpD_BqjabjEldtNmXufZH68b_xCkNjE,5194
|
|
9
|
-
kafka/version.py,sha256=
|
|
9
|
+
kafka/version.py,sha256=sF9np2e_SuSeS9bX2MWnkn45e-mKQh1f9lVU_kod4Yg,22
|
|
10
10
|
kafka/admin/__init__.py,sha256=nTXg2CQo8Bydxsj80pVBzF2-jq4IhK7_gLnboeNWG60,1575
|
|
11
11
|
kafka/admin/__main__.py,sha256=l5ujkHa3lBFEbKPCl7U0_pi6IIgj1IJfmB219vtcj50,69
|
|
12
12
|
kafka/admin/_acls.py,sha256=QJlHguEM9t46qlABoQqTEDFQErDgG2RKwfV1NOKeKmU,13983
|
|
@@ -131,11 +131,11 @@ kafka/net/compat.py,sha256=xBwWj5WgcfFbiPWy-46VCa25jDC9x5DOTl_ds_VXdyg,6415
|
|
|
131
131
|
kafka/net/connection.py,sha256=gxUHGAESQneccx0JXY0apoxcsyL-XtMmryCJV4r_DOQ,26349
|
|
132
132
|
kafka/net/http_connect.py,sha256=j8R1yLNwhTF-nQVMEgRF88mOF5-v1Sdj7uwkBvvg5PU,5133
|
|
133
133
|
kafka/net/inet.py,sha256=zMo0NTCS7EY81uoNPri5ZHKcCnRVUIcCJiW6BeZWnCs,4730
|
|
134
|
-
kafka/net/manager.py,sha256=
|
|
134
|
+
kafka/net/manager.py,sha256=lpvu9ZmLh07ze0QlfVriLQ---3DNotW1VmdJw-FiG58,20283
|
|
135
135
|
kafka/net/metrics.py,sha256=-cdWXQtonCO7-LpovLoEcWM-_3R9sAtyQxWf_QHOAWE,7299
|
|
136
136
|
kafka/net/selector.py,sha256=kKKhVA6UdyiTNAnRDlRJNA3rC-C0anUcpYHnQy_yRZQ,29333
|
|
137
137
|
kafka/net/socks5.py,sha256=euTwJl2avRmCJhVKyGmhZWInqgY6MNHPA1Tz2f2J1Z0,10361
|
|
138
|
-
kafka/net/transport.py,sha256=
|
|
138
|
+
kafka/net/transport.py,sha256=W6ne_UGPldoYMJ-7KOxksAfswSyLRbjqeSMctr5WGhE,17285
|
|
139
139
|
kafka/net/wakeup_notifier.py,sha256=gLnfg-HEjVS5J9p-7kZfZpIeLT0AjvK5MOc6EMj3R88,2783
|
|
140
140
|
kafka/net/sasl/__init__.py,sha256=vKE2jkS_BZ2OEVANlXZhW2xIVvH5C1o2kCxugw2PfYY,1006
|
|
141
141
|
kafka/net/sasl/abc.py,sha256=H3tHUPevoaQdS395_ID88Wxhwvc8XjOTcAP8dKXxO9I,547
|
|
@@ -152,10 +152,10 @@ kafka/partitioner/sticky.py,sha256=A3pfCrFl-jhmpqTANlRcQ5ixd_e-F3K8-d42ugaE378,4
|
|
|
152
152
|
kafka/producer/__init__.py,sha256=OPWP89JbP1dCYG4HSWl1iz6KLun0oJDYfqLAr0vAfHQ,82
|
|
153
153
|
kafka/producer/__main__.py,sha256=h5u6-EfA7bJFszn0x-QV14pZt4MOJw0jiPHKuMSkCOY,72
|
|
154
154
|
kafka/producer/future.py,sha256=D5_8Hz-8CqJZYEVMieUk7wBhKS83skFnisGlsyosIbk,6669
|
|
155
|
-
kafka/producer/kafka.py,sha256=
|
|
155
|
+
kafka/producer/kafka.py,sha256=nWBHlweLZGc_oDC2ipT7ewd0M2bY4s_294GKllkmZT4,59338
|
|
156
156
|
kafka/producer/producer_batch.py,sha256=gFuJNaUM9gHs0KpgQ0KFZCIlBy43OnrRyzo2xb0HSTo,8027
|
|
157
157
|
kafka/producer/record_accumulator.py,sha256=B6C64fNzD7MIFsWV-kJFrahKRVS5dYniI3OFhnUqvRw,28039
|
|
158
|
-
kafka/producer/sender.py,sha256=
|
|
158
|
+
kafka/producer/sender.py,sha256=fe9spMNSaIAMCypVFAL047eRx3pMH8ARAVVIrzV-aVM,44712
|
|
159
159
|
kafka/producer/transaction_manager.py,sha256=E90BGF3_zU-k2jfIcKWKbCUWhxCoPT-d2vrJER23Q84,61408
|
|
160
160
|
kafka/protocol/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
161
161
|
kafka/protocol/api_data.py,sha256=fyiEuEftBfJl23SL3EkF-Sd0lps9ZmTlDT9PY6YV_PY,4793
|
|
@@ -365,9 +365,9 @@ kafka/serializer/default.py,sha256=ZKzTWlG9N4vS3QXovFLygNVrnjAcMZKS0RE4OvQ6DL4,4
|
|
|
365
365
|
kafka/serializer/json.py,sha256=lErgU66KZGf33hofwlObYIaxLDk9gcolhy_rlcOuf8Y,469
|
|
366
366
|
kafka/serializer/wrapper.py,sha256=RGXFj-PXQyL3rdMXI9ACaohRa6Kg5SHOZTRruU9jluM,485
|
|
367
367
|
kafka/vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
368
|
-
kafka_python-3.0.
|
|
369
|
-
kafka_python-3.0.
|
|
370
|
-
kafka_python-3.0.
|
|
371
|
-
kafka_python-3.0.
|
|
372
|
-
kafka_python-3.0.
|
|
373
|
-
kafka_python-3.0.
|
|
368
|
+
kafka_python-3.0.8.dist-info/licenses/LICENSE,sha256=vxnoJsqm6bKl3ZWdI1Q7Ikw_k9cOvO3vcvZNsY_1fP8,11374
|
|
369
|
+
kafka_python-3.0.8.dist-info/METADATA,sha256=w_BZW-iGkbiAEqrRVdirz75AObRdFu7xzmd6UZUhsT0,11590
|
|
370
|
+
kafka_python-3.0.8.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
|
|
371
|
+
kafka_python-3.0.8.dist-info/entry_points.txt,sha256=LQvqZj3uM785ainO5HrXmukbjSrK-oPqrESqpvoR-As,51
|
|
372
|
+
kafka_python-3.0.8.dist-info/top_level.txt,sha256=IivJz7l5WHdLNDT6RIiVAlhjQzYRwGqBBmKHZ7WjPeM,6
|
|
373
|
+
kafka_python-3.0.8.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|