kafka-python 2.2.13__tar.gz → 2.2.15__tar.gz

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.
Files changed (168) hide show
  1. {kafka_python-2.2.13 → kafka_python-2.2.15}/CHANGES.md +12 -0
  2. {kafka_python-2.2.13 → kafka_python-2.2.15}/PKG-INFO +1 -1
  3. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/consumer/fetcher.py +2 -1
  4. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/consumer/group.py +1 -1
  5. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/coordinator/base.py +18 -17
  6. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/producer/record_accumulator.py +2 -2
  7. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/producer/transaction_manager.py +2 -2
  8. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/sasl/gssapi.py +2 -2
  9. kafka_python-2.2.15/kafka/version.py +1 -0
  10. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka_python.egg-info/PKG-INFO +1 -1
  11. kafka_python-2.2.13/kafka/version.py +0 -1
  12. {kafka_python-2.2.13 → kafka_python-2.2.15}/AUTHORS.md +0 -0
  13. {kafka_python-2.2.13 → kafka_python-2.2.15}/LICENSE +0 -0
  14. {kafka_python-2.2.13 → kafka_python-2.2.15}/MANIFEST.in +0 -0
  15. {kafka_python-2.2.13 → kafka_python-2.2.15}/README.rst +0 -0
  16. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/__init__.py +0 -0
  17. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/admin/__init__.py +0 -0
  18. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/admin/acl_resource.py +0 -0
  19. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/admin/client.py +0 -0
  20. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/admin/config_resource.py +0 -0
  21. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/admin/new_partitions.py +0 -0
  22. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/admin/new_topic.py +0 -0
  23. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/benchmarks/__init__.py +0 -0
  24. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/benchmarks/consumer_performance.py +0 -0
  25. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/benchmarks/load_example.py +0 -0
  26. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/benchmarks/producer_performance.py +0 -0
  27. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/benchmarks/record_batch_compose.py +0 -0
  28. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/benchmarks/record_batch_read.py +0 -0
  29. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/benchmarks/varint_speed.py +0 -0
  30. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/client_async.py +0 -0
  31. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/cluster.py +0 -0
  32. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/codec.py +0 -0
  33. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/conn.py +0 -0
  34. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/consumer/__init__.py +0 -0
  35. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/consumer/subscription_state.py +0 -0
  36. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/coordinator/__init__.py +0 -0
  37. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/coordinator/assignors/__init__.py +0 -0
  38. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/coordinator/assignors/abstract.py +0 -0
  39. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/coordinator/assignors/range.py +0 -0
  40. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/coordinator/assignors/roundrobin.py +0 -0
  41. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/coordinator/assignors/sticky/__init__.py +0 -0
  42. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/coordinator/assignors/sticky/partition_movements.py +0 -0
  43. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/coordinator/assignors/sticky/sorted_set.py +0 -0
  44. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/coordinator/assignors/sticky/sticky_assignor.py +0 -0
  45. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/coordinator/consumer.py +0 -0
  46. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/coordinator/heartbeat.py +0 -0
  47. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/coordinator/protocol.py +0 -0
  48. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/errors.py +0 -0
  49. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/future.py +0 -0
  50. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/__init__.py +0 -0
  51. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/compound_stat.py +0 -0
  52. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/dict_reporter.py +0 -0
  53. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/kafka_metric.py +0 -0
  54. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/measurable.py +0 -0
  55. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/measurable_stat.py +0 -0
  56. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/metric_config.py +0 -0
  57. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/metric_name.py +0 -0
  58. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/metrics.py +0 -0
  59. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/metrics_reporter.py +0 -0
  60. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/quota.py +0 -0
  61. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/stat.py +0 -0
  62. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/stats/__init__.py +0 -0
  63. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/stats/avg.py +0 -0
  64. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/stats/count.py +0 -0
  65. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/stats/histogram.py +0 -0
  66. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/stats/max_stat.py +0 -0
  67. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/stats/min_stat.py +0 -0
  68. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/stats/percentile.py +0 -0
  69. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/stats/percentiles.py +0 -0
  70. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/stats/rate.py +0 -0
  71. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/stats/sampled_stat.py +0 -0
  72. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/stats/sensor.py +0 -0
  73. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/metrics/stats/total.py +0 -0
  74. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/partitioner/__init__.py +0 -0
  75. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/partitioner/default.py +0 -0
  76. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/producer/__init__.py +0 -0
  77. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/producer/future.py +0 -0
  78. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/producer/kafka.py +0 -0
  79. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/producer/sender.py +0 -0
  80. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/__init__.py +0 -0
  81. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/abstract.py +0 -0
  82. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/add_offsets_to_txn.py +0 -0
  83. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/add_partitions_to_txn.py +0 -0
  84. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/admin.py +0 -0
  85. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/api.py +0 -0
  86. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/api_versions.py +0 -0
  87. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/broker_api_versions.py +0 -0
  88. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/commit.py +0 -0
  89. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/end_txn.py +0 -0
  90. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/fetch.py +0 -0
  91. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/find_coordinator.py +0 -0
  92. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/frame.py +0 -0
  93. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/group.py +0 -0
  94. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/init_producer_id.py +0 -0
  95. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/list_offsets.py +0 -0
  96. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/message.py +0 -0
  97. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/metadata.py +0 -0
  98. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/offset_for_leader_epoch.py +0 -0
  99. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/parser.py +0 -0
  100. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/pickle.py +0 -0
  101. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/produce.py +0 -0
  102. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/sasl_authenticate.py +0 -0
  103. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/sasl_handshake.py +0 -0
  104. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/struct.py +0 -0
  105. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/txn_offset_commit.py +0 -0
  106. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/protocol/types.py +0 -0
  107. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/record/__init__.py +0 -0
  108. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/record/_crc32c.py +0 -0
  109. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/record/abc.py +0 -0
  110. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/record/default_records.py +0 -0
  111. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/record/legacy_records.py +0 -0
  112. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/record/memory_records.py +0 -0
  113. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/record/util.py +0 -0
  114. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/sasl/__init__.py +0 -0
  115. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/sasl/abc.py +0 -0
  116. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/sasl/msk.py +0 -0
  117. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/sasl/oauth.py +0 -0
  118. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/sasl/plain.py +0 -0
  119. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/sasl/scram.py +0 -0
  120. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/sasl/sspi.py +0 -0
  121. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/serializer/__init__.py +0 -0
  122. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/serializer/abstract.py +0 -0
  123. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/socks5_wrapper.py +0 -0
  124. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/structs.py +0 -0
  125. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/util.py +0 -0
  126. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/vendor/__init__.py +0 -0
  127. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/vendor/enum34.py +0 -0
  128. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/vendor/selectors34.py +0 -0
  129. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/vendor/six.py +0 -0
  130. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka/vendor/socketpair.py +0 -0
  131. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka_python.egg-info/SOURCES.txt +0 -0
  132. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka_python.egg-info/dependency_links.txt +0 -0
  133. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka_python.egg-info/requires.txt +0 -0
  134. {kafka_python-2.2.13 → kafka_python-2.2.15}/kafka_python.egg-info/top_level.txt +0 -0
  135. {kafka_python-2.2.13 → kafka_python-2.2.15}/pyproject.toml +0 -0
  136. {kafka_python-2.2.13 → kafka_python-2.2.15}/setup.cfg +0 -0
  137. {kafka_python-2.2.13 → kafka_python-2.2.15}/setup.py +0 -0
  138. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/integration/__init__.py +0 -0
  139. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/integration/conftest.py +0 -0
  140. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/integration/fixtures.py +0 -0
  141. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/integration/test_admin_integration.py +0 -0
  142. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/integration/test_consumer_group.py +0 -0
  143. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/integration/test_consumer_integration.py +0 -0
  144. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/integration/test_producer_integration.py +0 -0
  145. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/integration/test_sasl_integration.py +0 -0
  146. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_acl_comparisons.py +0 -0
  147. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_admin.py +0 -0
  148. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_api_object_implementation.py +0 -0
  149. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_assignors.py +0 -0
  150. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_client_async.py +0 -0
  151. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_cluster.py +0 -0
  152. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_codec.py +0 -0
  153. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_conn.py +0 -0
  154. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_consumer.py +0 -0
  155. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_coordinator.py +0 -0
  156. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_fetcher.py +0 -0
  157. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_metrics.py +0 -0
  158. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_object_conversion.py +0 -0
  159. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_package.py +0 -0
  160. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_partition_movements.py +0 -0
  161. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_partitioner.py +0 -0
  162. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_producer.py +0 -0
  163. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_protocol.py +0 -0
  164. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_record_accumulator.py +0 -0
  165. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_sender.py +0 -0
  166. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_subscription_state.py +0 -0
  167. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/test_util.py +0 -0
  168. {kafka_python-2.2.13 → kafka_python-2.2.15}/test/testutil.py +0 -0
@@ -1,3 +1,15 @@
1
+ # 2.2.15 (July 1, 2025)
2
+
3
+ Fixes
4
+ * Fix KafkaProducer broken method names (llk89 / #2660)
5
+ * Fix spelling mistake in KafkaConsumer docs (Xeus-CC / #2659)
6
+
7
+ # 2.2.14 (June 27, 2025)
8
+
9
+ Fixes
10
+ * python2 fixups (#2655)
11
+ * Fix coordinator lock contention during close() (#2652)
12
+
1
13
  # 2.2.13 (June 20, 2025)
2
14
 
3
15
  Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kafka-python
3
- Version: 2.2.13
3
+ Version: 2.2.15
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
@@ -613,7 +613,8 @@ class Fetcher(six.Iterator):
613
613
  fetchable = self._subscriptions.fetchable_partitions()
614
614
  # do not fetch a partition if we have a pending fetch response to process
615
615
  # use copy.copy to avoid runtimeerror on mutation from different thread
616
- discard = {fetch.topic_partition for fetch in self._completed_fetches.copy()}
616
+ # TODO: switch to deque.copy() with py3
617
+ discard = {fetch.topic_partition for fetch in copy.copy(self._completed_fetches)}
617
618
  current = self._next_partition_records
618
619
  if current:
619
620
  discard.add(current.topic_partition)
@@ -123,7 +123,7 @@ class KafkaConsumer(six.Iterator):
123
123
  be disabled in cases seeking extreme performance. Default: True
124
124
  isolation_level (str): Configure KIP-98 transactional consumer by
125
125
  setting to 'read_committed'. This will cause the consumer to
126
- skip records from aborted tranactions. Default: 'read_uncommitted'
126
+ skip records from aborted transactions. Default: 'read_uncommitted'
127
127
  allow_auto_create_topics (bool): Enable/disable auto topic creation
128
128
  on metadata request. Only available with api_version >= (0, 11).
129
129
  Default: True
@@ -857,14 +857,12 @@ class BaseCoordinator(object):
857
857
  self._heartbeat_thread.disable()
858
858
 
859
859
  def _close_heartbeat_thread(self, timeout_ms=None):
860
- with self._lock:
861
- if self._heartbeat_thread is not None:
862
- heartbeat_log.info('Stopping heartbeat thread')
863
- try:
864
- self._heartbeat_thread.close(timeout_ms=timeout_ms)
865
- except ReferenceError:
866
- pass
867
- self._heartbeat_thread = None
860
+ if self._heartbeat_thread is not None:
861
+ try:
862
+ self._heartbeat_thread.close(timeout_ms=timeout_ms)
863
+ except ReferenceError:
864
+ pass
865
+ self._heartbeat_thread = None
868
866
 
869
867
  def __del__(self):
870
868
  try:
@@ -1047,17 +1045,20 @@ class HeartbeatThread(threading.Thread):
1047
1045
  self.enabled = False
1048
1046
 
1049
1047
  def close(self, timeout_ms=None):
1050
- if self.closed:
1051
- return
1052
- self.closed = True
1048
+ with self.coordinator._lock:
1049
+ if self.closed:
1050
+ return
1053
1051
 
1054
- # Generally this should not happen - close() is triggered
1055
- # by the coordinator. But in some cases GC may close the coordinator
1056
- # from within the heartbeat thread.
1057
- if threading.current_thread() == self:
1058
- return
1052
+ heartbeat_log.info('Stopping heartbeat thread')
1053
+ self.closed = True
1059
1054
 
1060
- with self.coordinator._lock:
1055
+ # Generally this should not happen - close() is triggered
1056
+ # by the coordinator. But in some cases GC may close the coordinator
1057
+ # from within the heartbeat thread.
1058
+ if threading.current_thread() == self:
1059
+ return
1060
+
1061
+ # Notify coordinator lock to wake thread from sleep/lock.wait
1061
1062
  self.coordinator._lock.notify()
1062
1063
 
1063
1064
  if self.is_alive():
@@ -430,7 +430,7 @@ class RecordAccumulator(object):
430
430
  expired = bool(waited_time >= time_to_wait)
431
431
 
432
432
  sendable = (full or expired or self._closed or
433
- self._flush_in_progress())
433
+ self.flush_in_progress())
434
434
 
435
435
  if sendable and not backing_off:
436
436
  ready_nodes.add(leader)
@@ -563,7 +563,7 @@ class RecordAccumulator(object):
563
563
  """Deallocate the record batch."""
564
564
  self._incomplete.remove(batch)
565
565
 
566
- def _flush_in_progress(self):
566
+ def flush_in_progress(self):
567
567
  """Are there any threads currently waiting on a flush?"""
568
568
  return self._flushes_in_progress.get() > 0
569
569
 
@@ -553,11 +553,11 @@ class TxnRequestHandler(object):
553
553
  return self.transaction_manager.producer_id_and_epoch.epoch
554
554
 
555
555
  def fatal_error(self, exc):
556
- self.transaction_manager._transition_to_fatal_error(exc)
556
+ self.transaction_manager.transition_to_fatal_error(exc)
557
557
  self._result.done(error=exc)
558
558
 
559
559
  def abortable_error(self, exc):
560
- self.transaction_manager._transition_to_abortable_error(exc)
560
+ self.transaction_manager.transition_to_abortable_error(exc)
561
561
  self._result.done(error=exc)
562
562
 
563
563
  def fail(self, exc):
@@ -68,10 +68,10 @@ class SaslMechanismGSSAPI(SaslMechanism):
68
68
  # simply set QoP to 'auth' only (first octet). We reuse the max message size proposed
69
69
  # by the server
70
70
  client_flags = self.SASL_QOP_AUTH
71
- server_flags = msg[0]
71
+ server_flags = struct.Struct('>b').unpack(msg[0:1])[0]
72
72
  message_parts = [
73
73
  struct.Struct('>b').pack(client_flags & server_flags),
74
- msg[1:],
74
+ msg[1:], # always agree to max message size from server
75
75
  self.auth_id.encode('utf-8'),
76
76
  ]
77
77
  # add authorization identity to the response, and GSS-wrap
@@ -0,0 +1 @@
1
+ __version__ = '2.2.15'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kafka-python
3
- Version: 2.2.13
3
+ Version: 2.2.15
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
@@ -1 +0,0 @@
1
- __version__ = '2.2.13'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes