kafka-python 2.2.13__tar.gz → 2.2.14__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.14}/CHANGES.md +6 -0
  2. {kafka_python-2.2.13 → kafka_python-2.2.14}/PKG-INFO +1 -1
  3. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/consumer/fetcher.py +2 -1
  4. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/coordinator/base.py +18 -17
  5. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/sasl/gssapi.py +2 -2
  6. kafka_python-2.2.14/kafka/version.py +1 -0
  7. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka_python.egg-info/PKG-INFO +1 -1
  8. kafka_python-2.2.13/kafka/version.py +0 -1
  9. {kafka_python-2.2.13 → kafka_python-2.2.14}/AUTHORS.md +0 -0
  10. {kafka_python-2.2.13 → kafka_python-2.2.14}/LICENSE +0 -0
  11. {kafka_python-2.2.13 → kafka_python-2.2.14}/MANIFEST.in +0 -0
  12. {kafka_python-2.2.13 → kafka_python-2.2.14}/README.rst +0 -0
  13. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/__init__.py +0 -0
  14. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/admin/__init__.py +0 -0
  15. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/admin/acl_resource.py +0 -0
  16. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/admin/client.py +0 -0
  17. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/admin/config_resource.py +0 -0
  18. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/admin/new_partitions.py +0 -0
  19. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/admin/new_topic.py +0 -0
  20. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/benchmarks/__init__.py +0 -0
  21. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/benchmarks/consumer_performance.py +0 -0
  22. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/benchmarks/load_example.py +0 -0
  23. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/benchmarks/producer_performance.py +0 -0
  24. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/benchmarks/record_batch_compose.py +0 -0
  25. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/benchmarks/record_batch_read.py +0 -0
  26. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/benchmarks/varint_speed.py +0 -0
  27. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/client_async.py +0 -0
  28. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/cluster.py +0 -0
  29. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/codec.py +0 -0
  30. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/conn.py +0 -0
  31. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/consumer/__init__.py +0 -0
  32. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/consumer/group.py +0 -0
  33. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/consumer/subscription_state.py +0 -0
  34. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/coordinator/__init__.py +0 -0
  35. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/coordinator/assignors/__init__.py +0 -0
  36. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/coordinator/assignors/abstract.py +0 -0
  37. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/coordinator/assignors/range.py +0 -0
  38. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/coordinator/assignors/roundrobin.py +0 -0
  39. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/coordinator/assignors/sticky/__init__.py +0 -0
  40. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/coordinator/assignors/sticky/partition_movements.py +0 -0
  41. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/coordinator/assignors/sticky/sorted_set.py +0 -0
  42. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/coordinator/assignors/sticky/sticky_assignor.py +0 -0
  43. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/coordinator/consumer.py +0 -0
  44. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/coordinator/heartbeat.py +0 -0
  45. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/coordinator/protocol.py +0 -0
  46. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/errors.py +0 -0
  47. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/future.py +0 -0
  48. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/__init__.py +0 -0
  49. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/compound_stat.py +0 -0
  50. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/dict_reporter.py +0 -0
  51. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/kafka_metric.py +0 -0
  52. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/measurable.py +0 -0
  53. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/measurable_stat.py +0 -0
  54. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/metric_config.py +0 -0
  55. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/metric_name.py +0 -0
  56. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/metrics.py +0 -0
  57. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/metrics_reporter.py +0 -0
  58. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/quota.py +0 -0
  59. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/stat.py +0 -0
  60. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/stats/__init__.py +0 -0
  61. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/stats/avg.py +0 -0
  62. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/stats/count.py +0 -0
  63. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/stats/histogram.py +0 -0
  64. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/stats/max_stat.py +0 -0
  65. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/stats/min_stat.py +0 -0
  66. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/stats/percentile.py +0 -0
  67. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/stats/percentiles.py +0 -0
  68. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/stats/rate.py +0 -0
  69. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/stats/sampled_stat.py +0 -0
  70. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/stats/sensor.py +0 -0
  71. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/metrics/stats/total.py +0 -0
  72. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/partitioner/__init__.py +0 -0
  73. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/partitioner/default.py +0 -0
  74. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/producer/__init__.py +0 -0
  75. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/producer/future.py +0 -0
  76. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/producer/kafka.py +0 -0
  77. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/producer/record_accumulator.py +0 -0
  78. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/producer/sender.py +0 -0
  79. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/producer/transaction_manager.py +0 -0
  80. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/__init__.py +0 -0
  81. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/abstract.py +0 -0
  82. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/add_offsets_to_txn.py +0 -0
  83. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/add_partitions_to_txn.py +0 -0
  84. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/admin.py +0 -0
  85. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/api.py +0 -0
  86. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/api_versions.py +0 -0
  87. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/broker_api_versions.py +0 -0
  88. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/commit.py +0 -0
  89. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/end_txn.py +0 -0
  90. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/fetch.py +0 -0
  91. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/find_coordinator.py +0 -0
  92. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/frame.py +0 -0
  93. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/group.py +0 -0
  94. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/init_producer_id.py +0 -0
  95. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/list_offsets.py +0 -0
  96. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/message.py +0 -0
  97. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/metadata.py +0 -0
  98. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/offset_for_leader_epoch.py +0 -0
  99. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/parser.py +0 -0
  100. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/pickle.py +0 -0
  101. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/produce.py +0 -0
  102. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/sasl_authenticate.py +0 -0
  103. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/sasl_handshake.py +0 -0
  104. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/struct.py +0 -0
  105. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/txn_offset_commit.py +0 -0
  106. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/protocol/types.py +0 -0
  107. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/record/__init__.py +0 -0
  108. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/record/_crc32c.py +0 -0
  109. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/record/abc.py +0 -0
  110. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/record/default_records.py +0 -0
  111. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/record/legacy_records.py +0 -0
  112. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/record/memory_records.py +0 -0
  113. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/record/util.py +0 -0
  114. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/sasl/__init__.py +0 -0
  115. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/sasl/abc.py +0 -0
  116. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/sasl/msk.py +0 -0
  117. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/sasl/oauth.py +0 -0
  118. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/sasl/plain.py +0 -0
  119. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/sasl/scram.py +0 -0
  120. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/sasl/sspi.py +0 -0
  121. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/serializer/__init__.py +0 -0
  122. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/serializer/abstract.py +0 -0
  123. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/socks5_wrapper.py +0 -0
  124. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/structs.py +0 -0
  125. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/util.py +0 -0
  126. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/vendor/__init__.py +0 -0
  127. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/vendor/enum34.py +0 -0
  128. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/vendor/selectors34.py +0 -0
  129. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/vendor/six.py +0 -0
  130. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka/vendor/socketpair.py +0 -0
  131. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka_python.egg-info/SOURCES.txt +0 -0
  132. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka_python.egg-info/dependency_links.txt +0 -0
  133. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka_python.egg-info/requires.txt +0 -0
  134. {kafka_python-2.2.13 → kafka_python-2.2.14}/kafka_python.egg-info/top_level.txt +0 -0
  135. {kafka_python-2.2.13 → kafka_python-2.2.14}/pyproject.toml +0 -0
  136. {kafka_python-2.2.13 → kafka_python-2.2.14}/setup.cfg +0 -0
  137. {kafka_python-2.2.13 → kafka_python-2.2.14}/setup.py +0 -0
  138. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/integration/__init__.py +0 -0
  139. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/integration/conftest.py +0 -0
  140. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/integration/fixtures.py +0 -0
  141. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/integration/test_admin_integration.py +0 -0
  142. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/integration/test_consumer_group.py +0 -0
  143. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/integration/test_consumer_integration.py +0 -0
  144. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/integration/test_producer_integration.py +0 -0
  145. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/integration/test_sasl_integration.py +0 -0
  146. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_acl_comparisons.py +0 -0
  147. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_admin.py +0 -0
  148. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_api_object_implementation.py +0 -0
  149. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_assignors.py +0 -0
  150. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_client_async.py +0 -0
  151. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_cluster.py +0 -0
  152. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_codec.py +0 -0
  153. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_conn.py +0 -0
  154. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_consumer.py +0 -0
  155. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_coordinator.py +0 -0
  156. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_fetcher.py +0 -0
  157. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_metrics.py +0 -0
  158. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_object_conversion.py +0 -0
  159. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_package.py +0 -0
  160. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_partition_movements.py +0 -0
  161. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_partitioner.py +0 -0
  162. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_producer.py +0 -0
  163. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_protocol.py +0 -0
  164. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_record_accumulator.py +0 -0
  165. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_sender.py +0 -0
  166. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_subscription_state.py +0 -0
  167. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/test_util.py +0 -0
  168. {kafka_python-2.2.13 → kafka_python-2.2.14}/test/testutil.py +0 -0
@@ -1,3 +1,9 @@
1
+ # 2.2.14 (June 27, 2025)
2
+
3
+ Fixes
4
+ * python2 fixups (#2655)
5
+ * Fix coordinator lock contention during close() (#2652)
6
+
1
7
  # 2.2.13 (June 20, 2025)
2
8
 
3
9
  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.14
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)
@@ -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():
@@ -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.14'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kafka-python
3
- Version: 2.2.13
3
+ Version: 2.2.14
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