kafka-python 2.2.19__tar.gz → 2.3.1__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 (194) hide show
  1. {kafka_python-2.2.19 → kafka_python-2.3.1}/CHANGES.md +35 -3
  2. {kafka_python-2.2.19 → kafka_python-2.3.1}/PKG-INFO +11 -14
  3. {kafka_python-2.2.19 → kafka_python-2.3.1}/README.rst +10 -13
  4. kafka_python-2.3.1/kafka/__main__.py +5 -0
  5. kafka_python-2.3.1/kafka/admin/__main__.py +7 -0
  6. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/admin/acl_resource.py +12 -2
  7. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/admin/client.py +230 -361
  8. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/admin/config_resource.py +6 -0
  9. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/admin/new_topic.py +2 -7
  10. kafka_python-2.3.1/kafka/cli/admin/__init__.py +145 -0
  11. kafka_python-2.3.1/kafka/cli/admin/cluster/__init__.py +16 -0
  12. kafka_python-2.3.1/kafka/cli/admin/cluster/describe.py +9 -0
  13. kafka_python-2.3.1/kafka/cli/admin/configs/__init__.py +16 -0
  14. kafka_python-2.3.1/kafka/cli/admin/configs/describe.py +24 -0
  15. kafka_python-2.3.1/kafka/cli/admin/consumer_groups/__init__.py +19 -0
  16. kafka_python-2.3.1/kafka/cli/admin/consumer_groups/delete.py +10 -0
  17. kafka_python-2.3.1/kafka/cli/admin/consumer_groups/describe.py +10 -0
  18. kafka_python-2.3.1/kafka/cli/admin/consumer_groups/list.py +9 -0
  19. kafka_python-2.3.1/kafka/cli/admin/consumer_groups/list_offsets.py +10 -0
  20. kafka_python-2.3.1/kafka/cli/admin/log_dirs/__init__.py +16 -0
  21. kafka_python-2.3.1/kafka/cli/admin/log_dirs/describe.py +9 -0
  22. kafka_python-2.3.1/kafka/cli/admin/topics/__init__.py +19 -0
  23. kafka_python-2.3.1/kafka/cli/admin/topics/create.py +18 -0
  24. kafka_python-2.3.1/kafka/cli/admin/topics/delete.py +10 -0
  25. kafka_python-2.3.1/kafka/cli/admin/topics/describe.py +10 -0
  26. kafka_python-2.3.1/kafka/cli/admin/topics/list.py +9 -0
  27. kafka_python-2.3.1/kafka/cli/consumer/__init__.py +89 -0
  28. kafka_python-2.3.1/kafka/cli/producer/__init__.py +91 -0
  29. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/client_async.py +5 -3
  30. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/cluster.py +3 -1
  31. kafka_python-2.3.1/kafka/consumer/__main__.py +7 -0
  32. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/consumer/fetcher.py +8 -5
  33. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/consumer/group.py +25 -1
  34. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/coordinator/assignors/abstract.py +3 -2
  35. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/coordinator/assignors/range.py +16 -11
  36. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/coordinator/assignors/roundrobin.py +15 -10
  37. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/coordinator/assignors/sticky/sticky_assignor.py +9 -8
  38. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/coordinator/base.py +127 -44
  39. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/coordinator/consumer.py +50 -10
  40. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/coordinator/protocol.py +9 -7
  41. kafka_python-2.3.1/kafka/coordinator/subscription.py +37 -0
  42. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/errors.py +7 -0
  43. kafka_python-2.3.1/kafka/producer/__main__.py +7 -0
  44. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/producer/future.py +19 -16
  45. kafka_python-2.3.1/kafka/producer/producer_batch.py +185 -0
  46. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/producer/record_accumulator.py +1 -151
  47. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/producer/sender.py +79 -35
  48. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/producer/transaction_manager.py +4 -0
  49. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/admin.py +4 -4
  50. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/commit.py +31 -8
  51. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/group.py +130 -8
  52. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/metadata.py +47 -3
  53. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/parser.py +1 -1
  54. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/produce.py +2 -2
  55. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/struct.py +6 -7
  56. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/types.py +31 -0
  57. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/util.py +1 -0
  58. kafka_python-2.3.1/kafka/version.py +1 -0
  59. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka_python.egg-info/PKG-INFO +11 -14
  60. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka_python.egg-info/SOURCES.txt +27 -1
  61. kafka_python-2.3.1/test/integration/__init__.py +0 -0
  62. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/integration/test_admin_integration.py +2 -5
  63. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_admin.py +22 -6
  64. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_assignors.py +47 -46
  65. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_coordinator.py +18 -16
  66. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_object_conversion.py +2 -3
  67. kafka_python-2.3.1/test/test_producer_batch.py +151 -0
  68. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_record_accumulator.py +1 -117
  69. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_sender.py +43 -26
  70. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_util.py +1 -0
  71. kafka_python-2.2.19/kafka/protocol/pickle.py +0 -35
  72. kafka_python-2.2.19/kafka/version.py +0 -1
  73. {kafka_python-2.2.19 → kafka_python-2.3.1}/AUTHORS.md +0 -0
  74. {kafka_python-2.2.19 → kafka_python-2.3.1}/LICENSE +0 -0
  75. {kafka_python-2.2.19 → kafka_python-2.3.1}/MANIFEST.in +0 -0
  76. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/__init__.py +0 -0
  77. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/admin/__init__.py +0 -0
  78. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/admin/new_partitions.py +0 -0
  79. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/benchmarks/__init__.py +0 -0
  80. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/benchmarks/consumer_performance.py +0 -0
  81. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/benchmarks/load_example.py +0 -0
  82. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/benchmarks/producer_performance.py +0 -0
  83. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/benchmarks/record_batch_compose.py +0 -0
  84. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/benchmarks/record_batch_read.py +0 -0
  85. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/benchmarks/varint_speed.py +0 -0
  86. {kafka_python-2.2.19/kafka/coordinator → kafka_python-2.3.1/kafka/cli}/__init__.py +0 -0
  87. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/codec.py +0 -0
  88. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/conn.py +0 -0
  89. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/consumer/__init__.py +0 -0
  90. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/consumer/subscription_state.py +0 -0
  91. {kafka_python-2.2.19/kafka/coordinator/assignors → kafka_python-2.3.1/kafka/coordinator}/__init__.py +0 -0
  92. {kafka_python-2.2.19/kafka/coordinator/assignors/sticky → kafka_python-2.3.1/kafka/coordinator/assignors}/__init__.py +0 -0
  93. {kafka_python-2.2.19/kafka/vendor → kafka_python-2.3.1/kafka/coordinator/assignors/sticky}/__init__.py +0 -0
  94. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/coordinator/assignors/sticky/partition_movements.py +0 -0
  95. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/coordinator/assignors/sticky/sorted_set.py +0 -0
  96. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/coordinator/heartbeat.py +0 -0
  97. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/future.py +0 -0
  98. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/__init__.py +0 -0
  99. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/compound_stat.py +0 -0
  100. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/dict_reporter.py +0 -0
  101. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/kafka_metric.py +0 -0
  102. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/measurable.py +0 -0
  103. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/measurable_stat.py +0 -0
  104. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/metric_config.py +0 -0
  105. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/metric_name.py +0 -0
  106. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/metrics.py +0 -0
  107. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/metrics_reporter.py +0 -0
  108. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/quota.py +0 -0
  109. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/stat.py +0 -0
  110. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/stats/__init__.py +0 -0
  111. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/stats/avg.py +0 -0
  112. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/stats/count.py +0 -0
  113. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/stats/histogram.py +0 -0
  114. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/stats/max_stat.py +0 -0
  115. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/stats/min_stat.py +0 -0
  116. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/stats/percentile.py +0 -0
  117. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/stats/percentiles.py +0 -0
  118. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/stats/rate.py +0 -0
  119. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/stats/sampled_stat.py +0 -0
  120. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/stats/sensor.py +0 -0
  121. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/metrics/stats/total.py +0 -0
  122. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/partitioner/__init__.py +0 -0
  123. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/partitioner/default.py +0 -0
  124. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/producer/__init__.py +0 -0
  125. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/producer/kafka.py +0 -0
  126. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/__init__.py +0 -0
  127. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/abstract.py +0 -0
  128. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/add_offsets_to_txn.py +0 -0
  129. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/add_partitions_to_txn.py +0 -0
  130. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/api.py +0 -0
  131. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/api_versions.py +0 -0
  132. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/broker_api_versions.py +0 -0
  133. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/end_txn.py +0 -0
  134. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/fetch.py +0 -0
  135. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/find_coordinator.py +0 -0
  136. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/frame.py +0 -0
  137. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/init_producer_id.py +0 -0
  138. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/list_offsets.py +0 -0
  139. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/message.py +0 -0
  140. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/offset_for_leader_epoch.py +0 -0
  141. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/sasl_authenticate.py +0 -0
  142. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/sasl_handshake.py +0 -0
  143. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/protocol/txn_offset_commit.py +0 -0
  144. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/record/__init__.py +0 -0
  145. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/record/_crc32c.py +0 -0
  146. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/record/abc.py +0 -0
  147. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/record/default_records.py +0 -0
  148. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/record/legacy_records.py +0 -0
  149. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/record/memory_records.py +0 -0
  150. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/record/util.py +0 -0
  151. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/sasl/__init__.py +0 -0
  152. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/sasl/abc.py +0 -0
  153. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/sasl/gssapi.py +0 -0
  154. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/sasl/msk.py +0 -0
  155. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/sasl/oauth.py +0 -0
  156. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/sasl/plain.py +0 -0
  157. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/sasl/scram.py +0 -0
  158. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/sasl/sspi.py +0 -0
  159. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/serializer/__init__.py +0 -0
  160. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/serializer/abstract.py +0 -0
  161. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/socks5_wrapper.py +0 -0
  162. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/structs.py +0 -0
  163. {kafka_python-2.2.19/test/integration → kafka_python-2.3.1/kafka/vendor}/__init__.py +0 -0
  164. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/vendor/enum34.py +0 -0
  165. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/vendor/selectors34.py +0 -0
  166. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/vendor/six.py +0 -0
  167. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka/vendor/socketpair.py +0 -0
  168. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka_python.egg-info/dependency_links.txt +0 -0
  169. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka_python.egg-info/requires.txt +0 -0
  170. {kafka_python-2.2.19 → kafka_python-2.3.1}/kafka_python.egg-info/top_level.txt +0 -0
  171. {kafka_python-2.2.19 → kafka_python-2.3.1}/pyproject.toml +0 -0
  172. {kafka_python-2.2.19 → kafka_python-2.3.1}/setup.cfg +0 -0
  173. {kafka_python-2.2.19 → kafka_python-2.3.1}/setup.py +0 -0
  174. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/integration/conftest.py +0 -0
  175. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/integration/fixtures.py +0 -0
  176. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/integration/test_consumer_group.py +0 -0
  177. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/integration/test_consumer_integration.py +0 -0
  178. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/integration/test_producer_integration.py +0 -0
  179. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/integration/test_sasl_integration.py +0 -0
  180. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_acl_comparisons.py +0 -0
  181. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_api_object_implementation.py +0 -0
  182. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_client_async.py +0 -0
  183. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_cluster.py +0 -0
  184. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_codec.py +0 -0
  185. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_conn.py +0 -0
  186. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_consumer.py +0 -0
  187. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_fetcher.py +0 -0
  188. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_metrics.py +0 -0
  189. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_package.py +0 -0
  190. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_partition_movements.py +0 -0
  191. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_partitioner.py +0 -0
  192. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_producer.py +0 -0
  193. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/test_subscription_state.py +0 -0
  194. {kafka_python-2.2.19 → kafka_python-2.3.1}/test/testutil.py +0 -0
@@ -1,13 +1,45 @@
1
- # 2.2.19 (Apr 9, 2026)
1
+ # 2.3.1 (Apr 9, 2026)
2
2
 
3
3
  Fixes
4
4
  * Fix TaggedFields value encoding; add test coverage (#2725)
5
5
  * Fix zstd multi-frame decompression failure (#2717)
6
6
  * Fix KeyError in KafkaConsumer.committed() (#2710)
7
7
  * Fix VarInt/VarLong encoding; move tests to test/protocol/ (#2706)
8
- * Fix `Fetcher._fetch_offsets_by_times retry handling` (#2833)
8
+ * Fix `Fetcher._fetch_offsets_by_times` retry handling (#2833)
9
9
  * Fixes to support integration testing with external KAFKA_URI (#2838)
10
- * Minor py2 fixes: consumer integration test; done pip install python-snappy
10
+ * Minor py2 fixes: consumer integration test; dont pip install python-snappy
11
+
12
+ # 2.3.0 (Nov 20, 2025)
13
+
14
+ CLI
15
+ * python -m cli interfaces for kafka.admin, kafka.consumer, kafka.producer (#2650)
16
+
17
+ Producer
18
+ * KIP-654: Abort transaction with pending data with TransactionAbortedError (#2662)
19
+ * KafkaProducer: Handle UnknownProducerIdError (#2663)
20
+ * KIP-467: Augment ProduceResponse error messaging for specific culprit records (#2661)
21
+
22
+ Consumer
23
+ * KIP-345: Consumer group static membership (#2625)
24
+ * KIP-207: Add ListOffsetsRequest v5 / handle OffsetNotAvailableError (#2657)
25
+ * Fetcher: Add missing argument in debug log (#2665)
26
+
27
+ AdminClient
28
+ * KIP-430: Return Authorized Operations in Describe Responses (#2656)
29
+ * Add `send_request()` and `send_requests()` to KafkaAdminClient (#2649)
30
+
31
+ Maintenance
32
+ * Remove old/unused kafka.protocol.pickle (#2653)
33
+ * Switch protocol code to getattr/setattr from __dict__ (#2654)
34
+ * Drop unused imports (#2651)
35
+
36
+ Project Infra
37
+ * Bump github/codeql-action from 3 to 4 (#2678)
38
+ * Bump actions/setup-python from 5 to 6 (#2674)
39
+ * Bump actions/setup-java from 4 to 5 (#2673)
40
+ * Bump actions/checkout from 4 to 5 (#2669)
41
+ * Bump actions/checkout from 5 to 6 (#2694)
42
+ * NixOS helpers
11
43
 
12
44
  # 2.2.18 (Nov 20, 2025)
13
45
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kafka-python
3
- Version: 2.2.19
3
+ Version: 2.3.1
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
@@ -66,22 +66,11 @@ Python client for the Apache Kafka distributed stream processing system.
66
66
  kafka-python is designed to function much like the official java client, with a
67
67
  sprinkling of pythonic interfaces (e.g., consumer iterators).
68
68
 
69
- kafka-python is best used with newer brokers (0.9+), but is backwards-compatible with
70
- older versions (to 0.8.0). Some features will only be enabled on newer brokers.
71
- For example, fully coordinated consumer groups -- i.e., dynamic partition
72
- assignment to multiple consumers in the same group -- requires use of 0.9+ kafka
73
- brokers. Supporting this feature for earlier broker releases would require
74
- writing and maintaining custom leadership election and membership / health
75
- check code (perhaps using zookeeper or consul). For older brokers, you can
76
- achieve something similar by manually assigning different partitions to each
77
- consumer instance with config management tools like chef, ansible, etc. This
78
- approach will work fine, though it does not support rebalancing on failures.
79
- See https://kafka-python.readthedocs.io/en/master/compatibility.html
80
- for more details.
81
-
82
69
  Please note that the master branch may contain unreleased features. For release
83
70
  documentation, please see readthedocs and/or python's inline help.
84
71
 
72
+ New in 2.3 release: python -m kafka.* interfaces for quick scripts and testing.
73
+
85
74
  .. code-block:: bash
86
75
 
87
76
  $ pip install kafka-python
@@ -232,6 +221,14 @@ for more details.
232
221
  metrics = producer.metrics()
233
222
 
234
223
 
224
+ Module CLI Interface
225
+ ********************
226
+
227
+ kafka-python also provides simple command-line interfaces for consumer, producer, and admin clients.
228
+ Access via ``python -m kafka.consumer``, ``python -m kafka.producer``, and ``python -m kafka.admin``.
229
+ See https://kafka-python.readthedocs.io/en/master/usage.html for more details.
230
+
231
+
235
232
  Thread safety
236
233
  *************
237
234
 
@@ -22,22 +22,11 @@ Python client for the Apache Kafka distributed stream processing system.
22
22
  kafka-python is designed to function much like the official java client, with a
23
23
  sprinkling of pythonic interfaces (e.g., consumer iterators).
24
24
 
25
- kafka-python is best used with newer brokers (0.9+), but is backwards-compatible with
26
- older versions (to 0.8.0). Some features will only be enabled on newer brokers.
27
- For example, fully coordinated consumer groups -- i.e., dynamic partition
28
- assignment to multiple consumers in the same group -- requires use of 0.9+ kafka
29
- brokers. Supporting this feature for earlier broker releases would require
30
- writing and maintaining custom leadership election and membership / health
31
- check code (perhaps using zookeeper or consul). For older brokers, you can
32
- achieve something similar by manually assigning different partitions to each
33
- consumer instance with config management tools like chef, ansible, etc. This
34
- approach will work fine, though it does not support rebalancing on failures.
35
- See https://kafka-python.readthedocs.io/en/master/compatibility.html
36
- for more details.
37
-
38
25
  Please note that the master branch may contain unreleased features. For release
39
26
  documentation, please see readthedocs and/or python's inline help.
40
27
 
28
+ New in 2.3 release: python -m kafka.* interfaces for quick scripts and testing.
29
+
41
30
  .. code-block:: bash
42
31
 
43
32
  $ pip install kafka-python
@@ -188,6 +177,14 @@ for more details.
188
177
  metrics = producer.metrics()
189
178
 
190
179
 
180
+ Module CLI Interface
181
+ ********************
182
+
183
+ kafka-python also provides simple command-line interfaces for consumer, producer, and admin clients.
184
+ Access via ``python -m kafka.consumer``, ``python -m kafka.producer``, and ``python -m kafka.admin``.
185
+ See https://kafka-python.readthedocs.io/en/master/usage.html for more details.
186
+
187
+
191
188
  Thread safety
192
189
  *************
193
190
 
@@ -0,0 +1,5 @@
1
+ import sys
2
+
3
+ print("Available module interfaces: kafka.consumer, kafka.producer, kafka.admin")
4
+
5
+ sys.exit(1)
@@ -0,0 +1,7 @@
1
+ from __future__ import absolute_import
2
+
3
+ import sys
4
+
5
+ from kafka.cli.admin import run_cli
6
+
7
+ sys.exit(run_cli())
@@ -1,5 +1,4 @@
1
1
  from __future__ import absolute_import
2
- from kafka.errors import IllegalArgumentError
3
2
 
4
3
  # enum in stdlib as of py3.4
5
4
  try:
@@ -8,6 +7,8 @@ except ImportError:
8
7
  # vendored backport module
9
8
  from kafka.vendor.enum34 import IntEnum
10
9
 
10
+ from kafka.errors import IllegalArgumentError
11
+
11
12
 
12
13
  class ResourceType(IntEnum):
13
14
  """Type of kafka resource to set ACL for
@@ -30,6 +31,7 @@ class ACLOperation(IntEnum):
30
31
  The ANY value is only valid in a filter context
31
32
  """
32
33
 
34
+ UNKNOWN = 0,
33
35
  ANY = 1,
34
36
  ALL = 2,
35
37
  READ = 3,
@@ -41,7 +43,9 @@ class ACLOperation(IntEnum):
41
43
  CLUSTER_ACTION = 9,
42
44
  DESCRIBE_CONFIGS = 10,
43
45
  ALTER_CONFIGS = 11,
44
- IDEMPOTENT_WRITE = 12
46
+ IDEMPOTENT_WRITE = 12,
47
+ CREATE_TOKENS = 13,
48
+ DESCRIBE_TOKENS = 13
45
49
 
46
50
 
47
51
  class ACLPermissionType(IntEnum):
@@ -50,6 +54,7 @@ class ACLPermissionType(IntEnum):
50
54
  The ANY value is only valid in a filter context
51
55
  """
52
56
 
57
+ UNKNOWN = 0,
53
58
  ANY = 1,
54
59
  DENY = 2,
55
60
  ALLOW = 3
@@ -63,6 +68,7 @@ class ACLResourcePatternType(IntEnum):
63
68
  https://cwiki.apache.org/confluence/display/KAFKA/KIP-290%3A+Support+for+Prefixed+ACLs
64
69
  """
65
70
 
71
+ UNKNOWN = 0,
66
72
  ANY = 1,
67
73
  MATCH = 2,
68
74
  LITERAL = 3,
@@ -242,3 +248,7 @@ class ResourcePattern(ResourcePatternFilter):
242
248
  raise IllegalArgumentError(
243
249
  "pattern_type cannot be {} on a concrete ResourcePattern".format(self.pattern_type.name)
244
250
  )
251
+
252
+
253
+ def valid_acl_operations(int_vals):
254
+ return set([ACLOperation(v) for v in int_vals if v not in (0, 1, 2)])