From f570f8c833df09d597179208a1f6735d554611e9 Mon Sep 17 00:00:00 2001 From: Rasmus Nygren Date: Wed, 20 May 2026 21:02:24 +0200 Subject: [PATCH 1/5] Baseline kafka-python stubs --- pyrightconfig.stricter.json | 1 + stubs/kafka-python/METADATA.toml | 2 + stubs/kafka-python/kafka/__init__.pyi | 13 + stubs/kafka-python/kafka/admin/__init__.pyi | 30 + .../kafka-python/kafka/admin/acl_resource.pyi | 71 ++ stubs/kafka-python/kafka/admin/client.pyi | 29 + .../kafka/admin/config_resource.pyi | 12 + .../kafka/admin/new_partitions.pyi | 6 + stubs/kafka-python/kafka/admin/new_topic.pyi | 11 + .../kafka/benchmarks/__init__.pyi | 0 .../kafka/benchmarks/consumer_performance.pyi | 18 + .../kafka/benchmarks/load_example.pyi | 24 + .../kafka/benchmarks/producer_performance.pyi | 18 + .../kafka/benchmarks/record_batch_compose.pyi | 12 + .../kafka/benchmarks/record_batch_read.pyi | 13 + .../kafka/benchmarks/varint_speed.pyi | 17 + stubs/kafka-python/kafka/cli/__init__.pyi | 0 .../kafka-python/kafka/cli/admin/__init__.pyi | 3 + .../kafka/cli/admin/cluster/__init__.pyi | 3 + .../kafka/cli/admin/cluster/describe.pyi | 3 + .../kafka/cli/admin/configs/__init__.pyi | 3 + .../kafka/cli/admin/configs/describe.pyi | 5 + .../cli/admin/consumer_groups/__init__.pyi | 3 + .../cli/admin/consumer_groups/delete.pyi | 3 + .../cli/admin/consumer_groups/describe.pyi | 3 + .../kafka/cli/admin/consumer_groups/list.pyi | 3 + .../admin/consumer_groups/list_offsets.pyi | 3 + .../kafka/cli/admin/log_dirs/__init__.pyi | 3 + .../kafka/cli/admin/log_dirs/describe.pyi | 3 + .../kafka/cli/admin/topics/__init__.pyi | 3 + .../kafka/cli/admin/topics/create.pyi | 5 + .../kafka/cli/admin/topics/delete.pyi | 3 + .../kafka/cli/admin/topics/describe.pyi | 3 + .../kafka/cli/admin/topics/list.pyi | 3 + .../kafka/cli/consumer/__init__.pyi | 3 + .../kafka/cli/producer/__init__.pyi | 3 + stubs/kafka-python/kafka/client_async.pyi | 57 ++ stubs/kafka-python/kafka/cluster.pyi | 36 + stubs/kafka-python/kafka/codec.pyi | 25 + stubs/kafka-python/kafka/conn.pyi | 70 ++ .../kafka-python/kafka/consumer/__init__.pyi | 3 + stubs/kafka-python/kafka/consumer/fetcher.pyi | 148 ++++ stubs/kafka-python/kafka/consumer/group.pyi | 37 + .../kafka/consumer/subscription_state.pyi | 112 +++ .../kafka/coordinator/__init__.pyi | 0 .../kafka/coordinator/assignors/__init__.pyi | 0 .../kafka/coordinator/assignors/abstract.pyi | 15 + .../kafka/coordinator/assignors/range.pyi | 15 + .../coordinator/assignors/roundrobin.pyi | 15 + .../coordinator/assignors/sticky/__init__.pyi | 0 .../assignors/sticky/partition_movements.pyi | 18 + .../assignors/sticky/sorted_set.pyi | 13 + .../assignors/sticky/sticky_assignor.pyi | 59 ++ stubs/kafka-python/kafka/coordinator/base.pyi | 84 ++ .../kafka/coordinator/consumer.pyi | 31 + .../kafka/coordinator/heartbeat.pyi | 22 + .../kafka/coordinator/protocol.pyi | 17 + .../kafka/coordinator/subscription.pyi | 13 + stubs/kafka-python/kafka/errors.pyi | 822 ++++++++++++++++++ stubs/kafka-python/kafka/future.pyi | 19 + stubs/kafka-python/kafka/metrics/__init__.pyi | 10 + .../kafka/metrics/compound_stat.pyi | 13 + .../kafka/metrics/dict_reporter.pyi | 15 + .../kafka/metrics/kafka_metric.pyi | 13 + .../kafka-python/kafka/metrics/measurable.pyi | 9 + .../kafka/metrics/measurable_stat.pyi | 6 + .../kafka/metrics/metric_config.pyi | 13 + .../kafka/metrics/metric_name.pyi | 13 + stubs/kafka-python/kafka/metrics/metrics.pyi | 24 + .../kafka/metrics/metrics_reporter.pyi | 13 + stubs/kafka-python/kafka/metrics/quota.pyi | 13 + stubs/kafka-python/kafka/metrics/stat.pyi | 5 + .../kafka/metrics/stats/__init__.pyi | 12 + .../kafka-python/kafka/metrics/stats/avg.pyi | 6 + .../kafka/metrics/stats/count.pyi | 6 + .../kafka/metrics/stats/histogram.pyi | 21 + .../kafka/metrics/stats/max_stat.pyi | 6 + .../kafka/metrics/stats/min_stat.pyi | 6 + .../kafka/metrics/stats/percentile.pyi | 6 + .../kafka/metrics/stats/percentiles.pyi | 21 + .../kafka-python/kafka/metrics/stats/rate.pyi | 28 + .../kafka/metrics/stats/sampled_stat.pyi | 26 + .../kafka/metrics/stats/sensor.pyi | 10 + .../kafka/metrics/stats/total.pyi | 6 + .../kafka/partitioner/__init__.pyi | 3 + .../kafka/partitioner/default.pyi | 5 + .../kafka-python/kafka/producer/__init__.pyi | 3 + stubs/kafka-python/kafka/producer/future.pyi | 36 + stubs/kafka-python/kafka/producer/kafka.pyi | 24 + .../kafka/producer/producer_batch.pyi | 42 + .../kafka/producer/record_accumulator.pyi | 45 + stubs/kafka-python/kafka/producer/sender.pyi | 47 + .../kafka/producer/transaction_manager.pyi | 187 ++++ .../kafka-python/kafka/protocol/__init__.pyi | 3 + .../kafka-python/kafka/protocol/abstract.pyi | 9 + .../kafka/protocol/add_offsets_to_txn.pyi | 39 + .../kafka/protocol/add_partitions_to_txn.pyi | 39 + stubs/kafka-python/kafka/protocol/admin.pyi | 506 +++++++++++ stubs/kafka-python/kafka/protocol/api.pyi | 37 + .../kafka/protocol/api_versions.pyi | 70 ++ .../kafka/protocol/broker_api_versions.pyi | 3 + stubs/kafka-python/kafka/protocol/commit.pyi | 166 ++++ stubs/kafka-python/kafka/protocol/end_txn.pyi | 39 + stubs/kafka-python/kafka/protocol/fetch.pyi | 143 +++ .../kafka/protocol/find_coordinator.pyi | 39 + stubs/kafka-python/kafka/protocol/frame.pyi | 6 + stubs/kafka-python/kafka/protocol/group.pyi | 229 +++++ .../kafka/protocol/init_producer_id.pyi | 28 + .../kafka/protocol/list_offsets.pyi | 85 ++ stubs/kafka-python/kafka/protocol/message.pyi | 43 + .../kafka-python/kafka/protocol/metadata.pyi | 123 +++ .../protocol/offset_for_leader_epoch.pyi | 61 ++ stubs/kafka-python/kafka/protocol/parser.pyi | 11 + stubs/kafka-python/kafka/protocol/produce.pyi | 100 +++ .../kafka/protocol/sasl_authenticate.pyi | 28 + .../kafka/protocol/sasl_handshake.pyi | 28 + stubs/kafka-python/kafka/protocol/struct.pyi | 14 + .../kafka/protocol/txn_offset_commit.pyi | 39 + stubs/kafka-python/kafka/protocol/types.pyi | 115 +++ stubs/kafka-python/kafka/record/__init__.pyi | 3 + stubs/kafka-python/kafka/record/_crc32c.pyi | 8 + stubs/kafka-python/kafka/record/abc.pyi | 60 ++ .../kafka/record/default_records.pyi | 155 ++++ .../kafka/record/legacy_records.pyi | 86 ++ .../kafka/record/memory_records.pyi | 44 + stubs/kafka-python/kafka/record/util.pyi | 5 + stubs/kafka-python/kafka/sasl/__init__.pyi | 6 + stubs/kafka-python/kafka/sasl/abc.pyi | 14 + stubs/kafka-python/kafka/sasl/gssapi.pyi | 16 + stubs/kafka-python/kafka/sasl/msk.pyi | 33 + stubs/kafka-python/kafka/sasl/oauth.pyi | 23 + stubs/kafka-python/kafka/sasl/plain.pyi | 15 + stubs/kafka-python/kafka/sasl/scram.pyi | 40 + stubs/kafka-python/kafka/sasl/sspi.pyi | 17 + .../kafka/serializer/__init__.pyi | 1 + .../kafka/serializer/abstract.pyi | 15 + stubs/kafka-python/kafka/socks5_wrapper.pyi | 25 + stubs/kafka-python/kafka/structs.pyi | 53 ++ stubs/kafka-python/kafka/util.pyi | 38 + stubs/kafka-python/kafka/version.pyi | 1 + 140 files changed, 5323 insertions(+) create mode 100644 stubs/kafka-python/METADATA.toml create mode 100644 stubs/kafka-python/kafka/__init__.pyi create mode 100644 stubs/kafka-python/kafka/admin/__init__.pyi create mode 100644 stubs/kafka-python/kafka/admin/acl_resource.pyi create mode 100644 stubs/kafka-python/kafka/admin/client.pyi create mode 100644 stubs/kafka-python/kafka/admin/config_resource.pyi create mode 100644 stubs/kafka-python/kafka/admin/new_partitions.pyi create mode 100644 stubs/kafka-python/kafka/admin/new_topic.pyi create mode 100644 stubs/kafka-python/kafka/benchmarks/__init__.pyi create mode 100644 stubs/kafka-python/kafka/benchmarks/consumer_performance.pyi create mode 100644 stubs/kafka-python/kafka/benchmarks/load_example.pyi create mode 100644 stubs/kafka-python/kafka/benchmarks/producer_performance.pyi create mode 100644 stubs/kafka-python/kafka/benchmarks/record_batch_compose.pyi create mode 100644 stubs/kafka-python/kafka/benchmarks/record_batch_read.pyi create mode 100644 stubs/kafka-python/kafka/benchmarks/varint_speed.pyi create mode 100644 stubs/kafka-python/kafka/cli/__init__.pyi create mode 100644 stubs/kafka-python/kafka/cli/admin/__init__.pyi create mode 100644 stubs/kafka-python/kafka/cli/admin/cluster/__init__.pyi create mode 100644 stubs/kafka-python/kafka/cli/admin/cluster/describe.pyi create mode 100644 stubs/kafka-python/kafka/cli/admin/configs/__init__.pyi create mode 100644 stubs/kafka-python/kafka/cli/admin/configs/describe.pyi create mode 100644 stubs/kafka-python/kafka/cli/admin/consumer_groups/__init__.pyi create mode 100644 stubs/kafka-python/kafka/cli/admin/consumer_groups/delete.pyi create mode 100644 stubs/kafka-python/kafka/cli/admin/consumer_groups/describe.pyi create mode 100644 stubs/kafka-python/kafka/cli/admin/consumer_groups/list.pyi create mode 100644 stubs/kafka-python/kafka/cli/admin/consumer_groups/list_offsets.pyi create mode 100644 stubs/kafka-python/kafka/cli/admin/log_dirs/__init__.pyi create mode 100644 stubs/kafka-python/kafka/cli/admin/log_dirs/describe.pyi create mode 100644 stubs/kafka-python/kafka/cli/admin/topics/__init__.pyi create mode 100644 stubs/kafka-python/kafka/cli/admin/topics/create.pyi create mode 100644 stubs/kafka-python/kafka/cli/admin/topics/delete.pyi create mode 100644 stubs/kafka-python/kafka/cli/admin/topics/describe.pyi create mode 100644 stubs/kafka-python/kafka/cli/admin/topics/list.pyi create mode 100644 stubs/kafka-python/kafka/cli/consumer/__init__.pyi create mode 100644 stubs/kafka-python/kafka/cli/producer/__init__.pyi create mode 100644 stubs/kafka-python/kafka/client_async.pyi create mode 100644 stubs/kafka-python/kafka/cluster.pyi create mode 100644 stubs/kafka-python/kafka/codec.pyi create mode 100644 stubs/kafka-python/kafka/conn.pyi create mode 100644 stubs/kafka-python/kafka/consumer/__init__.pyi create mode 100644 stubs/kafka-python/kafka/consumer/fetcher.pyi create mode 100644 stubs/kafka-python/kafka/consumer/group.pyi create mode 100644 stubs/kafka-python/kafka/consumer/subscription_state.pyi create mode 100644 stubs/kafka-python/kafka/coordinator/__init__.pyi create mode 100644 stubs/kafka-python/kafka/coordinator/assignors/__init__.pyi create mode 100644 stubs/kafka-python/kafka/coordinator/assignors/abstract.pyi create mode 100644 stubs/kafka-python/kafka/coordinator/assignors/range.pyi create mode 100644 stubs/kafka-python/kafka/coordinator/assignors/roundrobin.pyi create mode 100644 stubs/kafka-python/kafka/coordinator/assignors/sticky/__init__.pyi create mode 100644 stubs/kafka-python/kafka/coordinator/assignors/sticky/partition_movements.pyi create mode 100644 stubs/kafka-python/kafka/coordinator/assignors/sticky/sorted_set.pyi create mode 100644 stubs/kafka-python/kafka/coordinator/assignors/sticky/sticky_assignor.pyi create mode 100644 stubs/kafka-python/kafka/coordinator/base.pyi create mode 100644 stubs/kafka-python/kafka/coordinator/consumer.pyi create mode 100644 stubs/kafka-python/kafka/coordinator/heartbeat.pyi create mode 100644 stubs/kafka-python/kafka/coordinator/protocol.pyi create mode 100644 stubs/kafka-python/kafka/coordinator/subscription.pyi create mode 100644 stubs/kafka-python/kafka/errors.pyi create mode 100644 stubs/kafka-python/kafka/future.pyi create mode 100644 stubs/kafka-python/kafka/metrics/__init__.pyi create mode 100644 stubs/kafka-python/kafka/metrics/compound_stat.pyi create mode 100644 stubs/kafka-python/kafka/metrics/dict_reporter.pyi create mode 100644 stubs/kafka-python/kafka/metrics/kafka_metric.pyi create mode 100644 stubs/kafka-python/kafka/metrics/measurable.pyi create mode 100644 stubs/kafka-python/kafka/metrics/measurable_stat.pyi create mode 100644 stubs/kafka-python/kafka/metrics/metric_config.pyi create mode 100644 stubs/kafka-python/kafka/metrics/metric_name.pyi create mode 100644 stubs/kafka-python/kafka/metrics/metrics.pyi create mode 100644 stubs/kafka-python/kafka/metrics/metrics_reporter.pyi create mode 100644 stubs/kafka-python/kafka/metrics/quota.pyi create mode 100644 stubs/kafka-python/kafka/metrics/stat.pyi create mode 100644 stubs/kafka-python/kafka/metrics/stats/__init__.pyi create mode 100644 stubs/kafka-python/kafka/metrics/stats/avg.pyi create mode 100644 stubs/kafka-python/kafka/metrics/stats/count.pyi create mode 100644 stubs/kafka-python/kafka/metrics/stats/histogram.pyi create mode 100644 stubs/kafka-python/kafka/metrics/stats/max_stat.pyi create mode 100644 stubs/kafka-python/kafka/metrics/stats/min_stat.pyi create mode 100644 stubs/kafka-python/kafka/metrics/stats/percentile.pyi create mode 100644 stubs/kafka-python/kafka/metrics/stats/percentiles.pyi create mode 100644 stubs/kafka-python/kafka/metrics/stats/rate.pyi create mode 100644 stubs/kafka-python/kafka/metrics/stats/sampled_stat.pyi create mode 100644 stubs/kafka-python/kafka/metrics/stats/sensor.pyi create mode 100644 stubs/kafka-python/kafka/metrics/stats/total.pyi create mode 100644 stubs/kafka-python/kafka/partitioner/__init__.pyi create mode 100644 stubs/kafka-python/kafka/partitioner/default.pyi create mode 100644 stubs/kafka-python/kafka/producer/__init__.pyi create mode 100644 stubs/kafka-python/kafka/producer/future.pyi create mode 100644 stubs/kafka-python/kafka/producer/kafka.pyi create mode 100644 stubs/kafka-python/kafka/producer/producer_batch.pyi create mode 100644 stubs/kafka-python/kafka/producer/record_accumulator.pyi create mode 100644 stubs/kafka-python/kafka/producer/sender.pyi create mode 100644 stubs/kafka-python/kafka/producer/transaction_manager.pyi create mode 100644 stubs/kafka-python/kafka/protocol/__init__.pyi create mode 100644 stubs/kafka-python/kafka/protocol/abstract.pyi create mode 100644 stubs/kafka-python/kafka/protocol/add_offsets_to_txn.pyi create mode 100644 stubs/kafka-python/kafka/protocol/add_partitions_to_txn.pyi create mode 100644 stubs/kafka-python/kafka/protocol/admin.pyi create mode 100644 stubs/kafka-python/kafka/protocol/api.pyi create mode 100644 stubs/kafka-python/kafka/protocol/api_versions.pyi create mode 100644 stubs/kafka-python/kafka/protocol/broker_api_versions.pyi create mode 100644 stubs/kafka-python/kafka/protocol/commit.pyi create mode 100644 stubs/kafka-python/kafka/protocol/end_txn.pyi create mode 100644 stubs/kafka-python/kafka/protocol/fetch.pyi create mode 100644 stubs/kafka-python/kafka/protocol/find_coordinator.pyi create mode 100644 stubs/kafka-python/kafka/protocol/frame.pyi create mode 100644 stubs/kafka-python/kafka/protocol/group.pyi create mode 100644 stubs/kafka-python/kafka/protocol/init_producer_id.pyi create mode 100644 stubs/kafka-python/kafka/protocol/list_offsets.pyi create mode 100644 stubs/kafka-python/kafka/protocol/message.pyi create mode 100644 stubs/kafka-python/kafka/protocol/metadata.pyi create mode 100644 stubs/kafka-python/kafka/protocol/offset_for_leader_epoch.pyi create mode 100644 stubs/kafka-python/kafka/protocol/parser.pyi create mode 100644 stubs/kafka-python/kafka/protocol/produce.pyi create mode 100644 stubs/kafka-python/kafka/protocol/sasl_authenticate.pyi create mode 100644 stubs/kafka-python/kafka/protocol/sasl_handshake.pyi create mode 100644 stubs/kafka-python/kafka/protocol/struct.pyi create mode 100644 stubs/kafka-python/kafka/protocol/txn_offset_commit.pyi create mode 100644 stubs/kafka-python/kafka/protocol/types.pyi create mode 100644 stubs/kafka-python/kafka/record/__init__.pyi create mode 100644 stubs/kafka-python/kafka/record/_crc32c.pyi create mode 100644 stubs/kafka-python/kafka/record/abc.pyi create mode 100644 stubs/kafka-python/kafka/record/default_records.pyi create mode 100644 stubs/kafka-python/kafka/record/legacy_records.pyi create mode 100644 stubs/kafka-python/kafka/record/memory_records.pyi create mode 100644 stubs/kafka-python/kafka/record/util.pyi create mode 100644 stubs/kafka-python/kafka/sasl/__init__.pyi create mode 100644 stubs/kafka-python/kafka/sasl/abc.pyi create mode 100644 stubs/kafka-python/kafka/sasl/gssapi.pyi create mode 100644 stubs/kafka-python/kafka/sasl/msk.pyi create mode 100644 stubs/kafka-python/kafka/sasl/oauth.pyi create mode 100644 stubs/kafka-python/kafka/sasl/plain.pyi create mode 100644 stubs/kafka-python/kafka/sasl/scram.pyi create mode 100644 stubs/kafka-python/kafka/sasl/sspi.pyi create mode 100644 stubs/kafka-python/kafka/serializer/__init__.pyi create mode 100644 stubs/kafka-python/kafka/serializer/abstract.pyi create mode 100644 stubs/kafka-python/kafka/socks5_wrapper.pyi create mode 100644 stubs/kafka-python/kafka/structs.pyi create mode 100644 stubs/kafka-python/kafka/util.pyi create mode 100644 stubs/kafka-python/kafka/version.pyi diff --git a/pyrightconfig.stricter.json b/pyrightconfig.stricter.json index 223f0b415e45..70d4de091b65 100644 --- a/pyrightconfig.stricter.json +++ b/pyrightconfig.stricter.json @@ -56,6 +56,7 @@ "stubs/icalendar/icalendar/timezone/provider.pyi", "stubs/jsonschema", "stubs/jwcrypto", + "stubs/kafka-python", "stubs/ldap3", "stubs/m3u8/m3u8/model.pyi", "stubs/Markdown", diff --git a/stubs/kafka-python/METADATA.toml b/stubs/kafka-python/METADATA.toml new file mode 100644 index 000000000000..2f06c1b96010 --- /dev/null +++ b/stubs/kafka-python/METADATA.toml @@ -0,0 +1,2 @@ +version = "2.3.*" +upstream-repository = "https://github.com/dpkp/kafka-python" diff --git a/stubs/kafka-python/kafka/__init__.pyi b/stubs/kafka-python/kafka/__init__.pyi new file mode 100644 index 000000000000..36252752f501 --- /dev/null +++ b/stubs/kafka-python/kafka/__init__.pyi @@ -0,0 +1,13 @@ +import logging + +from kafka.admin import KafkaAdminClient as KafkaAdminClient +from kafka.client_async import KafkaClient as KafkaClient +from kafka.conn import BrokerConnection as BrokerConnection +from kafka.consumer import KafkaConsumer as KafkaConsumer +from kafka.consumer.subscription_state import ConsumerRebalanceListener as ConsumerRebalanceListener +from kafka.producer import KafkaProducer as KafkaProducer + +__all__ = ["BrokerConnection", "ConsumerRebalanceListener", "KafkaAdminClient", "KafkaClient", "KafkaConsumer", "KafkaProducer"] + +class NullHandler(logging.Handler): + def emit(self, record) -> None: ... diff --git a/stubs/kafka-python/kafka/admin/__init__.pyi b/stubs/kafka-python/kafka/admin/__init__.pyi new file mode 100644 index 000000000000..d895bbf521e0 --- /dev/null +++ b/stubs/kafka-python/kafka/admin/__init__.pyi @@ -0,0 +1,30 @@ +from kafka.admin.acl_resource import ( + ACL as ACL, + ACLFilter as ACLFilter, + ACLOperation as ACLOperation, + ACLPermissionType as ACLPermissionType, + ACLResourcePatternType as ACLResourcePatternType, + ResourcePattern as ResourcePattern, + ResourcePatternFilter as ResourcePatternFilter, + ResourceType as ResourceType, +) +from kafka.admin.client import KafkaAdminClient as KafkaAdminClient +from kafka.admin.config_resource import ConfigResource as ConfigResource, ConfigResourceType as ConfigResourceType +from kafka.admin.new_partitions import NewPartitions as NewPartitions +from kafka.admin.new_topic import NewTopic as NewTopic + +__all__ = [ + "ConfigResource", + "ConfigResourceType", + "KafkaAdminClient", + "NewTopic", + "NewPartitions", + "ACL", + "ACLFilter", + "ResourcePattern", + "ResourcePatternFilter", + "ACLOperation", + "ResourceType", + "ACLPermissionType", + "ACLResourcePatternType", +] diff --git a/stubs/kafka-python/kafka/admin/acl_resource.pyi b/stubs/kafka-python/kafka/admin/acl_resource.pyi new file mode 100644 index 000000000000..10e9f1c76909 --- /dev/null +++ b/stubs/kafka-python/kafka/admin/acl_resource.pyi @@ -0,0 +1,71 @@ +from _typeshed import Incomplete +from enum import IntEnum + +class ResourceType(IntEnum): + UNKNOWN = 0 + ANY = 1 + CLUSTER = 4 + DELEGATION_TOKEN = 6 + GROUP = 3 + TOPIC = 2 + TRANSACTIONAL_ID = 5 + +class ACLOperation(IntEnum): + UNKNOWN = 0 + ANY = 1 + ALL = 2 + READ = 3 + WRITE = 4 + CREATE = 5 + DELETE = 6 + ALTER = 7 + DESCRIBE = 8 + CLUSTER_ACTION = 9 + DESCRIBE_CONFIGS = 10 + ALTER_CONFIGS = 11 + IDEMPOTENT_WRITE = 12 + CREATE_TOKENS = 13 + DESCRIBE_TOKENS = 13 + +class ACLPermissionType(IntEnum): + UNKNOWN = 0 + ANY = 1 + DENY = 2 + ALLOW = 3 + +class ACLResourcePatternType(IntEnum): + UNKNOWN = 0 + ANY = 1 + MATCH = 2 + LITERAL = 3 + PREFIXED = 4 + +class ACLFilter: + principal: Incomplete + host: Incomplete + operation: Incomplete + permission_type: Incomplete + resource_pattern: Incomplete + def __init__(self, principal, host, operation, permission_type, resource_pattern) -> None: ... + def validate(self) -> None: ... + def __eq__(self, other): ... + def __hash__(self): ... + +class ACL(ACLFilter): + def __init__(self, principal, host, operation, permission_type, resource_pattern) -> None: ... + def validate(self) -> None: ... + +class ResourcePatternFilter: + resource_type: Incomplete + resource_name: Incomplete + pattern_type: Incomplete + def __init__(self, resource_type, resource_name, pattern_type) -> None: ... + def validate(self) -> None: ... + def __eq__(self, other): ... + def __hash__(self): ... + +class ResourcePattern(ResourcePatternFilter): + def __init__(self, resource_type, resource_name, pattern_type=...) -> None: ... + def validate(self) -> None: ... + +def valid_acl_operations(int_vals): ... diff --git a/stubs/kafka-python/kafka/admin/client.pyi b/stubs/kafka-python/kafka/admin/client.pyi new file mode 100644 index 000000000000..1b25f4d08617 --- /dev/null +++ b/stubs/kafka-python/kafka/admin/client.pyi @@ -0,0 +1,29 @@ +from _typeshed import Incomplete + +log: Incomplete + +class KafkaAdminClient: + DEFAULT_CONFIG: Incomplete + config: Incomplete + def __init__(self, **configs) -> None: ... + def close(self) -> None: ... + def send_request(self, request, node_id=None): ... + def send_requests(self, requests_and_node_ids, response_fn=...): ... + def create_topics(self, new_topics, timeout_ms=None, validate_only: bool = False): ... + def delete_topics(self, topics, timeout_ms=None): ... + def list_topics(self): ... + def describe_topics(self, topics=None): ... + def describe_cluster(self): ... + def describe_acls(self, acl_filter): ... + def create_acls(self, acls): ... + def delete_acls(self, acl_filters): ... + def describe_configs(self, config_resources, include_synonyms: bool = False): ... + def alter_configs(self, config_resources): ... + def create_partitions(self, topic_partitions, timeout_ms=None, validate_only: bool = False): ... + def delete_records(self, records_to_delete, timeout_ms=None, partition_leader_id=None): ... + def describe_consumer_groups(self, group_ids, group_coordinator_id=None, include_authorized_operations: bool = False): ... + def list_consumer_groups(self, broker_ids=None): ... + def list_consumer_group_offsets(self, group_id, group_coordinator_id=None, partitions=None): ... + def delete_consumer_groups(self, group_ids, group_coordinator_id=None): ... + def perform_leader_election(self, election_type, topic_partitions=None, timeout_ms=None): ... + def describe_log_dirs(self): ... diff --git a/stubs/kafka-python/kafka/admin/config_resource.pyi b/stubs/kafka-python/kafka/admin/config_resource.pyi new file mode 100644 index 000000000000..38f451c78e1c --- /dev/null +++ b/stubs/kafka-python/kafka/admin/config_resource.pyi @@ -0,0 +1,12 @@ +from _typeshed import Incomplete +from enum import IntEnum + +class ConfigResourceType(IntEnum): + BROKER = 4 + TOPIC = 2 + +class ConfigResource: + resource_type: Incomplete + name: Incomplete + configs: Incomplete + def __init__(self, resource_type, name, configs=None) -> None: ... diff --git a/stubs/kafka-python/kafka/admin/new_partitions.pyi b/stubs/kafka-python/kafka/admin/new_partitions.pyi new file mode 100644 index 000000000000..aa061839f1c2 --- /dev/null +++ b/stubs/kafka-python/kafka/admin/new_partitions.pyi @@ -0,0 +1,6 @@ +from _typeshed import Incomplete + +class NewPartitions: + total_count: Incomplete + new_assignments: Incomplete + def __init__(self, total_count, new_assignments=None) -> None: ... diff --git a/stubs/kafka-python/kafka/admin/new_topic.pyi b/stubs/kafka-python/kafka/admin/new_topic.pyi new file mode 100644 index 000000000000..c2794b81e189 --- /dev/null +++ b/stubs/kafka-python/kafka/admin/new_topic.pyi @@ -0,0 +1,11 @@ +from _typeshed import Incomplete + +class NewTopic: + name: Incomplete + num_partitions: Incomplete + replication_factor: Incomplete + replica_assignments: Incomplete + topic_configs: Incomplete + def __init__( + self, name, num_partitions: int = -1, replication_factor: int = -1, replica_assignments=None, topic_configs=None + ) -> None: ... diff --git a/stubs/kafka-python/kafka/benchmarks/__init__.pyi b/stubs/kafka-python/kafka/benchmarks/__init__.pyi new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/stubs/kafka-python/kafka/benchmarks/consumer_performance.pyi b/stubs/kafka-python/kafka/benchmarks/consumer_performance.pyi new file mode 100644 index 000000000000..99a13accd26f --- /dev/null +++ b/stubs/kafka-python/kafka/benchmarks/consumer_performance.pyi @@ -0,0 +1,18 @@ +import threading +from _typeshed import Incomplete + +class ConsumerPerformance: + @staticmethod + def run(args) -> None: ... + +class StatsReporter(threading.Thread): + interval: Incomplete + consumer: Incomplete + event: Incomplete + raw_metrics: Incomplete + def __init__(self, interval, consumer, event=None, raw_metrics: bool = False) -> None: ... + def print_stats(self) -> None: ... + def print_final(self) -> None: ... + def run(self) -> None: ... + +def get_args_parser(): ... diff --git a/stubs/kafka-python/kafka/benchmarks/load_example.pyi b/stubs/kafka-python/kafka/benchmarks/load_example.pyi new file mode 100644 index 000000000000..28651aa44f86 --- /dev/null +++ b/stubs/kafka-python/kafka/benchmarks/load_example.pyi @@ -0,0 +1,24 @@ +import threading +from _typeshed import Incomplete + +class Producer(threading.Thread): + bootstrap_servers: Incomplete + topic: Incomplete + stop_event: Incomplete + big_msg: Incomplete + def __init__(self, bootstrap_servers, topic, stop_event, msg_size) -> None: ... + sent: int + def run(self) -> None: ... + +class Consumer(threading.Thread): + bootstrap_servers: Incomplete + topic: Incomplete + stop_event: Incomplete + msg_size: Incomplete + def __init__(self, bootstrap_servers, topic, stop_event, msg_size) -> None: ... + valid: int + invalid: int + def run(self) -> None: ... + +def get_args_parser(): ... +def main(args) -> None: ... diff --git a/stubs/kafka-python/kafka/benchmarks/producer_performance.pyi b/stubs/kafka-python/kafka/benchmarks/producer_performance.pyi new file mode 100644 index 000000000000..b4432d9f2719 --- /dev/null +++ b/stubs/kafka-python/kafka/benchmarks/producer_performance.pyi @@ -0,0 +1,18 @@ +import threading +from _typeshed import Incomplete + +class ProducerPerformance: + @staticmethod + def run(args) -> None: ... + +class StatsReporter(threading.Thread): + interval: Incomplete + producer: Incomplete + event: Incomplete + raw_metrics: Incomplete + def __init__(self, interval, producer, event=None, raw_metrics: bool = False) -> None: ... + def print_stats(self) -> None: ... + def print_final(self) -> None: ... + def run(self) -> None: ... + +def get_args_parser(): ... diff --git a/stubs/kafka-python/kafka/benchmarks/record_batch_compose.pyi b/stubs/kafka-python/kafka/benchmarks/record_batch_compose.pyi new file mode 100644 index 000000000000..edbc7e4294c8 --- /dev/null +++ b/stubs/kafka-python/kafka/benchmarks/record_batch_compose.pyi @@ -0,0 +1,12 @@ +from _typeshed import Incomplete + +DEFAULT_BATCH_SIZE: Incomplete +KEY_SIZE: int +VALUE_SIZE: int +TIMESTAMP_RANGE: Incomplete +MESSAGES_PER_BATCH: int + +def random_bytes(length): ... +def prepare(): ... +def finalize(results) -> None: ... +def func(loops, magic): ... diff --git a/stubs/kafka-python/kafka/benchmarks/record_batch_read.pyi b/stubs/kafka-python/kafka/benchmarks/record_batch_read.pyi new file mode 100644 index 000000000000..229763854f91 --- /dev/null +++ b/stubs/kafka-python/kafka/benchmarks/record_batch_read.pyi @@ -0,0 +1,13 @@ +from _typeshed import Incomplete + +DEFAULT_BATCH_SIZE: Incomplete +KEY_SIZE: int +VALUE_SIZE: int +TIMESTAMP_RANGE: Incomplete +BATCH_SAMPLES: int +MESSAGES_PER_BATCH: int + +def random_bytes(length): ... +def prepare(magic): ... +def finalize(results) -> None: ... +def func(loops, magic): ... diff --git a/stubs/kafka-python/kafka/benchmarks/varint_speed.pyi b/stubs/kafka-python/kafka/benchmarks/varint_speed.pyi new file mode 100644 index 000000000000..8c2a5962d7de --- /dev/null +++ b/stubs/kafka-python/kafka/benchmarks/varint_speed.pyi @@ -0,0 +1,17 @@ +from _typeshed import Incomplete + +test_data: Incomplete +BENCH_VALUES_ENC: Incomplete +BENCH_VALUES_DEC: Incomplete + +def encode_varint_1(num): ... +def encode_varint_2(value, int2byte=...): ... +def encode_varint_3(value, buf): ... +def encode_varint_4(value, int2byte=...): ... +def encode_varint_5(value, buf, pos: int = 0): ... +def encode_varint_6(value, buf): ... +def size_of_varint_1(value): ... +def size_of_varint_2(value): ... +def decode_varint_1(buffer, pos: int = 0): ... +def decode_varint_2(buffer, pos: int = 0): ... +def decode_varint_3(buffer, pos: int = 0): ... diff --git a/stubs/kafka-python/kafka/cli/__init__.pyi b/stubs/kafka-python/kafka/cli/__init__.pyi new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/stubs/kafka-python/kafka/cli/admin/__init__.pyi b/stubs/kafka-python/kafka/cli/admin/__init__.pyi new file mode 100644 index 000000000000..50eefc19daa8 --- /dev/null +++ b/stubs/kafka-python/kafka/cli/admin/__init__.pyi @@ -0,0 +1,3 @@ +def main_parser(): ... +def build_kwargs(props): ... +def run_cli(args=None): ... diff --git a/stubs/kafka-python/kafka/cli/admin/cluster/__init__.pyi b/stubs/kafka-python/kafka/cli/admin/cluster/__init__.pyi new file mode 100644 index 000000000000..3a1217ed3605 --- /dev/null +++ b/stubs/kafka-python/kafka/cli/admin/cluster/__init__.pyi @@ -0,0 +1,3 @@ +class ClusterSubCommand: + @classmethod + def add_subparser(cls, subparsers): ... diff --git a/stubs/kafka-python/kafka/cli/admin/cluster/describe.pyi b/stubs/kafka-python/kafka/cli/admin/cluster/describe.pyi new file mode 100644 index 000000000000..d68bcbed33cb --- /dev/null +++ b/stubs/kafka-python/kafka/cli/admin/cluster/describe.pyi @@ -0,0 +1,3 @@ +class DescribeCluster: + @classmethod + def add_subparser(cls, subparsers): ... diff --git a/stubs/kafka-python/kafka/cli/admin/configs/__init__.pyi b/stubs/kafka-python/kafka/cli/admin/configs/__init__.pyi new file mode 100644 index 000000000000..bf9567add55a --- /dev/null +++ b/stubs/kafka-python/kafka/cli/admin/configs/__init__.pyi @@ -0,0 +1,3 @@ +class ConfigsSubCommand: + @classmethod + def add_subparser(cls, subparsers): ... diff --git a/stubs/kafka-python/kafka/cli/admin/configs/describe.pyi b/stubs/kafka-python/kafka/cli/admin/configs/describe.pyi new file mode 100644 index 000000000000..175fad7af132 --- /dev/null +++ b/stubs/kafka-python/kafka/cli/admin/configs/describe.pyi @@ -0,0 +1,5 @@ +class DescribeConfigs: + @classmethod + def add_subparser(cls, subparsers) -> None: ... + @classmethod + def command(cls, client, args): ... diff --git a/stubs/kafka-python/kafka/cli/admin/consumer_groups/__init__.pyi b/stubs/kafka-python/kafka/cli/admin/consumer_groups/__init__.pyi new file mode 100644 index 000000000000..782b1765b411 --- /dev/null +++ b/stubs/kafka-python/kafka/cli/admin/consumer_groups/__init__.pyi @@ -0,0 +1,3 @@ +class ConsumerGroupsSubCommand: + @classmethod + def add_subparser(cls, subparsers): ... diff --git a/stubs/kafka-python/kafka/cli/admin/consumer_groups/delete.pyi b/stubs/kafka-python/kafka/cli/admin/consumer_groups/delete.pyi new file mode 100644 index 000000000000..90e373374fc5 --- /dev/null +++ b/stubs/kafka-python/kafka/cli/admin/consumer_groups/delete.pyi @@ -0,0 +1,3 @@ +class DeleteConsumerGroups: + @classmethod + def add_subparser(cls, subparsers): ... diff --git a/stubs/kafka-python/kafka/cli/admin/consumer_groups/describe.pyi b/stubs/kafka-python/kafka/cli/admin/consumer_groups/describe.pyi new file mode 100644 index 000000000000..ce25bc8a0d33 --- /dev/null +++ b/stubs/kafka-python/kafka/cli/admin/consumer_groups/describe.pyi @@ -0,0 +1,3 @@ +class DescribeConsumerGroups: + @classmethod + def add_subparser(cls, subparsers): ... diff --git a/stubs/kafka-python/kafka/cli/admin/consumer_groups/list.pyi b/stubs/kafka-python/kafka/cli/admin/consumer_groups/list.pyi new file mode 100644 index 000000000000..9e16c1de775f --- /dev/null +++ b/stubs/kafka-python/kafka/cli/admin/consumer_groups/list.pyi @@ -0,0 +1,3 @@ +class ListConsumerGroups: + @classmethod + def add_subparser(cls, subparsers): ... diff --git a/stubs/kafka-python/kafka/cli/admin/consumer_groups/list_offsets.pyi b/stubs/kafka-python/kafka/cli/admin/consumer_groups/list_offsets.pyi new file mode 100644 index 000000000000..e175d4510b08 --- /dev/null +++ b/stubs/kafka-python/kafka/cli/admin/consumer_groups/list_offsets.pyi @@ -0,0 +1,3 @@ +class ListConsumerGroupOffsets: + @classmethod + def add_subparser(cls, subparsers): ... diff --git a/stubs/kafka-python/kafka/cli/admin/log_dirs/__init__.pyi b/stubs/kafka-python/kafka/cli/admin/log_dirs/__init__.pyi new file mode 100644 index 000000000000..a42ac1f93a4e --- /dev/null +++ b/stubs/kafka-python/kafka/cli/admin/log_dirs/__init__.pyi @@ -0,0 +1,3 @@ +class LogDirsSubCommand: + @classmethod + def add_subparser(cls, subparsers): ... diff --git a/stubs/kafka-python/kafka/cli/admin/log_dirs/describe.pyi b/stubs/kafka-python/kafka/cli/admin/log_dirs/describe.pyi new file mode 100644 index 000000000000..a9ab6d5a7bc9 --- /dev/null +++ b/stubs/kafka-python/kafka/cli/admin/log_dirs/describe.pyi @@ -0,0 +1,3 @@ +class DescribeLogDirs: + @classmethod + def add_subparser(cls, subparsers): ... diff --git a/stubs/kafka-python/kafka/cli/admin/topics/__init__.pyi b/stubs/kafka-python/kafka/cli/admin/topics/__init__.pyi new file mode 100644 index 000000000000..0345a054a456 --- /dev/null +++ b/stubs/kafka-python/kafka/cli/admin/topics/__init__.pyi @@ -0,0 +1,3 @@ +class TopicsSubCommand: + @classmethod + def add_subparser(cls, subparsers): ... diff --git a/stubs/kafka-python/kafka/cli/admin/topics/create.pyi b/stubs/kafka-python/kafka/cli/admin/topics/create.pyi new file mode 100644 index 000000000000..2902efef9999 --- /dev/null +++ b/stubs/kafka-python/kafka/cli/admin/topics/create.pyi @@ -0,0 +1,5 @@ +class CreateTopic: + @classmethod + def add_subparser(cls, subparsers) -> None: ... + @classmethod + def command(cls, client, args): ... diff --git a/stubs/kafka-python/kafka/cli/admin/topics/delete.pyi b/stubs/kafka-python/kafka/cli/admin/topics/delete.pyi new file mode 100644 index 000000000000..128a5c51365e --- /dev/null +++ b/stubs/kafka-python/kafka/cli/admin/topics/delete.pyi @@ -0,0 +1,3 @@ +class DeleteTopic: + @classmethod + def add_subparser(cls, subparsers): ... diff --git a/stubs/kafka-python/kafka/cli/admin/topics/describe.pyi b/stubs/kafka-python/kafka/cli/admin/topics/describe.pyi new file mode 100644 index 000000000000..ab0ec7438f58 --- /dev/null +++ b/stubs/kafka-python/kafka/cli/admin/topics/describe.pyi @@ -0,0 +1,3 @@ +class DescribeTopics: + @classmethod + def add_subparser(cls, subparsers): ... diff --git a/stubs/kafka-python/kafka/cli/admin/topics/list.pyi b/stubs/kafka-python/kafka/cli/admin/topics/list.pyi new file mode 100644 index 000000000000..b23a865b72e4 --- /dev/null +++ b/stubs/kafka-python/kafka/cli/admin/topics/list.pyi @@ -0,0 +1,3 @@ +class ListTopics: + @classmethod + def add_subparser(cls, subparsers): ... diff --git a/stubs/kafka-python/kafka/cli/consumer/__init__.pyi b/stubs/kafka-python/kafka/cli/consumer/__init__.pyi new file mode 100644 index 000000000000..50eefc19daa8 --- /dev/null +++ b/stubs/kafka-python/kafka/cli/consumer/__init__.pyi @@ -0,0 +1,3 @@ +def main_parser(): ... +def build_kwargs(props): ... +def run_cli(args=None): ... diff --git a/stubs/kafka-python/kafka/cli/producer/__init__.pyi b/stubs/kafka-python/kafka/cli/producer/__init__.pyi new file mode 100644 index 000000000000..50eefc19daa8 --- /dev/null +++ b/stubs/kafka-python/kafka/cli/producer/__init__.pyi @@ -0,0 +1,3 @@ +def main_parser(): ... +def build_kwargs(props): ... +def run_cli(args=None): ... diff --git a/stubs/kafka-python/kafka/client_async.pyi b/stubs/kafka-python/kafka/client_async.pyi new file mode 100644 index 000000000000..b1b456ad7845 --- /dev/null +++ b/stubs/kafka-python/kafka/client_async.pyi @@ -0,0 +1,57 @@ +from _typeshed import Incomplete + +log: Incomplete +socketpair: Incomplete + +class KafkaClient: + DEFAULT_CONFIG: Incomplete + config: Incomplete + cluster: Incomplete + def __init__(self, **configs) -> None: ... + def maybe_connect(self, node_id, wakeup: bool = True): ... + def connection_failed(self, node_id): ... + def ready(self, node_id, metadata_priority: bool = True): ... + def connected(self, node_id): ... + def close(self, node_id=None) -> None: ... + def __del__(self) -> None: ... + def is_disconnected(self, node_id): ... + def connection_delay(self, node_id): ... + def throttle_delay(self, node_id): ... + def is_ready(self, node_id, metadata_priority: bool = True): ... + def send(self, node_id, request, wakeup: bool = True, request_timeout_ms=None): ... + def poll(self, timeout_ms=None, future=None): ... + def in_flight_request_count(self, node_id=None): ... + def least_loaded_node(self): ... + def least_loaded_node_refresh_ms(self): ... + def set_topics(self, topics): ... + def add_topic(self, topic): ... + def get_api_versions(self): ... + def check_version(self, node_id=None, timeout=None, **kwargs): ... + def api_version(self, operation, max_version=None): ... + def wakeup(self) -> None: ... + def bootstrap_connected(self): ... + def await_ready(self, node_id, timeout_ms: int = 30000): ... + def send_and_receive(self, node_id, request): ... + +OrderedDict = dict + +class IdleConnectionManager: + connections_max_idle: Incomplete + next_idle_close_check_time: Incomplete + lru_connections: Incomplete + def __init__(self, connections_max_idle_ms) -> None: ... + def update(self, conn_id) -> None: ... + def remove(self, conn_id) -> None: ... + def is_expired(self, conn_id): ... + def next_check_ms(self): ... + def update_next_idle_close_check_time(self, ts) -> None: ... + def poll_expired_connection(self): ... + +class KafkaClientMetrics: + metrics: Incomplete + metric_group_name: Incomplete + connection_closed: Incomplete + connection_created: Incomplete + select_time: Incomplete + io_time: Incomplete + def __init__(self, metrics, metric_group_prefix, conns) -> None: ... diff --git a/stubs/kafka-python/kafka/cluster.pyi b/stubs/kafka-python/kafka/cluster.pyi new file mode 100644 index 000000000000..bcfab555ca99 --- /dev/null +++ b/stubs/kafka-python/kafka/cluster.pyi @@ -0,0 +1,36 @@ +from _typeshed import Incomplete + +log: Incomplete + +class ClusterMetadata: + DEFAULT_CONFIG: Incomplete + need_all_topic_metadata: bool + unauthorized_topics: Incomplete + internal_topics: Incomplete + controller: Incomplete + cluster_id: Incomplete + config: Incomplete + def __init__(self, **configs) -> None: ... + def is_bootstrap(self, node_id): ... + def brokers(self): ... + def broker_metadata(self, broker_id): ... + def partitions_for_topic(self, topic): ... + def available_partitions_for_topic(self, topic): ... + def leader_for_partition(self, partition): ... + def leader_epoch_for_partition(self, partition): ... + def partitions_for_broker(self, broker_id): ... + def coordinator_for_group(self, group): ... + def ttl(self): ... + def refresh_backoff(self): ... + def request_update(self): ... + @property + def need_update(self): ... + def topics(self, exclude_internal_topics: bool = True): ... + def failed_update(self, exception) -> None: ... + def update_metadata(self, metadata): ... + def add_listener(self, listener) -> None: ... + def remove_listener(self, listener) -> None: ... + def add_coordinator(self, response, coord_type, coord_key): ... + def with_partitions(self, partitions_to_add): ... + +def collect_hosts(hosts, randomize: bool = True): ... diff --git a/stubs/kafka-python/kafka/codec.pyi b/stubs/kafka-python/kafka/codec.pyi new file mode 100644 index 000000000000..fcd6af14d29d --- /dev/null +++ b/stubs/kafka-python/kafka/codec.pyi @@ -0,0 +1,25 @@ +from _typeshed import Incomplete + +ZSTD_MAX_OUTPUT_SIZE: Incomplete +PYPY: Incomplete + +def has_gzip(): ... +def has_snappy(): ... +def has_zstd(): ... +def has_lz4(): ... +def gzip_encode(payload, compresslevel=None): ... +def gzip_decode(payload): ... +def snappy_encode(payload, xerial_compatible: bool = True, xerial_blocksize=32768): ... +def snappy_decode(payload): ... + +lz4_encode: Incomplete + +def lz4f_decode(payload): ... + +lz4_decode: Incomplete +lz4_decode = lz4f_decode + +def lz4_encode_old_kafka(payload): ... +def lz4_decode_old_kafka(payload): ... +def zstd_encode(payload): ... +def zstd_decode(payload): ... diff --git a/stubs/kafka-python/kafka/conn.pyi b/stubs/kafka-python/kafka/conn.pyi new file mode 100644 index 000000000000..dd7d99adbc3a --- /dev/null +++ b/stubs/kafka-python/kafka/conn.pyi @@ -0,0 +1,70 @@ +import ssl +from _typeshed import Incomplete + +log: Incomplete +DEFAULT_KAFKA_PORT: int +ssl_available: bool +SSLEOFError = ssl.SSLEOFError +SSLWantReadError = ssl.SSLWantReadError +SSLWantWriteError = ssl.SSLWantWriteError +SSLZeroReturnError = ssl.SSLZeroReturnError + +AFI_NAMES: Incomplete + +class ConnectionStates: + DISCONNECTED: str + CONNECTING: str + HANDSHAKE: str + CONNECTED: str + AUTHENTICATING: str + API_VERSIONS_SEND: str + API_VERSIONS_RECV: str + +class BrokerConnection: + DEFAULT_CONFIG: Incomplete + SECURITY_PROTOCOLS: Incomplete + VERSION_CHECKS: Incomplete + host: Incomplete + port: Incomplete + afi: Incomplete + config: Incomplete + node_id: Incomplete + in_flight_requests: Incomplete + state: Incomplete + last_attempt: int + def __init__(self, host, port, afi, **configs) -> None: ... + def connect_blocking(self, timeout=...): ... + def connect(self): ... + def blacked_out(self): ... + def throttled(self): ... + def throttle_delay(self): ... + def connection_delay(self): ... + def connected(self): ... + def connecting(self): ... + def initializing(self): ... + def disconnected(self): ... + def connect_failed(self): ... + def __del__(self) -> None: ... + def close(self, error=None) -> None: ... + def send(self, request, blocking: bool = True, request_timeout_ms=None): ... + def send_pending_requests(self): ... + def send_pending_requests_v2(self): ... + def can_send_more(self): ... + def recv(self): ... + def requests_timed_out(self): ... + def timed_out_ifrs(self): ... + def next_ifr_request_timeout_ms(self): ... + def get_api_versions(self): ... + def check_version(self, timeout: int = 2, **kwargs): ... + +class BrokerConnectionMetrics: + metrics: Incomplete + bytes_sent: Incomplete + bytes_received: Incomplete + request_time: Incomplete + throttle_time: Incomplete + def __init__(self, metrics, metric_group_prefix, node_id) -> None: ... + +def get_ip_port_afi(host_and_port_str): ... +def is_inet_4_or_6(gai): ... +def dns_lookup(host, port, afi=...): ... diff --git a/stubs/kafka-python/kafka/consumer/__init__.pyi b/stubs/kafka-python/kafka/consumer/__init__.pyi new file mode 100644 index 000000000000..6830e557ab8b --- /dev/null +++ b/stubs/kafka-python/kafka/consumer/__init__.pyi @@ -0,0 +1,3 @@ +from kafka.consumer.group import KafkaConsumer as KafkaConsumer + +__all__ = ["KafkaConsumer"] diff --git a/stubs/kafka-python/kafka/consumer/fetcher.pyi b/stubs/kafka-python/kafka/consumer/fetcher.pyi new file mode 100644 index 000000000000..42addaaca938 --- /dev/null +++ b/stubs/kafka-python/kafka/consumer/fetcher.pyi @@ -0,0 +1,148 @@ +from _typeshed import Incomplete +from typing import NamedTuple + +import kafka.errors as Errors + +log: Incomplete +READ_UNCOMMITTED: int +READ_COMMITTED: int +ISOLATION_LEVEL_CONFIG: Incomplete + +class ConsumerRecord(NamedTuple): + topic: Incomplete + partition: Incomplete + leader_epoch: Incomplete + offset: Incomplete + timestamp: Incomplete + timestamp_type: Incomplete + key: Incomplete + value: Incomplete + headers: Incomplete + checksum: Incomplete + serialized_key_size: Incomplete + serialized_value_size: Incomplete + serialized_header_size: Incomplete + +class CompletedFetch(NamedTuple): + topic_partition: Incomplete + fetched_offset: Incomplete + response_version: Incomplete + partition_data: Incomplete + metric_aggregator: Incomplete + +class ExceptionMetadata(NamedTuple): + partition: Incomplete + fetched_offset: Incomplete + exception: Incomplete + +class NoOffsetForPartitionError(Errors.KafkaError): ... +class RecordTooLargeError(Errors.KafkaError): ... + +class Fetcher: + DEFAULT_CONFIG: Incomplete + config: Incomplete + def __init__(self, client, subscriptions, **configs) -> None: ... + def send_fetches(self): ... + def in_flight_fetches(self): ... + def reset_offsets_if_needed(self): ... + def offsets_by_times(self, timestamps, timeout_ms=None): ... + def beginning_offsets(self, partitions, timeout_ms): ... + def end_offsets(self, partitions, timeout_ms): ... + def beginning_or_end_offset(self, partitions, timestamp, timeout_ms): ... + def fetched_records(self, max_records=None, update_offsets: bool = True): ... + def close(self) -> None: ... + + class PartitionRecords: + fetch_offset: Incomplete + topic_partition: Incomplete + leader_epoch: int + next_fetch_offset: Incomplete + bytes_read: int + records_read: int + isolation_level: Incomplete + aborted_producer_ids: Incomplete + aborted_transactions: Incomplete + metric_aggregator: Incomplete + check_crcs: Incomplete + record_iterator: Incomplete + on_drain: Incomplete + def __init__( + self, + fetch_offset, + tp, + records, + key_deserializer=None, + value_deserializer=None, + check_crcs: bool = True, + isolation_level=0, + aborted_transactions=None, + metric_aggregator=None, + on_drain=..., + ) -> None: ... + def __bool__(self) -> bool: ... + __nonzero__ = __bool__ + def drain(self) -> None: ... + def take(self, n=None): ... + +class FetchSessionHandler: + node_id: Incomplete + next_metadata: Incomplete + session_partitions: Incomplete + def __init__(self, node_id) -> None: ... + def build_next(self, next_partitions): ... + def handle_response(self, response): ... + def handle_error(self, _exception) -> None: ... + +class FetchMetadata: + MAX_EPOCH: int + INVALID_SESSION_ID: int + THROTTLED_SESSION_ID: int + INITIAL_EPOCH: int + FINAL_EPOCH: int + session_id: Incomplete + epoch: Incomplete + def __init__(self, session_id, epoch) -> None: ... + @property + def is_full(self): ... + @classmethod + def next_epoch(cls, prev_epoch): ... + def next_close_existing(self): ... + @classmethod + def new_incremental(cls, session_id): ... + def next_incremental(self): ... + +class FetchRequestData: + def __init__(self, to_send, to_forget, metadata) -> None: ... + @property + def metadata(self): ... + @property + def id(self): ... + @property + def epoch(self): ... + @property + def to_send(self): ... + @property + def to_forget(self): ... + +class FetchMetrics: + total_bytes: int + total_records: int + def __init__(self) -> None: ... + +class FetchResponseMetricAggregator: + sensors: Incomplete + unrecorded_partitions: Incomplete + fetch_metrics: Incomplete + topic_fetch_metrics: Incomplete + def __init__(self, sensors, partitions) -> None: ... + def record(self, partition, num_bytes, num_records) -> None: ... + +class FetchManagerMetrics: + metrics: Incomplete + group_name: Incomplete + bytes_fetched: Incomplete + records_fetched: Incomplete + fetch_latency: Incomplete + records_fetch_lag: Incomplete + def __init__(self, metrics, prefix) -> None: ... + def record_topic_fetch_metrics(self, topic, num_bytes, num_records) -> None: ... diff --git a/stubs/kafka-python/kafka/consumer/group.pyi b/stubs/kafka-python/kafka/consumer/group.pyi new file mode 100644 index 000000000000..9645166cc57c --- /dev/null +++ b/stubs/kafka-python/kafka/consumer/group.pyi @@ -0,0 +1,37 @@ +from _typeshed import Incomplete +from collections.abc import Iterator + +log: Incomplete + +class KafkaConsumer(Iterator[Incomplete]): + DEFAULT_CONFIG: Incomplete + DEFAULT_SESSION_TIMEOUT_MS_0_9: int + config: Incomplete + def __init__(self, *topics, **configs) -> None: ... + def bootstrap_connected(self): ... + def assign(self, partitions) -> None: ... + def assignment(self): ... + def close(self, autocommit: bool = True, timeout_ms=None) -> None: ... + def commit_async(self, offsets=None, callback=None): ... + def commit(self, offsets=None, timeout_ms=None) -> None: ... + def committed(self, partition, metadata: bool = False, timeout_ms=None): ... + def topics(self): ... + def partitions_for_topic(self, topic): ... + def poll(self, timeout_ms: int = 0, max_records=None, update_offsets: bool = True): ... + def position(self, partition, timeout_ms=None): ... + def highwater(self, partition): ... + def pause(self, *partitions) -> None: ... + def paused(self): ... + def resume(self, *partitions) -> None: ... + def seek(self, partition, offset) -> None: ... + def seek_to_beginning(self, *partitions) -> None: ... + def seek_to_end(self, *partitions) -> None: ... + def subscribe(self, topics=(), pattern=None, listener=None) -> None: ... + def subscription(self): ... + def unsubscribe(self) -> None: ... + def metrics(self, raw: bool = False): ... + def offsets_for_times(self, timestamps): ... + def beginning_offsets(self, partitions): ... + def end_offsets(self, partitions): ... + def __iter__(self): ... + def __next__(self): ... diff --git a/stubs/kafka-python/kafka/consumer/subscription_state.pyi b/stubs/kafka-python/kafka/consumer/subscription_state.pyi new file mode 100644 index 000000000000..e085b78873cf --- /dev/null +++ b/stubs/kafka-python/kafka/consumer/subscription_state.pyi @@ -0,0 +1,112 @@ +import abc +from _typeshed import Incomplete +from enum import IntEnum + +from kafka.util import synchronized + +log: Incomplete + +class SubscriptionType(IntEnum): + NONE = 0 + AUTO_TOPICS = 1 + AUTO_PATTERN = 2 + USER_ASSIGNED = 3 + +class SubscriptionState: + subscription: Incomplete + subscription_type: Incomplete + subscribed_pattern: Incomplete + assignment: Incomplete + rebalance_listener: Incomplete + listeners: Incomplete + def __init__(self, offset_reset_strategy: str = "earliest") -> None: ... + @synchronized + def subscribe(self, topics=(), pattern=None, listener=None) -> None: ... + @synchronized + def change_subscription(self, topics) -> None: ... + @synchronized + def group_subscribe(self, topics) -> None: ... + @synchronized + def reset_group_subscription(self) -> None: ... + @synchronized + def assign_from_user(self, partitions) -> None: ... + @synchronized + def assign_from_subscribed(self, assignments) -> None: ... + @synchronized + def unsubscribe(self) -> None: ... + @synchronized + def group_subscription(self): ... + @synchronized + def seek(self, partition, offset) -> None: ... + @synchronized + def assigned_partitions(self): ... + @synchronized + def paused_partitions(self): ... + @synchronized + def fetchable_partitions(self): ... + @synchronized + def partitions_auto_assigned(self): ... + @synchronized + def all_consumed_offsets(self): ... + @synchronized + def request_offset_reset(self, partition, offset_reset_strategy=None) -> None: ... + @synchronized + def set_reset_pending(self, partitions, next_allowed_reset_time) -> None: ... + @synchronized + def has_default_offset_reset_policy(self): ... + @synchronized + def is_offset_reset_needed(self, partition): ... + @synchronized + def has_all_fetch_positions(self): ... + @synchronized + def missing_fetch_positions(self): ... + @synchronized + def has_valid_position(self, partition): ... + @synchronized + def reset_missing_positions(self) -> None: ... + @synchronized + def partitions_needing_reset(self): ... + @synchronized + def is_assigned(self, partition): ... + @synchronized + def is_paused(self, partition): ... + @synchronized + def is_fetchable(self, partition): ... + @synchronized + def pause(self, partition) -> None: ... + @synchronized + def resume(self, partition) -> None: ... + @synchronized + def reset_failed(self, partitions, next_retry_time) -> None: ... + @synchronized + def move_partition_to_end(self, partition) -> None: ... + @synchronized + def position(self, partition): ... + +class TopicPartitionState: + paused: bool + reset_strategy: Incomplete + highwater: Incomplete + drop_pending_record_batch: bool + next_allowed_retry_time: Incomplete + def __init__(self) -> None: ... + position: Incomplete + def reset(self, strategy) -> None: ... + def is_reset_allowed(self): ... + @property + def awaiting_reset(self): ... + def set_reset_pending(self, next_allowed_retry_time) -> None: ... + def reset_failed(self, next_allowed_retry_time) -> None: ... + @property + def has_valid_position(self): ... + def is_missing_position(self): ... + def seek(self, offset) -> None: ... + def pause(self) -> None: ... + def resume(self) -> None: ... + def is_fetchable(self): ... + +class ConsumerRebalanceListener(metaclass=abc.ABCMeta): + @abc.abstractmethod + def on_partitions_revoked(self, revoked): ... + @abc.abstractmethod + def on_partitions_assigned(self, assigned): ... diff --git a/stubs/kafka-python/kafka/coordinator/__init__.pyi b/stubs/kafka-python/kafka/coordinator/__init__.pyi new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/stubs/kafka-python/kafka/coordinator/assignors/__init__.pyi b/stubs/kafka-python/kafka/coordinator/assignors/__init__.pyi new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/stubs/kafka-python/kafka/coordinator/assignors/abstract.pyi b/stubs/kafka-python/kafka/coordinator/assignors/abstract.pyi new file mode 100644 index 000000000000..898c5dc4d676 --- /dev/null +++ b/stubs/kafka-python/kafka/coordinator/assignors/abstract.pyi @@ -0,0 +1,15 @@ +import abc +from _typeshed import Incomplete + +log: Incomplete + +class AbstractPartitionAssignor(metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def name(self): ... + @abc.abstractmethod + def assign(self, cluster, members): ... + @abc.abstractmethod + def metadata(self, topics): ... + @abc.abstractmethod + def on_assignment(self, assignment): ... diff --git a/stubs/kafka-python/kafka/coordinator/assignors/range.pyi b/stubs/kafka-python/kafka/coordinator/assignors/range.pyi new file mode 100644 index 000000000000..667d52af7efd --- /dev/null +++ b/stubs/kafka-python/kafka/coordinator/assignors/range.pyi @@ -0,0 +1,15 @@ +from _typeshed import Incomplete + +from kafka.coordinator.assignors.abstract import AbstractPartitionAssignor + +log: Incomplete + +class RangePartitionAssignor(AbstractPartitionAssignor): + name: str + version: int + @classmethod + def assign(cls, cluster, group_subscriptions): ... + @classmethod + def metadata(cls, topics): ... + @classmethod + def on_assignment(cls, assignment) -> None: ... diff --git a/stubs/kafka-python/kafka/coordinator/assignors/roundrobin.pyi b/stubs/kafka-python/kafka/coordinator/assignors/roundrobin.pyi new file mode 100644 index 000000000000..b876b9cec002 --- /dev/null +++ b/stubs/kafka-python/kafka/coordinator/assignors/roundrobin.pyi @@ -0,0 +1,15 @@ +from _typeshed import Incomplete + +from kafka.coordinator.assignors.abstract import AbstractPartitionAssignor + +log: Incomplete + +class RoundRobinPartitionAssignor(AbstractPartitionAssignor): + name: str + version: int + @classmethod + def assign(cls, cluster, group_subscriptions): ... + @classmethod + def metadata(cls, topics): ... + @classmethod + def on_assignment(cls, assignment) -> None: ... diff --git a/stubs/kafka-python/kafka/coordinator/assignors/sticky/__init__.pyi b/stubs/kafka-python/kafka/coordinator/assignors/sticky/__init__.pyi new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/stubs/kafka-python/kafka/coordinator/assignors/sticky/partition_movements.pyi b/stubs/kafka-python/kafka/coordinator/assignors/sticky/partition_movements.pyi new file mode 100644 index 000000000000..1b3620d3623c --- /dev/null +++ b/stubs/kafka-python/kafka/coordinator/assignors/sticky/partition_movements.pyi @@ -0,0 +1,18 @@ +from _typeshed import Incomplete +from typing import NamedTuple + +log: Incomplete + +class ConsumerPair(NamedTuple): + src_member_id: Incomplete + dst_member_id: Incomplete + +def is_sublist(source, target): ... + +class PartitionMovements: + partition_movements_by_topic: Incomplete + partition_movements: Incomplete + def __init__(self) -> None: ... + def move_partition(self, partition, old_consumer, new_consumer) -> None: ... + def get_partition_to_be_moved(self, partition, old_consumer, new_consumer): ... + def are_sticky(self): ... diff --git a/stubs/kafka-python/kafka/coordinator/assignors/sticky/sorted_set.pyi b/stubs/kafka-python/kafka/coordinator/assignors/sticky/sorted_set.pyi new file mode 100644 index 000000000000..670cfe6b9c0b --- /dev/null +++ b/stubs/kafka-python/kafka/coordinator/assignors/sticky/sorted_set.pyi @@ -0,0 +1,13 @@ +from _typeshed import Incomplete + +class SortedSet: + def __init__(self, iterable=None, key=None) -> None: ... + def first(self): ... + def last(self): ... + def pop_last(self): ... + def add(self, value): ... + def remove(self, value): ... + def __contains__(self, value) -> bool: ... + def __iter__(self): ... + __nonzero__: Incomplete + __bool__: Incomplete diff --git a/stubs/kafka-python/kafka/coordinator/assignors/sticky/sticky_assignor.pyi b/stubs/kafka-python/kafka/coordinator/assignors/sticky/sticky_assignor.pyi new file mode 100644 index 000000000000..837dd5fabf3e --- /dev/null +++ b/stubs/kafka-python/kafka/coordinator/assignors/sticky/sticky_assignor.pyi @@ -0,0 +1,59 @@ +from _typeshed import Incomplete +from typing import NamedTuple + +from kafka.coordinator.assignors.abstract import AbstractPartitionAssignor +from kafka.protocol.struct import Struct + +log: Incomplete + +class ConsumerGenerationPair(NamedTuple): + consumer: Incomplete + generation: Incomplete + +def has_identical_list_elements(list_): ... +def subscriptions_comparator_key(element): ... +def partitions_comparator_key(element): ... +def remove_if_present(collection, element) -> None: ... + +class StickyAssignorMemberMetadataV1(NamedTuple): + subscription: Incomplete + partitions: Incomplete + generation: Incomplete + +class StickyAssignorUserDataV1(Struct): + SCHEMA: Incomplete + +class StickyAssignmentExecutor: + members: Incomplete + current_assignment: Incomplete + previous_assignment: Incomplete + current_partition_consumer: Incomplete + is_fresh_assignment: bool + partition_to_all_potential_consumers: Incomplete + consumer_to_all_potential_partitions: Incomplete + sorted_current_subscriptions: Incomplete + sorted_partitions: Incomplete + unassigned_partitions: Incomplete + revocation_required: bool + partition_movements: Incomplete + def __init__(self, cluster, members) -> None: ... + def perform_initial_assignment(self) -> None: ... + def balance(self) -> None: ... + def get_final_assignment(self, member_id): ... + +class StickyPartitionAssignor(AbstractPartitionAssignor): + DEFAULT_GENERATION_ID: int + name: str + version: int + member_assignment: Incomplete + generation = DEFAULT_GENERATION_ID + @classmethod + def assign(cls, cluster, members): ... + @classmethod + def parse_member_metadata(cls, metadata): ... + @classmethod + def metadata(cls, topics): ... + @classmethod + def on_assignment(cls, assignment) -> None: ... + @classmethod + def on_generation_assignment(cls, generation) -> None: ... diff --git a/stubs/kafka-python/kafka/coordinator/base.pyi b/stubs/kafka-python/kafka/coordinator/base.pyi new file mode 100644 index 000000000000..502bff9f7bf1 --- /dev/null +++ b/stubs/kafka-python/kafka/coordinator/base.pyi @@ -0,0 +1,84 @@ +import abc +import threading +from _typeshed import Incomplete + +from kafka import errors as Errors + +log: Incomplete +heartbeat_log: Incomplete + +class MemberState: + UNJOINED: str + REBALANCING: str + STABLE: str + +class Generation: + generation_id: Incomplete + member_id: Incomplete + protocol: Incomplete + def __init__(self, generation_id, member_id, protocol) -> None: ... + def has_member_id(self): ... + def __eq__(self, other): ... + +class UnjoinedGroupException(Errors.KafkaError): + retriable: bool + +class BaseCoordinator(metaclass=abc.ABCMeta): + DEFAULT_CONFIG: Incomplete + config: Incomplete + heartbeat: Incomplete + rejoin_needed: bool + rejoining: bool + state: Incomplete + join_future: Incomplete + coordinator_id: Incomplete + def __init__(self, client, **configs) -> None: ... + @property + def group_id(self): ... + @property + def group_instance_id(self): ... + @abc.abstractmethod + def protocol_type(self): ... + @abc.abstractmethod + def group_protocols(self): ... + def coordinator_unknown(self): ... + def coordinator(self): ... + def connected(self): ... + def ensure_coordinator_ready(self, timeout_ms=None): ... + def lookup_coordinator(self): ... + def need_rejoin(self): ... + def poll_heartbeat(self) -> None: ... + def time_to_next_heartbeat(self): ... + def ensure_active_group(self, timeout_ms=None): ... + def join_group(self, timeout_ms=None): ... + def coordinator_dead(self, error) -> None: ... + def generation_if_stable(self): ... + def generation(self): ... + def rebalance_in_progress(self): ... + def reset_generation(self, member_id="") -> None: ... + def request_rejoin(self) -> None: ... + def __del__(self) -> None: ... + def close(self, timeout_ms=None) -> None: ... + def is_dynamic_member(self): ... + def maybe_leave_group(self, timeout_ms=None) -> None: ... + +class GroupCoordinatorMetrics: + heartbeat: Incomplete + metrics: Incomplete + metric_group_name: Incomplete + heartbeat_latency: Incomplete + join_latency: Incomplete + sync_latency: Incomplete + def __init__(self, heartbeat, metrics, prefix, tags=None) -> None: ... + +class HeartbeatThread(threading.Thread): + name: Incomplete + coordinator: Incomplete + enabled: bool + closed: bool + failed: Incomplete + def __init__(self, coordinator) -> None: ... + def enable(self) -> None: ... + def disable(self) -> None: ... + def close(self, timeout_ms=None) -> None: ... + def run(self) -> None: ... diff --git a/stubs/kafka-python/kafka/coordinator/consumer.pyi b/stubs/kafka-python/kafka/coordinator/consumer.pyi new file mode 100644 index 000000000000..159cbc4a2916 --- /dev/null +++ b/stubs/kafka-python/kafka/coordinator/consumer.pyi @@ -0,0 +1,31 @@ +from _typeshed import Incomplete + +from kafka.coordinator.base import BaseCoordinator + +log: Incomplete + +class ConsumerCoordinator(BaseCoordinator): + DEFAULT_CONFIG: Incomplete + config: Incomplete + auto_commit_interval: Incomplete + next_auto_commit_deadline: Incomplete + completed_offset_commits: Incomplete + def __init__(self, client, subscription, **configs) -> None: ... + def __del__(self) -> None: ... + def protocol_type(self): ... + def group_protocols(self): ... + def poll(self, timeout_ms=None): ... + def time_to_next_poll(self): ... + def need_rejoin(self): ... + def refresh_committed_offsets_if_needed(self, timeout_ms=None): ... + def fetch_committed_offsets(self, partitions, timeout_ms=None): ... + def close(self, autocommit: bool = True, timeout_ms=None) -> None: ... # type: ignore[override] + def commit_offsets_async(self, offsets, callback=None): ... + def commit_offsets_sync(self, offsets, timeout_ms=None): ... + def maybe_auto_commit_offsets_now(self) -> None: ... + +class ConsumerCoordinatorMetrics: + metrics: Incomplete + metric_group_name: Incomplete + commit_latency: Incomplete + def __init__(self, metrics, metric_group_prefix, subscription) -> None: ... diff --git a/stubs/kafka-python/kafka/coordinator/heartbeat.pyi b/stubs/kafka-python/kafka/coordinator/heartbeat.pyi new file mode 100644 index 000000000000..2fb958a5c868 --- /dev/null +++ b/stubs/kafka-python/kafka/coordinator/heartbeat.pyi @@ -0,0 +1,22 @@ +from _typeshed import Incomplete + +log: Incomplete + +class Heartbeat: + DEFAULT_CONFIG: Incomplete + config: Incomplete + last_send: Incomplete + last_receive: Incomplete + last_poll: Incomplete + last_reset: Incomplete + heartbeat_failed: Incomplete + def __init__(self, **configs) -> None: ... + def poll(self) -> None: ... + def sent_heartbeat(self) -> None: ... + def fail_heartbeat(self) -> None: ... + def received_heartbeat(self) -> None: ... + def time_to_next_heartbeat(self): ... + def should_heartbeat(self): ... + def session_timeout_expired(self): ... + def reset_timeouts(self) -> None: ... + def poll_timeout_expired(self): ... diff --git a/stubs/kafka-python/kafka/coordinator/protocol.pyi b/stubs/kafka-python/kafka/coordinator/protocol.pyi new file mode 100644 index 000000000000..c099575b5c88 --- /dev/null +++ b/stubs/kafka-python/kafka/coordinator/protocol.pyi @@ -0,0 +1,17 @@ +from _typeshed import Incomplete + +from kafka.protocol.struct import Struct + +class ConsumerProtocolMemberMetadata_v0(Struct): + SCHEMA: Incomplete + +class ConsumerProtocolMemberAssignment_v0(Struct): + SCHEMA: Incomplete + def partitions(self): ... + +class ConsumerProtocol_v0: + PROTOCOL_TYPE: str + METADATA = ConsumerProtocolMemberMetadata_v0 + ASSIGNMENT = ConsumerProtocolMemberAssignment_v0 + +ConsumerProtocol: Incomplete diff --git a/stubs/kafka-python/kafka/coordinator/subscription.pyi b/stubs/kafka-python/kafka/coordinator/subscription.pyi new file mode 100644 index 000000000000..b04a77efda82 --- /dev/null +++ b/stubs/kafka-python/kafka/coordinator/subscription.pyi @@ -0,0 +1,13 @@ +class Subscription: + def __init__(self, metadata, group_instance_id) -> None: ... + @property + def version(self): ... + @property + def user_data(self): ... + @property + def topics(self): ... + subscription = topics + @property + def group_instance_id(self): ... + def encode(self): ... + def __eq__(self, other): ... diff --git a/stubs/kafka-python/kafka/errors.pyi b/stubs/kafka-python/kafka/errors.pyi new file mode 100644 index 000000000000..9c7913a42520 --- /dev/null +++ b/stubs/kafka-python/kafka/errors.pyi @@ -0,0 +1,822 @@ +from _typeshed import Incomplete + +class KafkaError(RuntimeError): + retriable: bool + invalid_metadata: bool + def __eq__(self, other): ... + +class Cancelled(KafkaError): + retriable: bool + +class CommitFailedError(KafkaError): + def __init__(self, *args) -> None: ... + +class IllegalArgumentError(KafkaError): ... +class IllegalStateError(KafkaError): ... +class IncompatibleBrokerVersion(KafkaError): ... +class KafkaConfigurationError(KafkaError): ... + +class KafkaConnectionError(KafkaError): + retriable: bool + invalid_metadata: bool + +class KafkaProtocolError(KafkaError): + retriable: bool + +class CorrelationIdError(KafkaProtocolError): + retriable: bool + +class KafkaTimeoutError(KafkaError): + retriable: bool + +class MetadataEmptyBrokerList(KafkaError): + retriable: bool + +class NoBrokersAvailable(KafkaError): + retriable: bool + invalid_metadata: bool + +class NoOffsetForPartitionError(KafkaError): ... + +class NodeNotReadyError(KafkaError): + retriable: bool + +class QuotaViolationError(KafkaError): ... + +class StaleMetadata(KafkaError): + retriable: bool + invalid_metadata: bool + +class TooManyInFlightRequests(KafkaError): + retriable: bool + +class UnrecognizedBrokerVersion(KafkaError): ... +class UnsupportedCodecError(KafkaError): ... +class TransactionAbortedError(KafkaError): ... + +class BrokerResponseError(KafkaError): + errno: Incomplete + message: Incomplete + description: Incomplete + +class AuthorizationError(BrokerResponseError): ... + +class NoError(BrokerResponseError): + errno: int + message: str + description: str + +class UnknownError(BrokerResponseError): + errno: int + message: str + description: str + +class OffsetOutOfRangeError(BrokerResponseError): + errno: int + message: str + description: str + +class CorruptRecordError(BrokerResponseError): + errno: int + message: str + description: str + +CorruptRecordException = CorruptRecordError + +class UnknownTopicOrPartitionError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + invalid_metadata: bool + +class InvalidFetchRequestError(BrokerResponseError): + errno: int + message: str + description: str + +class LeaderNotAvailableError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + invalid_metadata: bool + +class NotLeaderForPartitionError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + invalid_metadata: bool + +class RequestTimedOutError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class BrokerNotAvailableError(BrokerResponseError): + errno: int + message: str + description: str + +class ReplicaNotAvailableError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + invalid_metadata: bool + +class MessageSizeTooLargeError(BrokerResponseError): + errno: int + message: str + description: str + +class StaleControllerEpochError(BrokerResponseError): + errno: int + message: str + description: str + +class OffsetMetadataTooLargeError(BrokerResponseError): + errno: int + message: str + description: str + +class NetworkExceptionError(BrokerResponseError): + errno: int + message: str + retriable: bool + invalid_metadata: bool + +class CoordinatorLoadInProgressError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class CoordinatorNotAvailableError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class NotCoordinatorError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class InvalidTopicError(BrokerResponseError): + errno: int + message: str + description: str + +class RecordListTooLargeError(BrokerResponseError): + errno: int + message: str + description: str + +class NotEnoughReplicasError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class NotEnoughReplicasAfterAppendError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class InvalidRequiredAcksError(BrokerResponseError): + errno: int + message: str + description: str + +class IllegalGenerationError(BrokerResponseError): + errno: int + message: str + description: str + +class InconsistentGroupProtocolError(BrokerResponseError): + errno: int + message: str + description: str + +class InvalidGroupIdError(BrokerResponseError): + errno: int + message: str + description: str + +class UnknownMemberIdError(BrokerResponseError): + errno: int + message: str + description: str + +class InvalidSessionTimeoutError(BrokerResponseError): + errno: int + message: str + description: str + +class RebalanceInProgressError(BrokerResponseError): + errno: int + message: str + description: str + +class InvalidCommitOffsetSizeError(BrokerResponseError): + errno: int + message: str + description: str + +class TopicAuthorizationFailedError(AuthorizationError): + errno: int + message: str + description: str + +class GroupAuthorizationFailedError(AuthorizationError): + errno: int + message: str + description: str + +class ClusterAuthorizationFailedError(AuthorizationError): + errno: int + message: str + description: str + +class InvalidTimestampError(BrokerResponseError): + errno: int + message: str + description: str + +class UnsupportedSaslMechanismError(BrokerResponseError): + errno: int + message: str + description: str + +class IllegalSaslStateError(BrokerResponseError): + errno: int + message: str + description: str + +class UnsupportedVersionError(BrokerResponseError): + errno: int + message: str + description: str + +class TopicAlreadyExistsError(BrokerResponseError): + errno: int + message: str + description: str + +class InvalidPartitionsError(BrokerResponseError): + errno: int + message: str + description: str + +class InvalidReplicationFactorError(BrokerResponseError): + errno: int + message: str + description: str + +class InvalidReplicationAssignmentError(BrokerResponseError): + errno: int + message: str + description: str + +class InvalidConfigurationError(BrokerResponseError): + errno: int + message: str + description: str + +class NotControllerError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class InvalidRequestError(BrokerResponseError): + errno: int + message: str + description: str + +class UnsupportedForMessageFormatError(BrokerResponseError): + errno: int + message: str + description: str + +class PolicyViolationError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class OutOfOrderSequenceNumberError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class DuplicateSequenceNumberError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class InvalidProducerEpochError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class InvalidTxnStateError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class InvalidProducerIdMappingError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class InvalidTransactionTimeoutError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class ConcurrentTransactionsError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class TransactionCoordinatorFencedError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class TransactionalIdAuthorizationFailedError(AuthorizationError): + errno: int + message: str + description: str + retriable: bool + +class SecurityDisabledError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class OperationNotAttemptedError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class KafkaStorageError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + invalid_metadata: bool + +class LogDirNotFoundError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class SaslAuthenticationFailedError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class UnknownProducerIdError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class ReassignmentInProgressError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class DelegationTokenAuthDisabledError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class DelegationTokenNotFoundError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class DelegationTokenOwnerMismatchError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class DelegationTokenRequestNotAllowedError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class DelegationTokenAuthorizationFailedError(AuthorizationError): + errno: int + message: str + description: str + retriable: bool + +class DelegationTokenExpiredError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class InvalidPrincipalTypeError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class NonEmptyGroupError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class GroupIdNotFoundError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class FetchSessionIdNotFoundError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class InvalidFetchSessionEpochError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class ListenerNotFoundError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + invalid_metadata: bool + +class TopicDeletionDisabledError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class FencedLeaderEpochError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + invalid_metadata: bool + +class UnknownLeaderEpochError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + invalid_metadata: bool + +class UnsupportedCompressionTypeError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class StaleBrokerEpochError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class OffsetNotAvailableError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class MemberIdRequiredError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class PreferredLeaderNotAvailableError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + invalid_metadata: bool + +class GroupMaxSizeReachedError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class FencedInstanceIdError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class EligibleLeadersNotAvailableError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + invalid_metadata: bool + +class ElectionNotNeededError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + invalid_metadata: bool + +class NoReassignmentInProgressError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class GroupSubscribedToTopicError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class InvalidRecordError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class UnstableOffsetCommitError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class ThrottlingQuotaExceededError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class ProducerFencedError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class ResourceNotFoundError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class DuplicateResourceError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class UnacceptableCredentialError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class InconsistentVoterSetError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class InvalidUpdateVersionError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class FeatureUpdateFailedError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class PrincipalDeserializationFailureError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class SnapshotNotFoundError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class PositionOutOfRangeError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class UnknownTopicIdError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + invalid_metadata: bool + +class DuplicateBrokerRegistrationError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class BrokerIdNotRegisteredError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class InconsistentTopicIdError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + invalid_metadata: bool + +class InconsistentClusterIdError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class TransactionalIdNotFoundError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class FetchSessionTopicIdError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class IneligibleReplicaError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class NewLeaderElectedError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class OffsetMovedToTieredStorageError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class FencedMemberEpochError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class UnreleasedInstanceIdError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class UnsupportedAssignorError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class StaleMemberEpochError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class MismatchedEndpointTypeError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class UnsupportedEndpointTypeError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class UnknownControllerIdError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class UnknownSubscriptionIdError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class TelemetryTooLargeError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class InvalidRegistrationError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class TransactionAbortableError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class InvalidRecordStateError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class ShareSessionNotFoundError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class InvalidShareSessionEpochError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class FencedStateEpochError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class InvalidVoterKeyError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class DuplicateVoterError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +class VoterNotFoundError(BrokerResponseError): + errno: int + message: str + description: str + retriable: bool + +kafka_errors: Incomplete + +def for_code(error_code): ... diff --git a/stubs/kafka-python/kafka/future.pyi b/stubs/kafka-python/kafka/future.pyi new file mode 100644 index 000000000000..04b26e768662 --- /dev/null +++ b/stubs/kafka-python/kafka/future.pyi @@ -0,0 +1,19 @@ +from _typeshed import Incomplete + +log: Incomplete + +class Future: + error_on_callbacks: bool + is_done: bool + value: Incomplete + exception: Incomplete + def __init__(self) -> None: ... + def succeeded(self): ... + def failed(self): ... + def retriable(self): ... + def success(self, value): ... + def failure(self, e): ... + def add_callback(self, f, *args, **kwargs): ... + def add_errback(self, f, *args, **kwargs): ... + def add_both(self, f, *args, **kwargs): ... + def chain(self, future): ... diff --git a/stubs/kafka-python/kafka/metrics/__init__.pyi b/stubs/kafka-python/kafka/metrics/__init__.pyi new file mode 100644 index 000000000000..9e6b062abd21 --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/__init__.pyi @@ -0,0 +1,10 @@ +from kafka.metrics.compound_stat import NamedMeasurable as NamedMeasurable +from kafka.metrics.dict_reporter import DictReporter as DictReporter +from kafka.metrics.kafka_metric import KafkaMetric as KafkaMetric +from kafka.metrics.measurable import AnonMeasurable as AnonMeasurable +from kafka.metrics.metric_config import MetricConfig as MetricConfig +from kafka.metrics.metric_name import MetricName as MetricName +from kafka.metrics.metrics import Metrics as Metrics +from kafka.metrics.quota import Quota as Quota + +__all__ = ["AnonMeasurable", "DictReporter", "KafkaMetric", "MetricConfig", "MetricName", "Metrics", "NamedMeasurable", "Quota"] diff --git a/stubs/kafka-python/kafka/metrics/compound_stat.pyi b/stubs/kafka-python/kafka/metrics/compound_stat.pyi new file mode 100644 index 000000000000..6f41b10ef0fa --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/compound_stat.pyi @@ -0,0 +1,13 @@ +import abc + +from kafka.metrics.stat import AbstractStat + +class AbstractCompoundStat(AbstractStat, metaclass=abc.ABCMeta): + def stats(self) -> None: ... + +class NamedMeasurable: + def __init__(self, metric_name, measurable_stat) -> None: ... + @property + def name(self): ... + @property + def stat(self): ... diff --git a/stubs/kafka-python/kafka/metrics/dict_reporter.pyi b/stubs/kafka-python/kafka/metrics/dict_reporter.pyi new file mode 100644 index 000000000000..c48a7d9acd80 --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/dict_reporter.pyi @@ -0,0 +1,15 @@ +from _typeshed import Incomplete + +from kafka.metrics.metrics_reporter import AbstractMetricsReporter + +logger: Incomplete + +class DictReporter(AbstractMetricsReporter): + def __init__(self, prefix: str = "") -> None: ... + def snapshot(self): ... + def init(self, metrics) -> None: ... + def metric_change(self, metric) -> None: ... + def metric_removal(self, metric): ... + def get_category(self, metric): ... + def configure(self, configs) -> None: ... + def close(self) -> None: ... diff --git a/stubs/kafka-python/kafka/metrics/kafka_metric.pyi b/stubs/kafka-python/kafka/metrics/kafka_metric.pyi new file mode 100644 index 000000000000..856210a6d56b --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/kafka_metric.pyi @@ -0,0 +1,13 @@ +class KafkaMetric: + def __init__(self, metric_name, measurable, config) -> None: ... + @property + def metric_name(self): ... + @property + def measurable(self): ... + + @property + def config(self): ... + @config.setter + def config(self, config) -> None: ... + + def value(self, time_ms=None): ... diff --git a/stubs/kafka-python/kafka/metrics/measurable.pyi b/stubs/kafka-python/kafka/metrics/measurable.pyi new file mode 100644 index 000000000000..2753796bc8cd --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/measurable.pyi @@ -0,0 +1,9 @@ +import abc + +class AbstractMeasurable(metaclass=abc.ABCMeta): + @abc.abstractmethod + def measure(self, config, now): ... + +class AnonMeasurable(AbstractMeasurable): + def __init__(self, measure_fn) -> None: ... + def measure(self, config, now): ... diff --git a/stubs/kafka-python/kafka/metrics/measurable_stat.pyi b/stubs/kafka-python/kafka/metrics/measurable_stat.pyi new file mode 100644 index 000000000000..31569f41942a --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/measurable_stat.pyi @@ -0,0 +1,6 @@ +import abc + +from kafka.metrics.measurable import AbstractMeasurable +from kafka.metrics.stat import AbstractStat + +class AbstractMeasurableStat(AbstractStat, AbstractMeasurable, metaclass=abc.ABCMeta): ... diff --git a/stubs/kafka-python/kafka/metrics/metric_config.pyi b/stubs/kafka-python/kafka/metrics/metric_config.pyi new file mode 100644 index 000000000000..fc630189a272 --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/metric_config.pyi @@ -0,0 +1,13 @@ +from _typeshed import Incomplete + +class MetricConfig: + quota: Incomplete + event_window: Incomplete + time_window_ms: Incomplete + tags: Incomplete + def __init__(self, quota=None, samples: int = 2, event_window=..., time_window_ms=30000, tags=None) -> None: ... + + @property + def samples(self): ... + @samples.setter + def samples(self, value) -> None: ... diff --git a/stubs/kafka-python/kafka/metrics/metric_name.pyi b/stubs/kafka-python/kafka/metrics/metric_name.pyi new file mode 100644 index 000000000000..44a770132927 --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/metric_name.pyi @@ -0,0 +1,13 @@ +class MetricName: + def __init__(self, name, group, description=None, tags=None) -> None: ... + @property + def name(self): ... + @property + def group(self): ... + @property + def description(self): ... + @property + def tags(self): ... + def __hash__(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... diff --git a/stubs/kafka-python/kafka/metrics/metrics.pyi b/stubs/kafka-python/kafka/metrics/metrics.pyi new file mode 100644 index 000000000000..31db3617f08d --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/metrics.pyi @@ -0,0 +1,24 @@ +from _typeshed import Incomplete + +logger: Incomplete + +class Metrics: + def __init__(self, default_config=None, reporters=None, enable_expiration: bool = False) -> None: ... + @property + def config(self): ... + @property + def metrics(self): ... + def metric_name(self, name, group, description: str = "", tags=None): ... + def get_sensor(self, name): ... + def sensor(self, name, config=None, inactive_sensor_expiration_time_seconds=..., parents=None): ... + def remove_sensor(self, name) -> None: ... + def add_metric(self, metric_name, measurable, config=None) -> None: ... + def remove_metric(self, metric_name): ... + def add_reporter(self, reporter) -> None: ... + def register_metric(self, metric) -> None: ... + + class ExpireSensorTask: + @staticmethod + def run(metrics) -> None: ... + + def close(self) -> None: ... diff --git a/stubs/kafka-python/kafka/metrics/metrics_reporter.pyi b/stubs/kafka-python/kafka/metrics/metrics_reporter.pyi new file mode 100644 index 000000000000..e8022ff431d2 --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/metrics_reporter.pyi @@ -0,0 +1,13 @@ +import abc + +class AbstractMetricsReporter(metaclass=abc.ABCMeta): + @abc.abstractmethod + def init(self, metrics): ... + @abc.abstractmethod + def metric_change(self, metric): ... + @abc.abstractmethod + def metric_removal(self, metric): ... + @abc.abstractmethod + def configure(self, configs): ... + @abc.abstractmethod + def close(self): ... diff --git a/stubs/kafka-python/kafka/metrics/quota.pyi b/stubs/kafka-python/kafka/metrics/quota.pyi new file mode 100644 index 000000000000..3290e80589fc --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/quota.pyi @@ -0,0 +1,13 @@ +class Quota: + def __init__(self, bound, is_upper) -> None: ... + @staticmethod + def upper_bound(upper_bound): ... + @staticmethod + def lower_bound(lower_bound): ... + def is_upper_bound(self): ... + @property + def bound(self): ... + def is_acceptable(self, value): ... + def __hash__(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... diff --git a/stubs/kafka-python/kafka/metrics/stat.pyi b/stubs/kafka-python/kafka/metrics/stat.pyi new file mode 100644 index 000000000000..d9b5f9473988 --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/stat.pyi @@ -0,0 +1,5 @@ +import abc + +class AbstractStat(metaclass=abc.ABCMeta): + @abc.abstractmethod + def record(self, config, value, time_ms): ... diff --git a/stubs/kafka-python/kafka/metrics/stats/__init__.pyi b/stubs/kafka-python/kafka/metrics/stats/__init__.pyi new file mode 100644 index 000000000000..bc86bfd66544 --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/stats/__init__.pyi @@ -0,0 +1,12 @@ +from kafka.metrics.stats.avg import Avg as Avg +from kafka.metrics.stats.count import Count as Count +from kafka.metrics.stats.histogram import Histogram as Histogram +from kafka.metrics.stats.max_stat import Max as Max +from kafka.metrics.stats.min_stat import Min as Min +from kafka.metrics.stats.percentile import Percentile as Percentile +from kafka.metrics.stats.percentiles import Percentiles as Percentiles +from kafka.metrics.stats.rate import Rate as Rate +from kafka.metrics.stats.sensor import Sensor as Sensor +from kafka.metrics.stats.total import Total as Total + +__all__ = ["Avg", "Count", "Histogram", "Max", "Min", "Percentile", "Percentiles", "Rate", "Sensor", "Total"] diff --git a/stubs/kafka-python/kafka/metrics/stats/avg.pyi b/stubs/kafka-python/kafka/metrics/stats/avg.pyi new file mode 100644 index 000000000000..0c00ef442744 --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/stats/avg.pyi @@ -0,0 +1,6 @@ +from kafka.metrics.stats.sampled_stat import AbstractSampledStat + +class Avg(AbstractSampledStat): + def __init__(self) -> None: ... + def update(self, sample, config, value, now) -> None: ... + def combine(self, samples, config, now): ... diff --git a/stubs/kafka-python/kafka/metrics/stats/count.pyi b/stubs/kafka-python/kafka/metrics/stats/count.pyi new file mode 100644 index 000000000000..b13c9930b06a --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/stats/count.pyi @@ -0,0 +1,6 @@ +from kafka.metrics.stats.sampled_stat import AbstractSampledStat + +class Count(AbstractSampledStat): + def __init__(self) -> None: ... + def update(self, sample, config, value, now) -> None: ... + def combine(self, samples, config, now): ... diff --git a/stubs/kafka-python/kafka/metrics/stats/histogram.pyi b/stubs/kafka-python/kafka/metrics/stats/histogram.pyi new file mode 100644 index 000000000000..74a77e0ff50c --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/stats/histogram.pyi @@ -0,0 +1,21 @@ +class Histogram: + def __init__(self, bin_scheme) -> None: ... + def record(self, value) -> None: ... + def value(self, quantile): ... + @property + def counts(self): ... + def clear(self) -> None: ... + + class ConstantBinScheme: + def __init__(self, bins, min_val, max_val) -> None: ... + @property + def bins(self): ... + def from_bin(self, b): ... + def to_bin(self, x): ... + + class LinearBinScheme: + def __init__(self, num_bins, max_val) -> None: ... + @property + def bins(self): ... + def from_bin(self, b): ... + def to_bin(self, x): ... diff --git a/stubs/kafka-python/kafka/metrics/stats/max_stat.pyi b/stubs/kafka-python/kafka/metrics/stats/max_stat.pyi new file mode 100644 index 000000000000..705b766b23a6 --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/stats/max_stat.pyi @@ -0,0 +1,6 @@ +from kafka.metrics.stats.sampled_stat import AbstractSampledStat + +class Max(AbstractSampledStat): + def __init__(self) -> None: ... + def update(self, sample, config, value, now) -> None: ... + def combine(self, samples, config, now): ... diff --git a/stubs/kafka-python/kafka/metrics/stats/min_stat.pyi b/stubs/kafka-python/kafka/metrics/stats/min_stat.pyi new file mode 100644 index 000000000000..cc5e3fbaf763 --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/stats/min_stat.pyi @@ -0,0 +1,6 @@ +from kafka.metrics.stats.sampled_stat import AbstractSampledStat + +class Min(AbstractSampledStat): + def __init__(self) -> None: ... + def update(self, sample, config, value, now) -> None: ... + def combine(self, samples, config, now): ... diff --git a/stubs/kafka-python/kafka/metrics/stats/percentile.pyi b/stubs/kafka-python/kafka/metrics/stats/percentile.pyi new file mode 100644 index 000000000000..a27b11c05a7b --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/stats/percentile.pyi @@ -0,0 +1,6 @@ +class Percentile: + def __init__(self, metric_name, percentile) -> None: ... + @property + def name(self): ... + @property + def percentile(self): ... diff --git a/stubs/kafka-python/kafka/metrics/stats/percentiles.pyi b/stubs/kafka-python/kafka/metrics/stats/percentiles.pyi new file mode 100644 index 000000000000..8f7bbe0effcd --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/stats/percentiles.pyi @@ -0,0 +1,21 @@ +from _typeshed import Incomplete + +from kafka.metrics.compound_stat import AbstractCompoundStat +from kafka.metrics.stats.sampled_stat import AbstractSampledStat + +class BucketSizing: + CONSTANT: int + LINEAR: int + +class Percentiles(AbstractSampledStat, AbstractCompoundStat): + bin_scheme: Incomplete + def __init__(self, size_in_bytes, bucketing, max_val, min_val: float = 0.0, percentiles=None) -> None: ... + def stats(self): ... + def value(self, config, now, quantile): ... + def combine(self, samples, config, now): ... + def new_sample(self, time_ms): ... + def update(self, sample, config, value, time_ms) -> None: ... + + class HistogramSample(AbstractSampledStat.Sample): + histogram: Incomplete + def __init__(self, scheme, now) -> None: ... diff --git a/stubs/kafka-python/kafka/metrics/stats/rate.pyi b/stubs/kafka-python/kafka/metrics/stats/rate.pyi new file mode 100644 index 000000000000..d5199a72807b --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/stats/rate.pyi @@ -0,0 +1,28 @@ +from _typeshed import Incomplete + +from kafka.metrics.measurable_stat import AbstractMeasurableStat +from kafka.metrics.stats.sampled_stat import AbstractSampledStat + +class TimeUnit: + NANOSECONDS: Incomplete + MICROSECONDS: Incomplete + MILLISECONDS: Incomplete + SECONDS: Incomplete + MINUTES: Incomplete + HOURS: Incomplete + DAYS: Incomplete + @staticmethod + def get_name(time_unit): ... + +class Rate(AbstractMeasurableStat): + def __init__(self, time_unit=3, sampled_stat=None) -> None: ... + def unit_name(self): ... + def record(self, config, value, time_ms) -> None: ... + def measure(self, config, now): ... + def window_size(self, config, now): ... + def convert(self, time_ms): ... + +class SampledTotal(AbstractSampledStat): + def __init__(self, initial_value=None) -> None: ... + def update(self, sample, config, value, time_ms) -> None: ... + def combine(self, samples, config, now): ... diff --git a/stubs/kafka-python/kafka/metrics/stats/sampled_stat.pyi b/stubs/kafka-python/kafka/metrics/stats/sampled_stat.pyi new file mode 100644 index 000000000000..c589cd800c80 --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/stats/sampled_stat.pyi @@ -0,0 +1,26 @@ +import abc +from _typeshed import Incomplete + +from kafka.metrics.measurable_stat import AbstractMeasurableStat + +class AbstractSampledStat(AbstractMeasurableStat, metaclass=abc.ABCMeta): + def __init__(self, initial_value) -> None: ... + @abc.abstractmethod + def update(self, sample, config, value, time_ms): ... + @abc.abstractmethod + def combine(self, samples, config, now): ... + def record(self, config, value, time_ms) -> None: ... + def new_sample(self, time_ms): ... + def measure(self, config, now): ... + def current(self, time_ms): ... + def oldest(self, now): ... + def purge_obsolete_samples(self, config, now) -> None: ... + + class Sample: + initial_value: Incomplete + event_count: int + last_window_ms: Incomplete + value: Incomplete + def __init__(self, initial_value, now) -> None: ... + def reset(self, now) -> None: ... + def is_complete(self, time_ms, config): ... diff --git a/stubs/kafka-python/kafka/metrics/stats/sensor.pyi b/stubs/kafka-python/kafka/metrics/stats/sensor.pyi new file mode 100644 index 000000000000..f302ed0944be --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/stats/sensor.pyi @@ -0,0 +1,10 @@ +class Sensor: + def __init__(self, registry, name, parents, config, inactive_sensor_expiration_time_seconds) -> None: ... + @property + def name(self): ... + @property + def metrics(self): ... + def record(self, value: float = 1.0, time_ms=None) -> None: ... + def add_compound(self, compound_stat, config=None) -> None: ... + def add(self, metric_name, stat, config=None) -> None: ... + def has_expired(self): ... diff --git a/stubs/kafka-python/kafka/metrics/stats/total.pyi b/stubs/kafka-python/kafka/metrics/stats/total.pyi new file mode 100644 index 000000000000..2a33feb1b02b --- /dev/null +++ b/stubs/kafka-python/kafka/metrics/stats/total.pyi @@ -0,0 +1,6 @@ +from kafka.metrics.measurable_stat import AbstractMeasurableStat + +class Total(AbstractMeasurableStat): + def __init__(self, value: float = 0.0) -> None: ... + def record(self, config, value, now) -> None: ... + def measure(self, config, now): ... diff --git a/stubs/kafka-python/kafka/partitioner/__init__.pyi b/stubs/kafka-python/kafka/partitioner/__init__.pyi new file mode 100644 index 000000000000..93b321c722a6 --- /dev/null +++ b/stubs/kafka-python/kafka/partitioner/__init__.pyi @@ -0,0 +1,3 @@ +from kafka.partitioner.default import DefaultPartitioner as DefaultPartitioner, murmur2 as murmur2 + +__all__ = ["DefaultPartitioner", "murmur2"] diff --git a/stubs/kafka-python/kafka/partitioner/default.pyi b/stubs/kafka-python/kafka/partitioner/default.pyi new file mode 100644 index 000000000000..6800f5b03315 --- /dev/null +++ b/stubs/kafka-python/kafka/partitioner/default.pyi @@ -0,0 +1,5 @@ +class DefaultPartitioner: + @classmethod + def __call__(cls, key, all_partitions, available): ... + +def murmur2(data): ... diff --git a/stubs/kafka-python/kafka/producer/__init__.pyi b/stubs/kafka-python/kafka/producer/__init__.pyi new file mode 100644 index 000000000000..35360a27f231 --- /dev/null +++ b/stubs/kafka-python/kafka/producer/__init__.pyi @@ -0,0 +1,3 @@ +from kafka.producer.kafka import KafkaProducer as KafkaProducer + +__all__ = ["KafkaProducer"] diff --git a/stubs/kafka-python/kafka/producer/future.pyi b/stubs/kafka-python/kafka/producer/future.pyi new file mode 100644 index 000000000000..dc02d81662c6 --- /dev/null +++ b/stubs/kafka-python/kafka/producer/future.pyi @@ -0,0 +1,36 @@ +from _typeshed import Incomplete +from typing import NamedTuple + +from kafka.future import Future + +class FutureProduceResult(Future): + topic_partition: Incomplete + def __init__(self, topic_partition) -> None: ... + def success(self, value): ... + def failure(self, error): ... + def wait(self, timeout=None): ... + +class FutureRecordMetadata(Future): + args: Incomplete + def __init__( + self, + produce_future, + batch_index, + timestamp_ms, + checksum, + serialized_key_size, + serialized_value_size, + serialized_header_size, + ) -> None: ... + def get(self, timeout=None): ... + +class RecordMetadata(NamedTuple): + topic: Incomplete + partition: Incomplete + topic_partition: Incomplete + offset: Incomplete + timestamp: Incomplete + checksum: Incomplete + serialized_key_size: Incomplete + serialized_value_size: Incomplete + serialized_header_size: Incomplete diff --git a/stubs/kafka-python/kafka/producer/kafka.pyi b/stubs/kafka-python/kafka/producer/kafka.pyi new file mode 100644 index 000000000000..2bf712815c2c --- /dev/null +++ b/stubs/kafka-python/kafka/producer/kafka.pyi @@ -0,0 +1,24 @@ +from _typeshed import Incomplete + +log: Incomplete +PRODUCER_CLIENT_ID_SEQUENCE: Incomplete + +class KafkaProducer: + DEFAULT_CONFIG: Incomplete + DEPRECATED_CONFIGS: Incomplete + config: Incomplete + def __init__(self, **configs) -> None: ... + def bootstrap_connected(self): ... + def __del__(self) -> None: ... + def close(self, timeout=None, null_logger: bool = False): ... + def partitions_for(self, topic): ... + @classmethod + def max_usable_produce_magic(cls, api_version): ... + def init_transactions(self) -> None: ... + def begin_transaction(self) -> None: ... + def send_offsets_to_transaction(self, offsets, consumer_group_id) -> None: ... + def commit_transaction(self) -> None: ... + def abort_transaction(self) -> None: ... + def send(self, topic, value=None, key=None, headers=None, partition=None, timestamp_ms=None): ... + def flush(self, timeout=None) -> None: ... + def metrics(self, raw: bool = False): ... diff --git a/stubs/kafka-python/kafka/producer/producer_batch.pyi b/stubs/kafka-python/kafka/producer/producer_batch.pyi new file mode 100644 index 000000000000..6b94289a53dd --- /dev/null +++ b/stubs/kafka-python/kafka/producer/producer_batch.pyi @@ -0,0 +1,42 @@ +from _typeshed import Incomplete +from enum import IntEnum + +log: Incomplete + +class FinalState(IntEnum): + ABORTED = 0 + FAILED = 1 + SUCCEEDED = 2 + +class ProducerBatch: + max_record_size: int + created: Incomplete + drained: Incomplete + attempts: int + last_attempt: Incomplete + last_append: Incomplete + records: Incomplete + topic_partition: Incomplete + produce_future: Incomplete + def __init__(self, tp, records, now=None) -> None: ... + @property + def final_state(self): ... + @property + def record_count(self): ... + @property + def producer_id(self): ... + @property + def producer_epoch(self): ... + @property + def has_sequence(self): ... + def try_append(self, timestamp_ms, key, value, headers, now=None): ... + def abort(self, exception): ... + def complete(self, base_offset, log_append_time): ... + def complete_exceptionally(self, top_level_exception, record_exceptions_fn): ... + def done(self, base_offset=None, timestamp_ms=None, top_level_exception=None, record_exceptions_fn=None): ... + def has_reached_delivery_timeout(self, delivery_timeout_ms, now=None): ... + def in_retry(self): ... + def retry(self, now=None) -> None: ... + @property + def is_done(self): ... + def __lt__(self, other): ... diff --git a/stubs/kafka-python/kafka/producer/record_accumulator.pyi b/stubs/kafka-python/kafka/producer/record_accumulator.pyi new file mode 100644 index 000000000000..cb36265f18d5 --- /dev/null +++ b/stubs/kafka-python/kafka/producer/record_accumulator.pyi @@ -0,0 +1,45 @@ +from _typeshed import Incomplete + +log: Incomplete + +class AtomicInteger: + def __init__(self, val: int = 0) -> None: ... + def increment(self): ... + def decrement(self): ... + def get(self): ... + +class RecordAccumulator: + DEFAULT_CONFIG: Incomplete + config: Incomplete + muted: Incomplete + def __init__(self, **configs) -> None: ... + @property + def delivery_timeout_ms(self): ... + @property + def next_expiry_time_ms(self): ... + def append(self, tp, timestamp_ms, key, value, headers, now=None): ... + def reset_next_batch_expiry_time(self) -> None: ... + def maybe_update_next_batch_expiry_time(self, batch) -> None: ... + def expired_batches(self, now=None): ... + def reenqueue(self, batch, now=None) -> None: ... + def ready(self, cluster, now=None): ... + def has_undrained(self): ... + def drain_batches_for_one_node(self, cluster, node_id, max_size, now=None): ... + def drain(self, cluster, nodes, max_size, now=None): ... + def deallocate(self, batch) -> None: ... + def flush_in_progress(self): ... + def begin_flush(self) -> None: ... + def await_flush_completion(self, timeout=None) -> None: ... + @property + def has_incomplete(self): ... + def abort_incomplete_batches(self) -> None: ... + def abort_undrained_batches(self, error) -> None: ... + def close(self) -> None: ... + +class IncompleteProducerBatches: + def __init__(self) -> None: ... + def add(self, batch) -> None: ... + def remove(self, batch) -> None: ... + def all(self): ... + def __bool__(self) -> bool: ... + __nonzero__ = __bool__ diff --git a/stubs/kafka-python/kafka/producer/sender.pyi b/stubs/kafka-python/kafka/producer/sender.pyi new file mode 100644 index 000000000000..c50b249d0c01 --- /dev/null +++ b/stubs/kafka-python/kafka/producer/sender.pyi @@ -0,0 +1,47 @@ +import threading +from _typeshed import Incomplete +from typing import NamedTuple + +log: Incomplete + +class PartitionResponse(NamedTuple): + error: Incomplete + base_offset: Incomplete + last_offset: Incomplete + log_append_time: Incomplete + log_start_offset: Incomplete + record_errors: Incomplete + error_message: Incomplete + current_leader: Incomplete + +class Sender(threading.Thread): + DEFAULT_CONFIG: Incomplete + config: Incomplete + name: Incomplete + def __init__(self, client, metadata, accumulator, **configs) -> None: ... + def run(self) -> None: ... + def run_once(self) -> None: ... + def initiate_close(self) -> None: ... + def force_close(self) -> None: ... + def add_topic(self, topic) -> None: ... + def wakeup(self) -> None: ... + def bootstrap_connected(self): ... + +class SenderMetrics: + metrics: Incomplete + batch_size_sensor: Incomplete + compression_rate_sensor: Incomplete + queue_time_sensor: Incomplete + records_per_request_sensor: Incomplete + byte_rate_sensor: Incomplete + retry_sensor: Incomplete + error_sensor: Incomplete + max_record_size_sensor: Incomplete + def __init__(self, metrics, client, metadata) -> None: ... + def add_metric( + self, metric_name, measurable, group_name: str = "producer-metrics", description=None, tags=None, sensor_name=None + ) -> None: ... + def maybe_register_topic_metrics(self, topic): ... + def update_produce_request_metrics(self, batches_map) -> None: ... + def record_retries(self, topic, count) -> None: ... + def record_errors(self, topic, count) -> None: ... diff --git a/stubs/kafka-python/kafka/producer/transaction_manager.pyi b/stubs/kafka-python/kafka/producer/transaction_manager.pyi new file mode 100644 index 000000000000..7e6f3e0374f0 --- /dev/null +++ b/stubs/kafka-python/kafka/producer/transaction_manager.pyi @@ -0,0 +1,187 @@ +import abc +from _typeshed import Incomplete +from enum import IntEnum + +log: Incomplete +NO_PRODUCER_ID: int +NO_PRODUCER_EPOCH: int +NO_SEQUENCE: int + +class ProducerIdAndEpoch: + producer_id: Incomplete + epoch: Incomplete + def __init__(self, producer_id, epoch) -> None: ... + @property + def is_valid(self): ... + def match(self, batch): ... + def __eq__(self, other): ... + +class TransactionState(IntEnum): + UNINITIALIZED = 0 + INITIALIZING = 1 + READY = 2 + IN_TRANSACTION = 3 + COMMITTING_TRANSACTION = 4 + ABORTING_TRANSACTION = 5 + ABORTABLE_ERROR = 6 + FATAL_ERROR = 7 + @classmethod + def is_transition_valid(cls, source, target): ... + +class Priority(IntEnum): + FIND_COORDINATOR = 0 + INIT_PRODUCER_ID = 1 + ADD_PARTITIONS_OR_OFFSETS = 2 + END_TXN = 3 + +class TransactionManager: + NO_INFLIGHT_REQUEST_CORRELATION_ID: int + ADD_PARTITIONS_RETRY_BACKOFF_MS: int + transactional_id: Incomplete + transaction_timeout_ms: Incomplete + producer_id_and_epoch: Incomplete + retry_backoff_ms: Incomplete + def __init__( + self, + transactional_id=None, + transaction_timeout_ms: int = 0, + retry_backoff_ms: int = 100, + api_version=(0, 11), + metadata=None, + ) -> None: ... + def initialize_transactions(self): ... + def begin_transaction(self) -> None: ... + def begin_commit(self): ... + def begin_abort(self): ... + def send_offsets_to_transaction(self, offsets, consumer_group_id): ... + def maybe_add_partition_to_transaction(self, topic_partition) -> None: ... + def is_send_to_partition_allowed(self, tp): ... + def has_producer_id(self, producer_id=None): ... + def is_transactional(self): ... + def has_partitions_to_add(self): ... + def is_completing(self): ... + @property + def last_error(self): ... + def has_error(self): ... + def is_aborting(self): ... + def transition_to_abortable_error(self, exc) -> None: ... + def transition_to_fatal_error(self, exc) -> None: ... + def is_partition_added(self, partition): ... + def is_partition_pending_add(self, partition): ... + def has_producer_id_and_epoch(self, producer_id, producer_epoch): ... + def set_producer_id_and_epoch(self, producer_id_and_epoch) -> None: ... + def reset_producer_id(self) -> None: ... + def sequence_number(self, tp): ... + def increment_sequence_number(self, tp, increment) -> None: ... + def reset_sequence_for_partition(self, tp) -> None: ... + def next_request_handler(self, has_incomplete_batches): ... + def retry(self, request) -> None: ... + def authentication_failed(self, exc) -> None: ... + def coordinator(self, coord_type): ... + def lookup_coordinator_for_request(self, request) -> None: ... + def next_in_flight_request_correlation_id(self): ... + def clear_in_flight_transactional_request_correlation_id(self) -> None: ... + def has_in_flight_transactional_request(self): ... + def has_fatal_error(self): ... + def has_abortable_error(self): ... + +class TransactionalRequestResult: + def __init__(self) -> None: ... + def done(self, error=None) -> None: ... + def wait(self, timeout_ms=None): ... + @property + def is_done(self): ... + @property + def succeeded(self): ... + @property + def failed(self): ... + @property + def exception(self): ... + +class TxnRequestHandler(metaclass=abc.ABCMeta): + transaction_manager: Incomplete + retry_backoff_ms: Incomplete + request: Incomplete + def __init__(self, transaction_manager, result=None) -> None: ... + @property + def transactional_id(self): ... + @property + def producer_id(self): ... + @property + def producer_epoch(self): ... + def fatal_error(self, exc) -> None: ... + def abortable_error(self, exc) -> None: ... + def fail(self, exc) -> None: ... + def reenqueue(self) -> None: ... + def on_complete(self, correlation_id, response_or_exc) -> None: ... + def needs_coordinator(self): ... + @property + def result(self): ... + @property + def coordinator_type(self): ... + @property + def coordinator_key(self): ... + def set_retry(self) -> None: ... + @property + def is_retry(self): ... + @abc.abstractmethod + def handle_response(self, response): ... + @property + @abc.abstractmethod + def priority(self): ... + +class InitProducerIdHandler(TxnRequestHandler): + request: Incomplete + def __init__(self, transaction_manager, transaction_timeout_ms) -> None: ... + @property + def priority(self): ... + def handle_response(self, response) -> None: ... + +class AddPartitionsToTxnHandler(TxnRequestHandler): + request: Incomplete + def __init__(self, transaction_manager, topic_partitions) -> None: ... + @property + def priority(self): ... + retry_backoff_ms: Incomplete + def handle_response(self, response) -> None: ... + def maybe_override_retry_backoff_ms(self) -> None: ... + +class FindCoordinatorHandler(TxnRequestHandler): + request: Incomplete + def __init__(self, transaction_manager, coord_type, coord_key) -> None: ... + @property + def priority(self): ... + @property + def coordinator_type(self) -> None: ... + @property + def coordinator_key(self) -> None: ... + def handle_response(self, response) -> None: ... + +class EndTxnHandler(TxnRequestHandler): + request: Incomplete + def __init__(self, transaction_manager, committed) -> None: ... + @property + def priority(self): ... + def handle_response(self, response) -> None: ... + +class AddOffsetsToTxnHandler(TxnRequestHandler): + consumer_group_id: Incomplete + offsets: Incomplete + request: Incomplete + def __init__(self, transaction_manager, consumer_group_id, offsets) -> None: ... + @property + def priority(self): ... + def handle_response(self, response) -> None: ... + +class TxnOffsetCommitHandler(TxnRequestHandler): + consumer_group_id: Incomplete + offsets: Incomplete + request: Incomplete + def __init__(self, transaction_manager, consumer_group_id, offsets, result) -> None: ... + @property + def priority(self): ... + @property + def coordinator_type(self): ... + @property + def coordinator_key(self): ... + def handle_response(self, response) -> None: ... diff --git a/stubs/kafka-python/kafka/protocol/__init__.pyi b/stubs/kafka-python/kafka/protocol/__init__.pyi new file mode 100644 index 000000000000..da1238775e56 --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/__init__.pyi @@ -0,0 +1,3 @@ +from _typeshed import Incomplete + +API_KEYS: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/abstract.pyi b/stubs/kafka-python/kafka/protocol/abstract.pyi new file mode 100644 index 000000000000..3229b5ccfa05 --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/abstract.pyi @@ -0,0 +1,9 @@ +import abc +from _typeshed import Incomplete + +class AbstractType(metaclass=abc.ABCMeta): + @abc.abstractmethod + def encode(cls, value): ... + @abc.abstractmethod + def decode(cls, data): ... + repr: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/add_offsets_to_txn.pyi b/stubs/kafka-python/kafka/protocol/add_offsets_to_txn.pyi new file mode 100644 index 000000000000..49066ce158a2 --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/add_offsets_to_txn.pyi @@ -0,0 +1,39 @@ +from _typeshed import Incomplete + +from kafka.protocol.api import Request, Response + +class AddOffsetsToTxnResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class AddOffsetsToTxnResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class AddOffsetsToTxnResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class AddOffsetsToTxnRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = AddOffsetsToTxnResponse_v0 + SCHEMA: Incomplete + +class AddOffsetsToTxnRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = AddOffsetsToTxnResponse_v1 + SCHEMA: Incomplete + +class AddOffsetsToTxnRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = AddOffsetsToTxnResponse_v2 + SCHEMA: Incomplete + +AddOffsetsToTxnRequest: Incomplete +AddOffsetsToTxnResponse: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/add_partitions_to_txn.pyi b/stubs/kafka-python/kafka/protocol/add_partitions_to_txn.pyi new file mode 100644 index 000000000000..4a1802ab6c28 --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/add_partitions_to_txn.pyi @@ -0,0 +1,39 @@ +from _typeshed import Incomplete + +from kafka.protocol.api import Request, Response + +class AddPartitionsToTxnResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class AddPartitionsToTxnResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class AddPartitionsToTxnResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class AddPartitionsToTxnRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = AddPartitionsToTxnResponse_v0 + SCHEMA: Incomplete + +class AddPartitionsToTxnRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = AddPartitionsToTxnResponse_v1 + SCHEMA: Incomplete + +class AddPartitionsToTxnRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = AddPartitionsToTxnResponse_v2 + SCHEMA: Incomplete + +AddPartitionsToTxnRequest: Incomplete +AddPartitionsToTxnResponse: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/admin.pyi b/stubs/kafka-python/kafka/protocol/admin.pyi new file mode 100644 index 000000000000..7330c0ae74d1 --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/admin.pyi @@ -0,0 +1,506 @@ +from _typeshed import Incomplete +from enum import IntEnum + +from kafka.protocol.api import Request, Response + +class CreateTopicsResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class CreateTopicsResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class CreateTopicsResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class CreateTopicsResponse_v3(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class CreateTopicsRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = CreateTopicsResponse_v0 + SCHEMA: Incomplete + +class CreateTopicsRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = CreateTopicsResponse_v1 + SCHEMA: Incomplete + +class CreateTopicsRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = CreateTopicsResponse_v2 + SCHEMA: Incomplete + +class CreateTopicsRequest_v3(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = CreateTopicsResponse_v3 + SCHEMA: Incomplete + +CreateTopicsRequest: Incomplete +CreateTopicsResponse: Incomplete + +class DeleteTopicsResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DeleteTopicsResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DeleteTopicsResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DeleteTopicsResponse_v3(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DeleteTopicsRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DeleteTopicsResponse_v0 + SCHEMA: Incomplete + +class DeleteTopicsRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DeleteTopicsResponse_v1 + SCHEMA: Incomplete + +class DeleteTopicsRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DeleteTopicsResponse_v2 + SCHEMA: Incomplete + +class DeleteTopicsRequest_v3(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DeleteTopicsResponse_v3 + SCHEMA: Incomplete + +DeleteTopicsRequest: Incomplete +DeleteTopicsResponse: Incomplete + +class DeleteRecordsResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DeleteRecordsRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DeleteRecordsResponse_v0 + SCHEMA: Incomplete + +DeleteRecordsResponse: Incomplete +DeleteRecordsRequest: Incomplete + +class ListGroupsResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ListGroupsResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ListGroupsResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ListGroupsRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = ListGroupsResponse_v0 + SCHEMA: Incomplete + +class ListGroupsRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = ListGroupsResponse_v1 + SCHEMA: Incomplete + +class ListGroupsRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = ListGroupsResponse_v2 + SCHEMA: Incomplete + +ListGroupsRequest: Incomplete +ListGroupsResponse: Incomplete + +class DescribeGroupsResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DescribeGroupsResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DescribeGroupsResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DescribeGroupsResponse_v3(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DescribeGroupsRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DescribeGroupsResponse_v0 + SCHEMA: Incomplete + +class DescribeGroupsRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DescribeGroupsResponse_v1 + SCHEMA: Incomplete + +class DescribeGroupsRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DescribeGroupsResponse_v2 + SCHEMA: Incomplete + +class DescribeGroupsRequest_v3(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DescribeGroupsResponse_v3 + SCHEMA: Incomplete + +DescribeGroupsRequest: Incomplete +DescribeGroupsResponse: Incomplete + +class DescribeAclsResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DescribeAclsResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DescribeAclsResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DescribeAclsRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DescribeAclsResponse_v0 + SCHEMA: Incomplete + +class DescribeAclsRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DescribeAclsResponse_v1 + SCHEMA: Incomplete + +class DescribeAclsRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DescribeAclsResponse_v2 + SCHEMA: Incomplete + +DescribeAclsRequest: Incomplete +DescribeAclsResponse: Incomplete + +class CreateAclsResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class CreateAclsResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class CreateAclsRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = CreateAclsResponse_v0 + SCHEMA: Incomplete + +class CreateAclsRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = CreateAclsResponse_v1 + SCHEMA: Incomplete + +CreateAclsRequest: Incomplete +CreateAclsResponse: Incomplete + +class DeleteAclsResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DeleteAclsResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DeleteAclsRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DeleteAclsResponse_v0 + SCHEMA: Incomplete + +class DeleteAclsRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DeleteAclsResponse_v1 + SCHEMA: Incomplete + +DeleteAclsRequest: Incomplete +DeleteAclsResponse: Incomplete + +class AlterConfigsResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class AlterConfigsResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class AlterConfigsRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = AlterConfigsResponse_v0 + SCHEMA: Incomplete + +class AlterConfigsRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = AlterConfigsResponse_v1 + SCHEMA: Incomplete + +AlterConfigsRequest: Incomplete +AlterConfigsResponse: Incomplete + +class DescribeConfigsResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DescribeConfigsResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DescribeConfigsResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DescribeConfigsRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DescribeConfigsResponse_v0 + SCHEMA: Incomplete + +class DescribeConfigsRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DescribeConfigsResponse_v1 + SCHEMA: Incomplete + +class DescribeConfigsRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DescribeConfigsResponse_v2 + SCHEMA: Incomplete + +DescribeConfigsRequest: Incomplete +DescribeConfigsResponse: Incomplete + +class DescribeLogDirsResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DescribeLogDirsRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DescribeLogDirsResponse_v0 + SCHEMA: Incomplete + +DescribeLogDirsResponse: Incomplete +DescribeLogDirsRequest: Incomplete + +class SaslAuthenticateResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class SaslAuthenticateResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class SaslAuthenticateRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = SaslAuthenticateResponse_v0 + SCHEMA: Incomplete + +class SaslAuthenticateRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = SaslAuthenticateResponse_v1 + SCHEMA: Incomplete + +SaslAuthenticateRequest: Incomplete +SaslAuthenticateResponse: Incomplete + +class CreatePartitionsResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class CreatePartitionsResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class CreatePartitionsRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = CreatePartitionsResponse_v0 + SCHEMA: Incomplete + +class CreatePartitionsRequest_v1(Request): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + RESPONSE_TYPE = CreatePartitionsResponse_v1 + +CreatePartitionsRequest: Incomplete +CreatePartitionsResponse: Incomplete + +class DeleteGroupsResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DeleteGroupsResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DeleteGroupsRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DeleteGroupsResponse_v0 + SCHEMA: Incomplete + +class DeleteGroupsRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DeleteGroupsResponse_v1 + SCHEMA: Incomplete + +DeleteGroupsRequest: Incomplete +DeleteGroupsResponse: Incomplete + +class DescribeClientQuotasResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class DescribeClientQuotasRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = DescribeClientQuotasResponse_v0 + SCHEMA: Incomplete + +DescribeClientQuotasRequest: Incomplete +DescribeClientQuotasResponse: Incomplete + +class AlterPartitionReassignmentsResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + FLEXIBLE_VERSION: bool + +class AlterPartitionReassignmentsRequest_v0(Request): + FLEXIBLE_VERSION: bool + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = AlterPartitionReassignmentsResponse_v0 + SCHEMA: Incomplete + +AlterPartitionReassignmentsRequest: Incomplete +AlterPartitionReassignmentsResponse: Incomplete + +class ListPartitionReassignmentsResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + FLEXIBLE_VERSION: bool + +class ListPartitionReassignmentsRequest_v0(Request): + FLEXIBLE_VERSION: bool + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = ListPartitionReassignmentsResponse_v0 + SCHEMA: Incomplete + +ListPartitionReassignmentsRequest: Incomplete +ListPartitionReassignmentsResponse: Incomplete + +class ElectLeadersResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ElectLeadersRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = ElectLeadersResponse_v0 + SCHEMA: Incomplete + +class ElectLeadersResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ElectLeadersRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = ElectLeadersResponse_v1 + SCHEMA: Incomplete + +class ElectionType(IntEnum): + PREFERRED = 0 + UNCLEAN = 1 + +ElectLeadersRequest: Incomplete +ElectLeadersResponse: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/api.pyi b/stubs/kafka-python/kafka/protocol/api.pyi new file mode 100644 index 000000000000..72634ee5ee15 --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/api.pyi @@ -0,0 +1,37 @@ +import abc +from _typeshed import Incomplete + +from kafka.protocol.struct import Struct + +class RequestHeader(Struct): + SCHEMA: Incomplete + def __init__(self, request, correlation_id: int = 0, client_id: str = "kafka-python") -> None: ... + +class RequestHeaderV2(Struct): + SCHEMA: Incomplete + def __init__(self, request, correlation_id: int = 0, client_id: str = "kafka-python", tags=None) -> None: ... + +class ResponseHeader(Struct): + SCHEMA: Incomplete + +class ResponseHeaderV2(Struct): + SCHEMA: Incomplete + +class Request(Struct, metaclass=abc.ABCMeta): + FLEXIBLE_VERSION: bool + API_KEY: Incomplete + API_VERSION: Incomplete + SCHEMA: Incomplete + RESPONSE_TYPE: Incomplete + def expect_response(self): ... + def to_object(self): ... + def build_header(self, correlation_id, client_id): ... + +class Response(Struct, metaclass=abc.ABCMeta): + FLEXIBLE_VERSION: bool + API_KEY: Incomplete + API_VERSION: Incomplete + SCHEMA: Incomplete + def to_object(self): ... + @classmethod + def parse_header(cls, read_buffer): ... diff --git a/stubs/kafka-python/kafka/protocol/api_versions.pyi b/stubs/kafka-python/kafka/protocol/api_versions.pyi new file mode 100644 index 000000000000..2d1a480aba34 --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/api_versions.pyi @@ -0,0 +1,70 @@ +from _typeshed import Incomplete + +from kafka.protocol.api import Request, Response + +class BaseApiVersionsResponse(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + @classmethod + def decode(cls, data): ... + +class ApiVersionsResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ApiVersionsResponse_v1(BaseApiVersionsResponse): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ApiVersionsResponse_v2(BaseApiVersionsResponse): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ApiVersionsResponse_v3(BaseApiVersionsResponse): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ApiVersionsResponse_v4(BaseApiVersionsResponse): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ApiVersionsRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = ApiVersionsResponse_v0 + SCHEMA: Incomplete + +class ApiVersionsRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = ApiVersionsResponse_v1 + SCHEMA: Incomplete + +class ApiVersionsRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = ApiVersionsResponse_v2 + SCHEMA: Incomplete + +class ApiVersionsRequest_v3(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = ApiVersionsResponse_v3 + SCHEMA: Incomplete + FLEXIBLE_VERSION: bool + +class ApiVersionsRequest_v4(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = ApiVersionsResponse_v4 + SCHEMA: Incomplete + FLEXIBLE_VERSION: bool + +ApiVersionsRequest: Incomplete +ApiVersionsResponse: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/broker_api_versions.pyi b/stubs/kafka-python/kafka/protocol/broker_api_versions.pyi new file mode 100644 index 000000000000..9a9a50c93d65 --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/broker_api_versions.pyi @@ -0,0 +1,3 @@ +from _typeshed import Incomplete + +BROKER_API_VERSIONS: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/commit.pyi b/stubs/kafka-python/kafka/protocol/commit.pyi new file mode 100644 index 000000000000..1d3c08d81410 --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/commit.pyi @@ -0,0 +1,166 @@ +from _typeshed import Incomplete + +from kafka.protocol.api import Request, Response + +class OffsetCommitResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class OffsetCommitResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class OffsetCommitResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class OffsetCommitResponse_v3(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class OffsetCommitResponse_v4(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class OffsetCommitResponse_v5(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class OffsetCommitResponse_v6(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class OffsetCommitResponse_v7(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class OffsetCommitRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = OffsetCommitResponse_v0 + SCHEMA: Incomplete + +class OffsetCommitRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = OffsetCommitResponse_v1 + SCHEMA: Incomplete + +class OffsetCommitRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = OffsetCommitResponse_v2 + SCHEMA: Incomplete + DEFAULT_RETENTION_TIME: int + +class OffsetCommitRequest_v3(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = OffsetCommitResponse_v3 + SCHEMA: Incomplete + DEFAULT_RETENTION_TIME: int + +class OffsetCommitRequest_v4(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = OffsetCommitResponse_v4 + SCHEMA: Incomplete + DEFAULT_RETENTION_TIME: int + +class OffsetCommitRequest_v5(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = OffsetCommitResponse_v5 + SCHEMA: Incomplete + +class OffsetCommitRequest_v6(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = OffsetCommitResponse_v6 + SCHEMA: Incomplete + +class OffsetCommitRequest_v7(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = OffsetCommitResponse_v7 + SCHEMA: Incomplete + +OffsetCommitRequest: Incomplete +OffsetCommitResponse: Incomplete + +class OffsetFetchResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class OffsetFetchResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class OffsetFetchResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class OffsetFetchResponse_v3(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class OffsetFetchResponse_v4(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class OffsetFetchResponse_v5(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class OffsetFetchRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = OffsetFetchResponse_v0 + SCHEMA: Incomplete + +class OffsetFetchRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = OffsetFetchResponse_v1 + SCHEMA: Incomplete + +class OffsetFetchRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = OffsetFetchResponse_v2 + SCHEMA: Incomplete + +class OffsetFetchRequest_v3(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = OffsetFetchResponse_v3 + SCHEMA: Incomplete + +class OffsetFetchRequest_v4(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = OffsetFetchResponse_v4 + SCHEMA: Incomplete + +class OffsetFetchRequest_v5(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = OffsetFetchResponse_v5 + SCHEMA: Incomplete + +OffsetFetchRequest: Incomplete +OffsetFetchResponse: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/end_txn.pyi b/stubs/kafka-python/kafka/protocol/end_txn.pyi new file mode 100644 index 000000000000..07ba52aa0f26 --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/end_txn.pyi @@ -0,0 +1,39 @@ +from _typeshed import Incomplete + +from kafka.protocol.api import Request, Response + +class EndTxnResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class EndTxnResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class EndTxnResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class EndTxnRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = EndTxnResponse_v0 + SCHEMA: Incomplete + +class EndTxnRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = EndTxnResponse_v1 + SCHEMA: Incomplete + +class EndTxnRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = EndTxnResponse_v2 + SCHEMA: Incomplete + +EndTxnRequest: Incomplete +EndTxnResponse: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/fetch.pyi b/stubs/kafka-python/kafka/protocol/fetch.pyi new file mode 100644 index 000000000000..e110f1557fcc --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/fetch.pyi @@ -0,0 +1,143 @@ +from _typeshed import Incomplete +from typing import NamedTuple + +from kafka.protocol.api import Request, Response + +class AbortedTransaction(NamedTuple): + producer_id: Incomplete + first_offset: Incomplete + +class FetchResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class FetchResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class FetchResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class FetchResponse_v3(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class FetchResponse_v4(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class FetchResponse_v5(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class FetchResponse_v6(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class FetchResponse_v7(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class FetchResponse_v8(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class FetchResponse_v9(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class FetchResponse_v10(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class FetchResponse_v11(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class FetchRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = FetchResponse_v0 + SCHEMA: Incomplete + +class FetchRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = FetchResponse_v1 + SCHEMA: Incomplete + +class FetchRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = FetchResponse_v2 + SCHEMA: Incomplete + +class FetchRequest_v3(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = FetchResponse_v3 + SCHEMA: Incomplete + +class FetchRequest_v4(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = FetchResponse_v4 + SCHEMA: Incomplete + +class FetchRequest_v5(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = FetchResponse_v5 + SCHEMA: Incomplete + +class FetchRequest_v6(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = FetchResponse_v6 + SCHEMA: Incomplete + +class FetchRequest_v7(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = FetchResponse_v7 + SCHEMA: Incomplete + +class FetchRequest_v8(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = FetchResponse_v8 + SCHEMA: Incomplete + +class FetchRequest_v9(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = FetchResponse_v9 + SCHEMA: Incomplete + +class FetchRequest_v10(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = FetchResponse_v10 + SCHEMA: Incomplete + +class FetchRequest_v11(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = FetchResponse_v11 + SCHEMA: Incomplete + +FetchRequest: Incomplete +FetchResponse: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/find_coordinator.pyi b/stubs/kafka-python/kafka/protocol/find_coordinator.pyi new file mode 100644 index 000000000000..bd121a8d50ab --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/find_coordinator.pyi @@ -0,0 +1,39 @@ +from _typeshed import Incomplete + +from kafka.protocol.api import Request, Response + +class FindCoordinatorResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class FindCoordinatorResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class FindCoordinatorResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class FindCoordinatorRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = FindCoordinatorResponse_v0 + SCHEMA: Incomplete + +class FindCoordinatorRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = FindCoordinatorResponse_v1 + SCHEMA: Incomplete + +class FindCoordinatorRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = FindCoordinatorResponse_v2 + SCHEMA: Incomplete + +FindCoordinatorRequest: Incomplete +FindCoordinatorResponse: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/frame.pyi b/stubs/kafka-python/kafka/protocol/frame.pyi new file mode 100644 index 000000000000..b3c8b9647588 --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/frame.pyi @@ -0,0 +1,6 @@ +class KafkaBytes(bytearray): + def __init__(self, size) -> None: ... + def read(self, nbytes=None): ... + def write(self, data) -> None: ... + def seek(self, idx) -> None: ... + def tell(self): ... diff --git a/stubs/kafka-python/kafka/protocol/group.pyi b/stubs/kafka-python/kafka/protocol/group.pyi new file mode 100644 index 000000000000..ea618f7e841c --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/group.pyi @@ -0,0 +1,229 @@ +from _typeshed import Incomplete +from typing import NamedTuple + +from kafka.protocol.api import Request, Response +from kafka.protocol.struct import Struct + +DEFAULT_GENERATION_ID: int +UNKNOWN_MEMBER_ID: str + +class GroupMember(NamedTuple): + member_id: Incomplete + group_instance_id: Incomplete + metadata_bytes: Incomplete + +class JoinGroupResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class JoinGroupResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class JoinGroupResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class JoinGroupResponse_v3(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class JoinGroupResponse_v4(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class JoinGroupResponse_v5(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class JoinGroupRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = JoinGroupResponse_v0 + SCHEMA: Incomplete + +class JoinGroupRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = JoinGroupResponse_v1 + SCHEMA: Incomplete + +class JoinGroupRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = JoinGroupResponse_v2 + SCHEMA: Incomplete + +class JoinGroupRequest_v3(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = JoinGroupResponse_v3 + SCHEMA: Incomplete + +class JoinGroupRequest_v4(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = JoinGroupResponse_v4 + SCHEMA: Incomplete + +class JoinGroupRequest_v5(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = JoinGroupResponse_v5 + SCHEMA: Incomplete + +JoinGroupRequest: Incomplete +JoinGroupResponse: Incomplete + +class ProtocolMetadata(Struct): + SCHEMA: Incomplete + +class SyncGroupResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class SyncGroupResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class SyncGroupResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class SyncGroupResponse_v3(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class SyncGroupRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = SyncGroupResponse_v0 + SCHEMA: Incomplete + +class SyncGroupRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = SyncGroupResponse_v1 + SCHEMA: Incomplete + +class SyncGroupRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = SyncGroupResponse_v2 + SCHEMA: Incomplete + +class SyncGroupRequest_v3(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = SyncGroupResponse_v3 + SCHEMA: Incomplete + +SyncGroupRequest: Incomplete +SyncGroupResponse: Incomplete + +class MemberAssignment(Struct): + SCHEMA: Incomplete + +class HeartbeatResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class HeartbeatResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class HeartbeatResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class HeartbeatResponse_v3(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class HeartbeatRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = HeartbeatResponse_v0 + SCHEMA: Incomplete + +class HeartbeatRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = HeartbeatResponse_v1 + SCHEMA: Incomplete + +class HeartbeatRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = HeartbeatResponse_v2 + SCHEMA: Incomplete + +class HeartbeatRequest_v3(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = HeartbeatResponse_v3 + SCHEMA: Incomplete + +HeartbeatRequest: Incomplete +HeartbeatResponse: Incomplete + +class LeaveGroupResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class LeaveGroupResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class LeaveGroupResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class LeaveGroupResponse_v3(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class LeaveGroupRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = LeaveGroupResponse_v0 + SCHEMA: Incomplete + +class LeaveGroupRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = LeaveGroupResponse_v1 + SCHEMA: Incomplete + +class LeaveGroupRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = LeaveGroupResponse_v2 + SCHEMA: Incomplete + +class LeaveGroupRequest_v3(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = LeaveGroupResponse_v3 + SCHEMA: Incomplete + +LeaveGroupRequest: Incomplete +LeaveGroupResponse: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/init_producer_id.pyi b/stubs/kafka-python/kafka/protocol/init_producer_id.pyi new file mode 100644 index 000000000000..0025ce3e33c7 --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/init_producer_id.pyi @@ -0,0 +1,28 @@ +from _typeshed import Incomplete + +from kafka.protocol.api import Request, Response + +class InitProducerIdResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class InitProducerIdResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class InitProducerIdRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = InitProducerIdResponse_v0 + SCHEMA: Incomplete + +class InitProducerIdRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = InitProducerIdResponse_v1 + SCHEMA: Incomplete + +InitProducerIdRequest: Incomplete +InitProducerIdResponse: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/list_offsets.pyi b/stubs/kafka-python/kafka/protocol/list_offsets.pyi new file mode 100644 index 000000000000..f8fe7767e0b3 --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/list_offsets.pyi @@ -0,0 +1,85 @@ +from _typeshed import Incomplete + +from kafka.protocol.api import Request, Response + +UNKNOWN_OFFSET: int + +class OffsetResetStrategy: + LATEST: int + EARLIEST: int + NONE: int + +class ListOffsetsResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ListOffsetsResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ListOffsetsResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ListOffsetsResponse_v3(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ListOffsetsResponse_v4(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ListOffsetsResponse_v5(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ListOffsetsRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = ListOffsetsResponse_v0 + SCHEMA: Incomplete + DEFAULTS: Incomplete + +class ListOffsetsRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = ListOffsetsResponse_v1 + SCHEMA: Incomplete + DEFAULTS: Incomplete + +class ListOffsetsRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = ListOffsetsResponse_v2 + SCHEMA: Incomplete + DEFAULTS: Incomplete + +class ListOffsetsRequest_v3(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = ListOffsetsResponse_v3 + SCHEMA: Incomplete + DEFAULTS: Incomplete + +class ListOffsetsRequest_v4(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = ListOffsetsResponse_v4 + SCHEMA: Incomplete + DEFAULTS: Incomplete + +class ListOffsetsRequest_v5(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = ListOffsetsResponse_v5 + SCHEMA: Incomplete + DEFAULTS: Incomplete + +ListOffsetsRequest: Incomplete +ListOffsetsResponse: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/message.pyi b/stubs/kafka-python/kafka/protocol/message.pyi new file mode 100644 index 000000000000..3e2a48204671 --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/message.pyi @@ -0,0 +1,43 @@ +from _typeshed import Incomplete + +from kafka.protocol.struct import Struct +from kafka.protocol.types import AbstractType + +class Message(Struct): + SCHEMAS: Incomplete + SCHEMA: Incomplete + CODEC_MASK: int + CODEC_GZIP: int + CODEC_SNAPPY: int + CODEC_LZ4: int + CODEC_ZSTD: int + TIMESTAMP_TYPE_MASK: int + HEADER_SIZE: int + timestamp: Incomplete + crc: Incomplete + magic: Incomplete + attributes: Incomplete + key: Incomplete + value: Incomplete + encode: Incomplete + def __init__(self, value, key=None, magic: int = 0, attributes: int = 0, crc: int = 0, timestamp=None) -> None: ... + @property + def timestamp_type(self): ... + @classmethod + def decode(cls, data): ... + def validate_crc(self): ... + def is_compressed(self): ... + def decompress(self): ... + def __hash__(self): ... + +class PartialMessage(bytes): ... + +class MessageSet(AbstractType): + ITEM: Incomplete + HEADER_SIZE: int + @classmethod + def encode(cls, items, prepend_size: bool = True): ... + @classmethod + def decode(cls, data, bytes_to_read=None): ... + @classmethod + def repr(cls, messages): ... diff --git a/stubs/kafka-python/kafka/protocol/metadata.pyi b/stubs/kafka-python/kafka/protocol/metadata.pyi new file mode 100644 index 000000000000..429ef2d111d6 --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/metadata.pyi @@ -0,0 +1,123 @@ +from _typeshed import Incomplete + +from kafka.protocol.api import Request, Response + +class MetadataResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class MetadataResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class MetadataResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class MetadataResponse_v3(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class MetadataResponse_v4(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class MetadataResponse_v5(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class MetadataResponse_v6(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class MetadataResponse_v7(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class MetadataResponse_v8(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class MetadataRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = MetadataResponse_v0 + SCHEMA: Incomplete + ALL_TOPICS: Incomplete + NO_TOPICS: Incomplete + +class MetadataRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = MetadataResponse_v1 + SCHEMA: Incomplete + ALL_TOPICS: Incomplete + NO_TOPICS: Incomplete + +class MetadataRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = MetadataResponse_v2 + SCHEMA: Incomplete + ALL_TOPICS: Incomplete + NO_TOPICS: Incomplete + +class MetadataRequest_v3(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = MetadataResponse_v3 + SCHEMA: Incomplete + ALL_TOPICS: Incomplete + NO_TOPICS: Incomplete + +class MetadataRequest_v4(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = MetadataResponse_v4 + SCHEMA: Incomplete + ALL_TOPICS: Incomplete + NO_TOPICS: Incomplete + +class MetadataRequest_v5(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = MetadataResponse_v5 + SCHEMA: Incomplete + ALL_TOPICS: Incomplete + NO_TOPICS: Incomplete + +class MetadataRequest_v6(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = MetadataResponse_v6 + SCHEMA: Incomplete + ALL_TOPICS: Incomplete + NO_TOPICS: Incomplete + +class MetadataRequest_v7(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = MetadataResponse_v7 + SCHEMA: Incomplete + ALL_TOPICS: Incomplete + NO_TOPICS: Incomplete + +class MetadataRequest_v8(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = MetadataResponse_v8 + SCHEMA: Incomplete + ALL_TOPICS: Incomplete + NO_TOPICS: Incomplete + +MetadataRequest: Incomplete +MetadataResponse: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/offset_for_leader_epoch.pyi b/stubs/kafka-python/kafka/protocol/offset_for_leader_epoch.pyi new file mode 100644 index 000000000000..2d0c5e9aee2f --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/offset_for_leader_epoch.pyi @@ -0,0 +1,61 @@ +from _typeshed import Incomplete + +from kafka.protocol.api import Request, Response + +class OffsetForLeaderEpochResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class OffsetForLeaderEpochResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class OffsetForLeaderEpochResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class OffsetForLeaderEpochResponse_v3(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class OffsetForLeaderEpochResponse_v4(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class OffsetForLeaderEpochRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = OffsetForLeaderEpochResponse_v0 + SCHEMA: Incomplete + +class OffsetForLeaderEpochRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = OffsetForLeaderEpochResponse_v1 + SCHEMA: Incomplete + +class OffsetForLeaderEpochRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = OffsetForLeaderEpochResponse_v2 + SCHEMA: Incomplete + +class OffsetForLeaderEpochRequest_v3(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = OffsetForLeaderEpochResponse_v3 + SCHEMA: Incomplete + +class OffsetForLeaderEpochRequest_v4(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = OffsetForLeaderEpochResponse_v4 + SCHEMA: Incomplete + +OffsetForLeaderEpochRequest: Incomplete +OffsetForLeaderEpochResponse: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/parser.pyi b/stubs/kafka-python/kafka/protocol/parser.pyi new file mode 100644 index 000000000000..7d0cf2946e66 --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/parser.pyi @@ -0,0 +1,11 @@ +from _typeshed import Incomplete + +log: Incomplete + +class KafkaProtocol: + in_flight_requests: Incomplete + bytes_to_send: Incomplete + def __init__(self, client_id=None, api_version=None) -> None: ... + def send_request(self, request, correlation_id=None): ... + def send_bytes(self): ... + def receive_bytes(self, data): ... diff --git a/stubs/kafka-python/kafka/protocol/produce.pyi b/stubs/kafka-python/kafka/protocol/produce.pyi new file mode 100644 index 000000000000..98c88ea0c62b --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/produce.pyi @@ -0,0 +1,100 @@ +import abc +from _typeshed import Incomplete + +from kafka.protocol.api import Request, Response + +class ProduceResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ProduceResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ProduceResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ProduceResponse_v3(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ProduceResponse_v4(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ProduceResponse_v5(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ProduceResponse_v6(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ProduceResponse_v7(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ProduceResponse_v8(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class ProduceRequest(Request, metaclass=abc.ABCMeta): + API_KEY: int + def expect_response(self): ... + +class ProduceRequest_v0(ProduceRequest): + API_VERSION: int + RESPONSE_TYPE = ProduceResponse_v0 + SCHEMA: Incomplete + +class ProduceRequest_v1(ProduceRequest): + API_VERSION: int + RESPONSE_TYPE = ProduceResponse_v1 + SCHEMA: Incomplete + +class ProduceRequest_v2(ProduceRequest): + API_VERSION: int + RESPONSE_TYPE = ProduceResponse_v2 + SCHEMA: Incomplete + +class ProduceRequest_v3(ProduceRequest): + API_VERSION: int + RESPONSE_TYPE = ProduceResponse_v3 + SCHEMA: Incomplete + +class ProduceRequest_v4(ProduceRequest): + API_VERSION: int + RESPONSE_TYPE = ProduceResponse_v4 + SCHEMA: Incomplete + +class ProduceRequest_v5(ProduceRequest): + API_VERSION: int + RESPONSE_TYPE = ProduceResponse_v5 + SCHEMA: Incomplete + +class ProduceRequest_v6(ProduceRequest): + API_VERSION: int + RESPONSE_TYPE = ProduceResponse_v6 + SCHEMA: Incomplete + +class ProduceRequest_v7(ProduceRequest): + API_VERSION: int + RESPONSE_TYPE = ProduceResponse_v7 + SCHEMA: Incomplete + +class ProduceRequest_v8(ProduceRequest): + API_VERSION: int + RESPONSE_TYPE = ProduceResponse_v8 + SCHEMA: Incomplete + +ProduceResponse: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/sasl_authenticate.pyi b/stubs/kafka-python/kafka/protocol/sasl_authenticate.pyi new file mode 100644 index 000000000000..da9781407f5b --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/sasl_authenticate.pyi @@ -0,0 +1,28 @@ +from _typeshed import Incomplete + +from kafka.protocol.api import Request, Response + +class SaslAuthenticateResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class SaslAuthenticateResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class SaslAuthenticateRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = SaslAuthenticateResponse_v0 + SCHEMA: Incomplete + +class SaslAuthenticateRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = SaslAuthenticateResponse_v1 + SCHEMA: Incomplete + +SaslAuthenticateRequest: Incomplete +SaslAuthenticateResponse: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/sasl_handshake.pyi b/stubs/kafka-python/kafka/protocol/sasl_handshake.pyi new file mode 100644 index 000000000000..dad4e65bea5b --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/sasl_handshake.pyi @@ -0,0 +1,28 @@ +from _typeshed import Incomplete + +from kafka.protocol.api import Request, Response + +class SaslHandshakeResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class SaslHandshakeResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class SaslHandshakeRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = SaslHandshakeResponse_v0 + SCHEMA: Incomplete + +class SaslHandshakeRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = SaslHandshakeResponse_v1 + SCHEMA: Incomplete + +SaslHandshakeRequest: Incomplete +SaslHandshakeResponse: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/struct.pyi b/stubs/kafka-python/kafka/protocol/struct.pyi new file mode 100644 index 000000000000..11de387016c4 --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/struct.pyi @@ -0,0 +1,14 @@ +from _typeshed import Incomplete + +from kafka.protocol.abstract import AbstractType + +class Struct(AbstractType): + SCHEMA: Incomplete + def __init__(self, *args, **kwargs) -> None: ... + @classmethod + def encode(cls, item): ... + @classmethod + def decode(cls, data): ... + def get_item(self, name): ... + def __hash__(self): ... + def __eq__(self, other): ... diff --git a/stubs/kafka-python/kafka/protocol/txn_offset_commit.pyi b/stubs/kafka-python/kafka/protocol/txn_offset_commit.pyi new file mode 100644 index 000000000000..d9b035c097da --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/txn_offset_commit.pyi @@ -0,0 +1,39 @@ +from _typeshed import Incomplete + +from kafka.protocol.api import Request, Response + +class TxnOffsetCommitResponse_v0(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class TxnOffsetCommitResponse_v1(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class TxnOffsetCommitResponse_v2(Response): + API_KEY: int + API_VERSION: int + SCHEMA: Incomplete + +class TxnOffsetCommitRequest_v0(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = TxnOffsetCommitResponse_v0 + SCHEMA: Incomplete + +class TxnOffsetCommitRequest_v1(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = TxnOffsetCommitResponse_v1 + SCHEMA: Incomplete + +class TxnOffsetCommitRequest_v2(Request): + API_KEY: int + API_VERSION: int + RESPONSE_TYPE = TxnOffsetCommitResponse_v2 + SCHEMA: Incomplete + +TxnOffsetCommitRequest: Incomplete +TxnOffsetCommitResponse: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/types.pyi b/stubs/kafka-python/kafka/protocol/types.pyi new file mode 100644 index 000000000000..d1cc891ab005 --- /dev/null +++ b/stubs/kafka-python/kafka/protocol/types.pyi @@ -0,0 +1,115 @@ +from _typeshed import Incomplete + +from kafka.protocol.abstract import AbstractType as AbstractType + +class Int8(AbstractType): + @classmethod + def encode(cls, value): ... + @classmethod + def decode(cls, data): ... + +class Int16(AbstractType): + @classmethod + def encode(cls, value): ... + @classmethod + def decode(cls, data): ... + +class Int32(AbstractType): + @classmethod + def encode(cls, value): ... + @classmethod + def decode(cls, data): ... + +class Int64(AbstractType): + @classmethod + def encode(cls, value): ... + @classmethod + def decode(cls, data): ... + +class Float64(AbstractType): + @classmethod + def encode(cls, value): ... + @classmethod + def decode(cls, data): ... + +class String(AbstractType): + encoding: Incomplete + def __init__(self, encoding: str = "utf-8") -> None: ... + def encode(self, value): ... + def decode(self, data): ... + +class Bytes(AbstractType): + @classmethod + def encode(cls, value): ... + @classmethod + def decode(cls, data): ... + @classmethod + def repr(cls, value): ... + +class Boolean(AbstractType): + @classmethod + def encode(cls, value): ... + @classmethod + def decode(cls, data): ... + +class Schema(AbstractType): + def __init__(self, *fields) -> None: ... + def encode(self, item): ... + def decode(self, data): ... + def __len__(self) -> int: ... + def repr(self, value): ... + +class Array(AbstractType): + array_of: Incomplete + def __init__(self, *array_of) -> None: ... + def encode(self, items): ... + def decode(self, data): ... + def repr(self, list_of_items): ... + +class UnsignedVarInt32(AbstractType): + @classmethod + def decode(cls, data): ... + @classmethod + def encode(cls, value): ... + +class VarInt32(AbstractType): + @classmethod + def decode(cls, data): ... + @classmethod + def encode(cls, value): ... + +class VarInt64(AbstractType): + @classmethod + def decode(cls, data): ... + @classmethod + def encode(cls, value): ... + +class CompactString(String): + def decode(self, data): ... + def encode(self, value): ... + +class TaggedFields(AbstractType): + @classmethod + def decode(cls, data): ... + @classmethod + def encode(cls, value): ... + +class CompactBytes(AbstractType): + @classmethod + def decode(cls, data): ... + @classmethod + def encode(cls, value): ... + +class CompactArray(Array): + def encode(self, items): ... + def decode(self, data): ... + +class BitField(AbstractType): + @classmethod + def decode(cls, data): ... + @classmethod + def encode(cls, vals): ... + @classmethod + def to_32_bit_field(cls, vals): ... + @classmethod + def from_32_bit_field(cls, value): ... diff --git a/stubs/kafka-python/kafka/record/__init__.pyi b/stubs/kafka-python/kafka/record/__init__.pyi new file mode 100644 index 000000000000..7ac09dc7e0d8 --- /dev/null +++ b/stubs/kafka-python/kafka/record/__init__.pyi @@ -0,0 +1,3 @@ +from kafka.record.memory_records import MemoryRecords as MemoryRecords, MemoryRecordsBuilder as MemoryRecordsBuilder + +__all__ = ["MemoryRecords", "MemoryRecordsBuilder"] diff --git a/stubs/kafka-python/kafka/record/_crc32c.pyi b/stubs/kafka-python/kafka/record/_crc32c.pyi new file mode 100644 index 000000000000..3337132fe642 --- /dev/null +++ b/stubs/kafka-python/kafka/record/_crc32c.pyi @@ -0,0 +1,8 @@ +from _typeshed import Incomplete + +CRC_TABLE: Incomplete +CRC_INIT: int + +def crc_update(crc, data): ... +def crc_finalize(crc): ... +def crc(data): ... diff --git a/stubs/kafka-python/kafka/record/abc.pyi b/stubs/kafka-python/kafka/record/abc.pyi new file mode 100644 index 000000000000..c351d4fb6611 --- /dev/null +++ b/stubs/kafka-python/kafka/record/abc.pyi @@ -0,0 +1,60 @@ +import abc + +class ABCRecord(metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def size_in_bytes(self): ... + @property + @abc.abstractmethod + def offset(self): ... + @property + @abc.abstractmethod + def timestamp(self): ... + @property + @abc.abstractmethod + def timestamp_type(self): ... + @property + @abc.abstractmethod + def key(self): ... + @property + @abc.abstractmethod + def value(self): ... + @property + @abc.abstractmethod + def checksum(self): ... + @abc.abstractmethod + def validate_crc(self): ... + @property + @abc.abstractmethod + def headers(self): ... + +class ABCRecordBatchBuilder(metaclass=abc.ABCMeta): + @abc.abstractmethod + def append(self, offset, timestamp, key, value, headers=None): ... + @abc.abstractmethod + def size_in_bytes(self, offset, timestamp, key, value, headers): ... + @abc.abstractmethod + def build(self): ... + +class ABCRecordBatch(metaclass=abc.ABCMeta): + @abc.abstractmethod + def __iter__(self): ... + @property + @abc.abstractmethod + def base_offset(self): ... + @property + @abc.abstractmethod + def size_in_bytes(self): ... + @property + @abc.abstractmethod + def magic(self): ... + +class ABCRecords(metaclass=abc.ABCMeta): + @abc.abstractmethod + def __init__(self, buffer): ... + @abc.abstractmethod + def size_in_bytes(self): ... + @abc.abstractmethod + def next_batch(self): ... + @abc.abstractmethod + def has_next(self): ... diff --git a/stubs/kafka-python/kafka/record/default_records.pyi b/stubs/kafka-python/kafka/record/default_records.pyi new file mode 100644 index 000000000000..e70f859a1307 --- /dev/null +++ b/stubs/kafka-python/kafka/record/default_records.pyi @@ -0,0 +1,155 @@ +from _typeshed import Incomplete + +from kafka.record.abc import ABCRecord, ABCRecordBatch, ABCRecordBatchBuilder + +class DefaultRecordBase: + HEADER_STRUCT: Incomplete + ATTRIBUTES_OFFSET: Incomplete + CRC_OFFSET: Incomplete + AFTER_LEN_OFFSET: Incomplete + CODEC_MASK: int + CODEC_NONE: int + CODEC_GZIP: int + CODEC_SNAPPY: int + CODEC_LZ4: int + CODEC_ZSTD: int + TIMESTAMP_TYPE_MASK: int + TRANSACTIONAL_MASK: int + CONTROL_MASK: int + LOG_APPEND_TIME: int + CREATE_TIME: int + NO_PRODUCER_ID: int + NO_SEQUENCE: int + MAX_INT: int + +class DefaultRecordBatch(DefaultRecordBase, ABCRecordBatch): + def __init__(self, buffer) -> None: ... + @property + def base_offset(self): ... + @property + def size_in_bytes(self): ... + @property + def leader_epoch(self): ... + @property + def magic(self): ... + @property + def crc(self): ... + @property + def attributes(self): ... + @property + def last_offset_delta(self): ... + @property + def last_offset(self): ... + @property + def next_offset(self): ... + @property + def compression_type(self): ... + @property + def timestamp_type(self): ... + @property + def is_transactional(self): ... + @property + def is_control_batch(self): ... + @property + def first_timestamp(self): ... + @property + def max_timestamp(self): ... + @property + def producer_id(self): ... + def has_producer_id(self): ... + @property + def producer_epoch(self): ... + @property + def base_sequence(self): ... + @property + def has_sequence(self): ... + @property + def last_sequence(self): ... + @property + def records_count(self): ... + def __iter__(self): ... + def __next__(self): ... + next = __next__ + def validate_crc(self): ... + +class DefaultRecord(ABCRecord): + def __init__(self, size_in_bytes, offset, timestamp, timestamp_type, key, value, headers) -> None: ... + @property + def size_in_bytes(self): ... + @property + def offset(self): ... + @property + def timestamp(self): ... + @property + def timestamp_type(self): ... + @property + def key(self): ... + @property + def value(self): ... + @property + def headers(self): ... + @property + def checksum(self) -> None: ... + def validate_crc(self): ... + +class ControlRecord(DefaultRecord): + KEY_STRUCT: Incomplete + def __init__(self, size_in_bytes, offset, timestamp, timestamp_type, key, value, headers) -> None: ... + @property + def version(self): ... + @property + def type(self): ... + @property + def abort(self): ... + @property + def commit(self): ... + +class DefaultRecordBatchBuilder(DefaultRecordBase, ABCRecordBatchBuilder): + MAX_RECORD_OVERHEAD: int + def __init__( + self, magic, compression_type, is_transactional, producer_id, producer_epoch, base_sequence, batch_size + ) -> None: ... + def set_producer_state(self, producer_id, producer_epoch, base_sequence, is_transactional) -> None: ... + @property + def producer_id(self): ... + @property + def producer_epoch(self): ... + def append( + self, + offset, + timestamp, + key, + value, + headers=..., + encode_varint=..., + size_of_varint=..., + get_type=..., + type_int=..., + time_time=..., + byte_like=..., + bytearray_type=..., + len_func=..., + zero_len_varint: int = 1, + ): ... + def write_header(self, use_compression_type: bool = True) -> None: ... + def build(self): ... + def size(self): ... + @classmethod + def header_size_in_bytes(self): ... + @classmethod + def size_in_bytes(self, offset_delta, timestamp_delta, key, value, headers): ... + @classmethod + def size_of(cls, key, value, headers): ... + @classmethod + def estimate_size_in_bytes(cls, key, value, headers): ... + +class DefaultRecordMetadata: + def __init__(self, offset, size, timestamp) -> None: ... + @property + def offset(self): ... + @property + def crc(self) -> None: ... + @property + def size(self): ... + @property + def timestamp(self): ... diff --git a/stubs/kafka-python/kafka/record/legacy_records.pyi b/stubs/kafka-python/kafka/record/legacy_records.pyi new file mode 100644 index 000000000000..d7165b0c0b10 --- /dev/null +++ b/stubs/kafka-python/kafka/record/legacy_records.pyi @@ -0,0 +1,86 @@ +from _typeshed import Incomplete + +from kafka.record.abc import ABCRecord, ABCRecordBatch, ABCRecordBatchBuilder + +class LegacyRecordBase: + HEADER_STRUCT_V0: Incomplete + HEADER_STRUCT_V1: Incomplete + LOG_OVERHEAD: Incomplete + CRC_OFFSET: Incomplete + MAGIC_OFFSET: Incomplete + RECORD_OVERHEAD_V0: Incomplete + RECORD_OVERHEAD_V1: Incomplete + KEY_OFFSET_V0: Incomplete + KEY_OFFSET_V1: Incomplete + KEY_LENGTH: Incomplete + VALUE_LENGTH: Incomplete + CODEC_MASK: int + CODEC_NONE: int + CODEC_GZIP: int + CODEC_SNAPPY: int + CODEC_LZ4: int + TIMESTAMP_TYPE_MASK: int + LOG_APPEND_TIME: int + CREATE_TIME: int + NO_TIMESTAMP: int + +class LegacyRecordBatch(ABCRecordBatch, LegacyRecordBase): + def __init__(self, buffer, magic) -> None: ... + @property + def base_offset(self): ... + @property + def size_in_bytes(self): ... + @property + def timestamp_type(self): ... + @property + def compression_type(self): ... + @property + def magic(self): ... + def validate_crc(self): ... + def __iter__(self): ... + +class LegacyRecord(ABCRecord): + def __init__(self, magic, offset, timestamp, timestamp_type, key, value, crc, crc_bytes) -> None: ... + @property + def magic(self): ... + @property + def offset(self): ... + @property + def timestamp(self): ... + @property + def timestamp_type(self): ... + @property + def key(self): ... + @property + def value(self): ... + @property + def headers(self): ... + @property + def checksum(self): ... + def validate_crc(self): ... + @property + def size_in_bytes(self): ... + +class LegacyRecordBatchBuilder(ABCRecordBatchBuilder, LegacyRecordBase): + def __init__(self, magic, compression_type, batch_size) -> None: ... + def append(self, offset, timestamp, key, value, headers=None): ... + def build(self): ... + def size(self): ... + def size_in_bytes(self, offset, timestamp, key, value, headers=None): ... + @classmethod + def record_size(cls, magic, key, value): ... + @classmethod + def record_overhead(cls, magic): ... + @classmethod + def estimate_size_in_bytes(cls, magic, compression_type, key, value): ... + +class LegacyRecordMetadata: + def __init__(self, offset, crc, size, timestamp) -> None: ... + @property + def offset(self): ... + @property + def crc(self): ... + @property + def size(self): ... + @property + def timestamp(self): ... diff --git a/stubs/kafka-python/kafka/record/memory_records.pyi b/stubs/kafka-python/kafka/record/memory_records.pyi new file mode 100644 index 000000000000..5dec0f3202fa --- /dev/null +++ b/stubs/kafka-python/kafka/record/memory_records.pyi @@ -0,0 +1,44 @@ +from _typeshed import Incomplete + +from kafka.record.abc import ABCRecords + +class MemoryRecords(ABCRecords): + LENGTH_OFFSET: Incomplete + LOG_OVERHEAD: Incomplete + MAGIC_OFFSET: Incomplete + MIN_SLICE: Incomplete + def __init__(self, bytes_data) -> None: ... + def size_in_bytes(self): ... + def valid_bytes(self): ... + def has_next(self): ... + def next_batch(self, _min_slice=26, _magic_offset=16): ... + def __iter__(self): ... + def __next__(self): ... + next = __next__ + +class MemoryRecordsBuilder: + def __init__( + self, + magic, + compression_type, + batch_size, + offset: int = 0, + transactional: bool = False, + producer_id: int = -1, + producer_epoch: int = -1, + base_sequence: int = -1, + ) -> None: ... + def skip(self, offsets_to_skip) -> None: ... + def append(self, timestamp, key, value, headers=[]): ... + def set_producer_state(self, producer_id, producer_epoch, base_sequence, is_transactional) -> None: ... + @property + def producer_id(self): ... + @property + def producer_epoch(self): ... + def records(self): ... + def close(self) -> None: ... + def size_in_bytes(self): ... + def compression_rate(self): ... + def is_full(self): ... + def next_offset(self): ... + def buffer(self): ... diff --git a/stubs/kafka-python/kafka/record/util.pyi b/stubs/kafka-python/kafka/record/util.pyi new file mode 100644 index 000000000000..fa94937bc8f8 --- /dev/null +++ b/stubs/kafka-python/kafka/record/util.pyi @@ -0,0 +1,5 @@ +def encode_varint(value, write): ... +def size_of_varint(value): ... +def decode_varint(buffer, pos: int = 0): ... +def calc_crc32c(memview, _crc32c=...): ... +def calc_crc32(memview): ... diff --git a/stubs/kafka-python/kafka/sasl/__init__.pyi b/stubs/kafka-python/kafka/sasl/__init__.pyi new file mode 100644 index 000000000000..93fcedc0ab97 --- /dev/null +++ b/stubs/kafka-python/kafka/sasl/__init__.pyi @@ -0,0 +1,6 @@ +from _typeshed import Incomplete + +SASL_MECHANISMS: Incomplete + +def register_sasl_mechanism(name, klass, overwrite: bool = False) -> None: ... +def get_sasl_mechanism(name): ... diff --git a/stubs/kafka-python/kafka/sasl/abc.pyi b/stubs/kafka-python/kafka/sasl/abc.pyi new file mode 100644 index 000000000000..52d76c08a27c --- /dev/null +++ b/stubs/kafka-python/kafka/sasl/abc.pyi @@ -0,0 +1,14 @@ +import abc + +class SaslMechanism(metaclass=abc.ABCMeta): + @abc.abstractmethod + def __init__(self, **config): ... + @abc.abstractmethod + def auth_bytes(self): ... + @abc.abstractmethod + def receive(self, auth_bytes): ... + @abc.abstractmethod + def is_done(self): ... + @abc.abstractmethod + def is_authenticated(self): ... + def auth_details(self): ... diff --git a/stubs/kafka-python/kafka/sasl/gssapi.pyi b/stubs/kafka-python/kafka/sasl/gssapi.pyi new file mode 100644 index 000000000000..2bbe75ee3526 --- /dev/null +++ b/stubs/kafka-python/kafka/sasl/gssapi.pyi @@ -0,0 +1,16 @@ +from _typeshed import Incomplete + +from kafka.sasl.abc import SaslMechanism + +class SaslMechanismGSSAPI(SaslMechanism): + SASL_QOP_AUTH: int + SASL_QOP_AUTH_INT: int + SASL_QOP_AUTH_CONF: int + gssapi_name: Incomplete + auth_id: Incomplete + def __init__(self, **config) -> None: ... + def auth_bytes(self): ... + def receive(self, auth_bytes) -> None: ... + def is_done(self): ... + def is_authenticated(self): ... + def auth_details(self): ... diff --git a/stubs/kafka-python/kafka/sasl/msk.pyi b/stubs/kafka-python/kafka/sasl/msk.pyi new file mode 100644 index 000000000000..3c3efed6fcc1 --- /dev/null +++ b/stubs/kafka-python/kafka/sasl/msk.pyi @@ -0,0 +1,33 @@ +from _typeshed import Incomplete + +from kafka.sasl.abc import SaslMechanism + +log: Incomplete + +class SaslMechanismAwsMskIam(SaslMechanism): + host: Incomplete + def __init__(self, **config) -> None: ... + def auth_bytes(self): ... + def receive(self, auth_bytes) -> None: ... + def is_done(self): ... + def is_authenticated(self): ... + def auth_details(self): ... + +class AwsMskIamClient: + UNRESERVED_CHARS: Incomplete + algorithm: str + expires: str + hashfunc: Incomplete + headers: Incomplete + version: str + service: str + action: Incomplete + datestamp: Incomplete + timestamp: Incomplete + host: Incomplete + access_key: Incomplete + secret_key: Incomplete + region: Incomplete + token: Incomplete + def __init__(self, host, access_key, secret_key, region, token=None) -> None: ... + def first_message(self): ... diff --git a/stubs/kafka-python/kafka/sasl/oauth.pyi b/stubs/kafka-python/kafka/sasl/oauth.pyi new file mode 100644 index 000000000000..089ad778c4f4 --- /dev/null +++ b/stubs/kafka-python/kafka/sasl/oauth.pyi @@ -0,0 +1,23 @@ +import abc +from _typeshed import Incomplete + +from kafka.sasl.abc import SaslMechanism + +log: Incomplete + +class SaslMechanismOAuth(SaslMechanism): + token_provider: Incomplete + def __init__(self, **config) -> None: ... + def auth_bytes(self): ... + def receive(self, auth_bytes) -> None: ... + def is_done(self): ... + def is_authenticated(self): ... + def auth_details(self): ... + +ABC: Incomplete + +class AbstractTokenProvider(ABC, metaclass=abc.ABCMeta): + def __init__(self, **config) -> None: ... + @abc.abstractmethod + def token(self): ... + def extensions(self): ... diff --git a/stubs/kafka-python/kafka/sasl/plain.pyi b/stubs/kafka-python/kafka/sasl/plain.pyi new file mode 100644 index 000000000000..be3f7961ad39 --- /dev/null +++ b/stubs/kafka-python/kafka/sasl/plain.pyi @@ -0,0 +1,15 @@ +from _typeshed import Incomplete + +from kafka.sasl.abc import SaslMechanism + +log: Incomplete + +class SaslMechanismPlain(SaslMechanism): + username: Incomplete + password: Incomplete + def __init__(self, **config) -> None: ... + def auth_bytes(self): ... + def receive(self, auth_bytes) -> None: ... + def is_done(self): ... + def is_authenticated(self): ... + def auth_details(self): ... diff --git a/stubs/kafka-python/kafka/sasl/scram.pyi b/stubs/kafka-python/kafka/sasl/scram.pyi new file mode 100644 index 000000000000..928d1efb094f --- /dev/null +++ b/stubs/kafka-python/kafka/sasl/scram.pyi @@ -0,0 +1,40 @@ +from _typeshed import Incomplete + +from kafka.sasl.abc import SaslMechanism + +log: Incomplete + +def xor_bytes(left, right): ... + +class SaslMechanismScram(SaslMechanism): + username: Incomplete + mechanism: Incomplete + def __init__(self, **config) -> None: ... + def auth_bytes(self): ... + def receive(self, auth_bytes): ... + def is_done(self): ... + def is_authenticated(self): ... + def auth_details(self): ... + +class ScramClient: + MECHANISMS: Incomplete + nonce: Incomplete + auth_message: bytes + salted_password: Incomplete + user: Incomplete + password: Incomplete + hashfunc: Incomplete + hashname: Incomplete + stored_key: Incomplete + client_key: Incomplete + client_signature: Incomplete + client_proof: Incomplete + server_key: Incomplete + server_signature: Incomplete + def __init__(self, user, password, mechanism) -> None: ... + def first_message(self): ... + def process_server_first_message(self, server_first_message) -> None: ... + def hmac(self, key, msg): ... + def create_salted_password(self, salt, iterations) -> None: ... + def final_message(self): ... + def process_server_final_message(self, server_final_message) -> None: ... diff --git a/stubs/kafka-python/kafka/sasl/sspi.pyi b/stubs/kafka-python/kafka/sasl/sspi.pyi new file mode 100644 index 000000000000..600c382b4094 --- /dev/null +++ b/stubs/kafka-python/kafka/sasl/sspi.pyi @@ -0,0 +1,17 @@ +from _typeshed import Incomplete + +from kafka.sasl.abc import SaslMechanism + +log: Incomplete + +class SaslMechanismSSPI(SaslMechanism): + SASL_QOP_AUTH: int + SASL_QOP_AUTH_INT: int + SASL_QOP_AUTH_CONF: int + auth_id: Incomplete + def __init__(self, **config) -> None: ... + def auth_bytes(self): ... + def receive(self, auth_bytes) -> None: ... + def is_done(self): ... + def is_authenticated(self): ... + def auth_details(self): ... diff --git a/stubs/kafka-python/kafka/serializer/__init__.pyi b/stubs/kafka-python/kafka/serializer/__init__.pyi new file mode 100644 index 000000000000..b9caa9a2bcbb --- /dev/null +++ b/stubs/kafka-python/kafka/serializer/__init__.pyi @@ -0,0 +1 @@ +from kafka.serializer.abstract import Deserializer as Deserializer, Serializer as Serializer diff --git a/stubs/kafka-python/kafka/serializer/abstract.pyi b/stubs/kafka-python/kafka/serializer/abstract.pyi new file mode 100644 index 000000000000..5e57c8b778a0 --- /dev/null +++ b/stubs/kafka-python/kafka/serializer/abstract.pyi @@ -0,0 +1,15 @@ +import abc + +class Serializer(metaclass=abc.ABCMeta): + __meta__ = abc.ABCMeta + def __init__(self, **config) -> None: ... + @abc.abstractmethod + def serialize(self, topic, value): ... + def close(self) -> None: ... + +class Deserializer(metaclass=abc.ABCMeta): + __meta__ = abc.ABCMeta + def __init__(self, **config) -> None: ... + @abc.abstractmethod + def deserialize(self, topic, bytes_): ... + def close(self) -> None: ... diff --git a/stubs/kafka-python/kafka/socks5_wrapper.pyi b/stubs/kafka-python/kafka/socks5_wrapper.pyi new file mode 100644 index 000000000000..871e8b20344f --- /dev/null +++ b/stubs/kafka-python/kafka/socks5_wrapper.pyi @@ -0,0 +1,25 @@ +from _typeshed import Incomplete + +log: Incomplete + +class ProxyConnectionStates: + DISCONNECTED: str + CONNECTING: str + NEGOTIATE_PROPOSE: str + NEGOTIATING: str + AUTHENTICATING: str + REQUEST_SUBMIT: str + REQUESTING: str + READ_ADDRESS: str + COMPLETE: str + +class Socks5Wrapper: + def __init__(self, proxy_url, afi) -> None: ... + @classmethod + def is_inet_4_or_6(cls, gai): ... + @classmethod + def dns_lookup(cls, host, port, afi=...): ... + @classmethod + def use_remote_lookup(cls, proxy_url): ... + def socket(self, family, sock_type): ... + def connect_ex(self, addr): ... diff --git a/stubs/kafka-python/kafka/structs.pyi b/stubs/kafka-python/kafka/structs.pyi new file mode 100644 index 000000000000..58a5098a8566 --- /dev/null +++ b/stubs/kafka-python/kafka/structs.pyi @@ -0,0 +1,53 @@ +from _typeshed import Incomplete +from typing import NamedTuple + +class TopicPartition(NamedTuple): + topic: Incomplete + partition: Incomplete + +class BrokerMetadata(NamedTuple): + nodeId: Incomplete + host: Incomplete + port: Incomplete + rack: Incomplete + +class PartitionMetadata(NamedTuple): + topic: Incomplete + partition: Incomplete + leader: Incomplete + leader_epoch: Incomplete + replicas: Incomplete + isr: Incomplete + offline_replicas: Incomplete + error: Incomplete + +class OffsetAndMetadata(NamedTuple): + offset: Incomplete + metadata: Incomplete + leader_epoch: Incomplete + +class OffsetAndTimestamp(NamedTuple): + offset: Incomplete + timestamp: Incomplete + leader_epoch: Incomplete + +class MemberInformation(NamedTuple): + member_id: Incomplete + client_id: Incomplete + client_host: Incomplete + member_metadata: Incomplete + member_assignment: Incomplete + +class GroupInformation(NamedTuple): + error_code: Incomplete + group: Incomplete + state: Incomplete + protocol_type: Incomplete + protocol: Incomplete + members: Incomplete + authorized_operations: Incomplete + +class RetryOptions(NamedTuple): + limit: Incomplete + backoff_ms: Incomplete + retry_on_timeouts: Incomplete diff --git a/stubs/kafka-python/kafka/util.pyi b/stubs/kafka-python/kafka/util.pyi new file mode 100644 index 000000000000..4783d02b462a --- /dev/null +++ b/stubs/kafka-python/kafka/util.pyi @@ -0,0 +1,38 @@ +from _typeshed import Incomplete +from collections.abc import Callable +from typing import ParamSpec, TypeVar + +_P = ParamSpec("_P") +_T = TypeVar("_T") + +MAX_INT: Incomplete +TO_SIGNED: Incomplete + +def crc32(data): ... + +class Timer: + def __init__(self, timeout_ms, error_message=None, start_at=None) -> None: ... + @property + def expired(self): ... + @property + def timeout_ms(self): ... + @property + def elapsed_ms(self): ... + def maybe_raise(self) -> None: ... + +TOPIC_MAX_LENGTH: int +TOPIC_LEGAL_CHARS: Incomplete + +def ensure_valid_topic_name(topic) -> None: ... + +class WeakMethod: + target: Incomplete + method: Incomplete + def __init__(self, object_dot_method) -> None: ... + def __call__(self, *args, **kwargs): ... + def __hash__(self): ... + def __eq__(self, other): ... + +class Dict(dict[Incomplete, Incomplete]): ... + +def synchronized(func: Callable[_P, _T]) -> Callable[_P, _T]: ... diff --git a/stubs/kafka-python/kafka/version.pyi b/stubs/kafka-python/kafka/version.pyi new file mode 100644 index 000000000000..bda5b5a7f4cc --- /dev/null +++ b/stubs/kafka-python/kafka/version.pyi @@ -0,0 +1 @@ +__version__: str From 6696b3e342b7a9fdfa6ac8b090d9179f56987f45 Mon Sep 17 00:00:00 2001 From: Rasmus Nygren Date: Wed, 20 May 2026 21:36:50 +0200 Subject: [PATCH 2/5] Fix some Incomplete kafka-python stubs --- .../kafka-python/kafka/admin/acl_resource.pyi | 48 ++++-- stubs/kafka-python/kafka/admin/client.pyi | 119 +++++++++++-- .../kafka/admin/config_resource.pyi | 10 +- .../kafka/admin/new_partitions.pyi | 8 +- stubs/kafka-python/kafka/admin/new_topic.pyi | 19 ++- stubs/kafka-python/kafka/consumer/fetcher.pyi | 22 +-- stubs/kafka-python/kafka/consumer/group.pyi | 161 +++++++++++++++--- stubs/kafka-python/kafka/producer/future.pyi | 23 +-- stubs/kafka-python/kafka/producer/kafka.pyi | 99 ++++++++++- stubs/kafka-python/kafka/structs.pyi | 64 +++---- 10 files changed, 436 insertions(+), 137 deletions(-) diff --git a/stubs/kafka-python/kafka/admin/acl_resource.pyi b/stubs/kafka-python/kafka/admin/acl_resource.pyi index 10e9f1c76909..ea613c07dbe3 100644 --- a/stubs/kafka-python/kafka/admin/acl_resource.pyi +++ b/stubs/kafka-python/kafka/admin/acl_resource.pyi @@ -1,4 +1,3 @@ -from _typeshed import Incomplete from enum import IntEnum class ResourceType(IntEnum): @@ -41,31 +40,52 @@ class ACLResourcePatternType(IntEnum): PREFIXED = 4 class ACLFilter: - principal: Incomplete - host: Incomplete - operation: Incomplete - permission_type: Incomplete - resource_pattern: Incomplete - def __init__(self, principal, host, operation, permission_type, resource_pattern) -> None: ... + principal: str | None + host: str | None + operation: ACLOperation + permission_type: ACLPermissionType + resource_pattern: ResourcePatternFilter + def __init__( + self, + principal: str | None, + host: str | None, + operation: ACLOperation, + permission_type: ACLPermissionType, + resource_pattern: ResourcePatternFilter, + ) -> None: ... def validate(self) -> None: ... def __eq__(self, other): ... def __hash__(self): ... class ACL(ACLFilter): - def __init__(self, principal, host, operation, permission_type, resource_pattern) -> None: ... + resource_pattern: ResourcePattern + def __init__( + self, + principal: str, + host: str, + operation: ACLOperation, + permission_type: ACLPermissionType, + resource_pattern: ResourcePattern, + ) -> None: ... def validate(self) -> None: ... class ResourcePatternFilter: - resource_type: Incomplete - resource_name: Incomplete - pattern_type: Incomplete - def __init__(self, resource_type, resource_name, pattern_type) -> None: ... + resource_type: ResourceType + resource_name: str | None + pattern_type: ACLResourcePatternType + def __init__(self, resource_type: ResourceType, resource_name: str | None, pattern_type: ACLResourcePatternType) -> None: ... def validate(self) -> None: ... def __eq__(self, other): ... def __hash__(self): ... class ResourcePattern(ResourcePatternFilter): - def __init__(self, resource_type, resource_name, pattern_type=...) -> None: ... + resource_name: str + def __init__( + self, + resource_type: ResourceType, + resource_name: str, + pattern_type: ACLResourcePatternType = ACLResourcePatternType.LITERAL, + ) -> None: ... def validate(self) -> None: ... -def valid_acl_operations(int_vals): ... +def valid_acl_operations(int_vals) -> set[ACLOperation]: ... diff --git a/stubs/kafka-python/kafka/admin/client.pyi b/stubs/kafka-python/kafka/admin/client.pyi index 1b25f4d08617..9fd535f54bac 100644 --- a/stubs/kafka-python/kafka/admin/client.pyi +++ b/stubs/kafka-python/kafka/admin/client.pyi @@ -1,29 +1,112 @@ +import selectors +import ssl from _typeshed import Incomplete +from collections.abc import Callable, Iterable, Mapping, Sequence +from typing import Literal, TypeAlias, TypedDict +from typing_extensions import Unpack + +from kafka.admin.acl_resource import ACL, ACLFilter +from kafka.admin.config_resource import ConfigResource +from kafka.admin.new_partitions import NewPartitions +from kafka.admin.new_topic import NewTopic +from kafka.errors import KafkaError +from kafka.protocol.admin import ElectionType +from kafka.structs import GroupInformation, OffsetAndMetadata, TopicPartition + +_ApiVersion: TypeAlias = tuple[int, ...] +_BootstrapServers: TypeAlias = str | Sequence[str] +_KafkaClientFactory: TypeAlias = Callable[..., object] +_SaslMechanism: TypeAlias = Literal["PLAIN", "GSSAPI", "OAUTHBEARER", "SCRAM-SHA-256", "SCRAM-SHA-512"] +_SecurityProtocol: TypeAlias = Literal["PLAINTEXT", "SSL", "SASL_PLAINTEXT", "SASL_SSL"] +_SocketOption: TypeAlias = tuple[int, int, int] + +class _KafkaAdminClientConfig(TypedDict, total=False): + bootstrap_servers: _BootstrapServers + client_id: str + request_timeout_ms: int + connections_max_idle_ms: int + reconnect_backoff_ms: int + reconnect_backoff_max_ms: int + max_in_flight_requests_per_connection: int + receive_buffer_bytes: int | None + send_buffer_bytes: int | None + socket_options: Sequence[_SocketOption] + sock_chunk_bytes: int + sock_chunk_buffer_count: int + retry_backoff_ms: int + metadata_max_age_ms: int + security_protocol: _SecurityProtocol + ssl_context: ssl.SSLContext | None + ssl_check_hostname: bool + ssl_cafile: str | None + ssl_certfile: str | None + ssl_keyfile: str | None + ssl_password: str | None + ssl_crlfile: str | None + api_version: _ApiVersion | None + api_version_auto_timeout_ms: int + selector: type[selectors.BaseSelector] + sasl_mechanism: _SaslMechanism | None + sasl_plain_username: str | None + sasl_plain_password: str | None + sasl_kerberos_name: object | None + sasl_kerberos_service_name: str + sasl_kerberos_domain_name: str | None + sasl_oauth_token_provider: object | None + socks5_proxy: str | None + metric_reporters: Sequence[type[object]] + metrics_num_samples: int + metrics_sample_window_ms: int + kafka_client: _KafkaClientFactory + +class _CreateAclsResult(TypedDict): + succeeded: list[ACL] + failed: list[tuple[ACL, KafkaError]] log: Incomplete class KafkaAdminClient: DEFAULT_CONFIG: Incomplete config: Incomplete - def __init__(self, **configs) -> None: ... + def __init__(self, **configs: Unpack[_KafkaAdminClientConfig]) -> None: ... def close(self) -> None: ... def send_request(self, request, node_id=None): ... def send_requests(self, requests_and_node_ids, response_fn=...): ... - def create_topics(self, new_topics, timeout_ms=None, validate_only: bool = False): ... - def delete_topics(self, topics, timeout_ms=None): ... - def list_topics(self): ... - def describe_topics(self, topics=None): ... - def describe_cluster(self): ... - def describe_acls(self, acl_filter): ... - def create_acls(self, acls): ... - def delete_acls(self, acl_filters): ... - def describe_configs(self, config_resources, include_synonyms: bool = False): ... - def alter_configs(self, config_resources): ... - def create_partitions(self, topic_partitions, timeout_ms=None, validate_only: bool = False): ... - def delete_records(self, records_to_delete, timeout_ms=None, partition_leader_id=None): ... - def describe_consumer_groups(self, group_ids, group_coordinator_id=None, include_authorized_operations: bool = False): ... - def list_consumer_groups(self, broker_ids=None): ... - def list_consumer_group_offsets(self, group_id, group_coordinator_id=None, partitions=None): ... - def delete_consumer_groups(self, group_ids, group_coordinator_id=None): ... - def perform_leader_election(self, election_type, topic_partitions=None, timeout_ms=None): ... + def create_topics(self, new_topics: Sequence[NewTopic], timeout_ms: int | None = None, validate_only: bool = False): ... + def delete_topics(self, topics: Sequence[str], timeout_ms: int | None = None): ... + def list_topics(self) -> list[str]: ... + def describe_topics(self, topics: Sequence[str] | None = None) -> list[dict[str, Incomplete]]: ... + def describe_cluster(self) -> dict[str, Incomplete]: ... + def describe_acls(self, acl_filter: ACLFilter) -> tuple[list[ACL], KafkaError]: ... + def create_acls(self, acls: Sequence[ACL]) -> _CreateAclsResult: ... + def delete_acls( + self, acl_filters: Sequence[ACLFilter] + ) -> list[tuple[ACLFilter, list[tuple[ACL, KafkaError]], KafkaError]]: ... + def describe_configs(self, config_resources: Sequence[ConfigResource], include_synonyms: bool = False): ... + def alter_configs(self, config_resources: Sequence[ConfigResource]): ... + def create_partitions( + self, topic_partitions: Mapping[str, NewPartitions], timeout_ms: int | None = None, validate_only: bool = False + ): ... + def delete_records( + self, + records_to_delete: Mapping[TopicPartition, int], + timeout_ms: float | None = None, + partition_leader_id: int | None = None, + ) -> dict[TopicPartition, Incomplete]: ... + def describe_consumer_groups( + self, group_ids: Sequence[str], group_coordinator_id: int | None = None, include_authorized_operations: bool = False + ) -> list[GroupInformation]: ... + def list_consumer_groups(self, broker_ids: Sequence[int] | None = None) -> list[tuple[str, str]]: ... + def list_consumer_group_offsets( + self, group_id: str, group_coordinator_id: int | None = None, partitions: Iterable[TopicPartition] | None = None + ) -> dict[TopicPartition, OffsetAndMetadata]: ... + def delete_consumer_groups( + self, group_ids: Sequence[str], group_coordinator_id: int | None = None + ) -> list[tuple[str, KafkaError]]: ... + def perform_leader_election( + self, + election_type: int | ElectionType, + topic_partitions: Mapping[str, Sequence[int]] | None = None, + timeout_ms: int | None = None, + ): ... def describe_log_dirs(self): ... diff --git a/stubs/kafka-python/kafka/admin/config_resource.pyi b/stubs/kafka-python/kafka/admin/config_resource.pyi index 38f451c78e1c..8a54cca3b482 100644 --- a/stubs/kafka-python/kafka/admin/config_resource.pyi +++ b/stubs/kafka-python/kafka/admin/config_resource.pyi @@ -1,4 +1,4 @@ -from _typeshed import Incomplete +from collections.abc import Mapping from enum import IntEnum class ConfigResourceType(IntEnum): @@ -6,7 +6,7 @@ class ConfigResourceType(IntEnum): TOPIC = 2 class ConfigResource: - resource_type: Incomplete - name: Incomplete - configs: Incomplete - def __init__(self, resource_type, name, configs=None) -> None: ... + resource_type: ConfigResourceType + name: str + configs: Mapping[str, str] | None + def __init__(self, resource_type: ConfigResourceType, name: str, configs: Mapping[str, str] | None = None) -> None: ... diff --git a/stubs/kafka-python/kafka/admin/new_partitions.pyi b/stubs/kafka-python/kafka/admin/new_partitions.pyi index aa061839f1c2..b828f1f5fef6 100644 --- a/stubs/kafka-python/kafka/admin/new_partitions.pyi +++ b/stubs/kafka-python/kafka/admin/new_partitions.pyi @@ -1,6 +1,6 @@ -from _typeshed import Incomplete +from collections.abc import Sequence class NewPartitions: - total_count: Incomplete - new_assignments: Incomplete - def __init__(self, total_count, new_assignments=None) -> None: ... + total_count: int + new_assignments: Sequence[Sequence[int]] | None + def __init__(self, total_count: int, new_assignments: Sequence[Sequence[int]] | None = None) -> None: ... diff --git a/stubs/kafka-python/kafka/admin/new_topic.pyi b/stubs/kafka-python/kafka/admin/new_topic.pyi index c2794b81e189..4a1d64ba08c0 100644 --- a/stubs/kafka-python/kafka/admin/new_topic.pyi +++ b/stubs/kafka-python/kafka/admin/new_topic.pyi @@ -1,11 +1,16 @@ -from _typeshed import Incomplete +from collections.abc import Mapping, Sequence class NewTopic: - name: Incomplete - num_partitions: Incomplete - replication_factor: Incomplete - replica_assignments: Incomplete - topic_configs: Incomplete + name: str + num_partitions: int + replication_factor: int + replica_assignments: Mapping[int, Sequence[int]] | None + topic_configs: Mapping[str, str] | None def __init__( - self, name, num_partitions: int = -1, replication_factor: int = -1, replica_assignments=None, topic_configs=None + self, + name: str, + num_partitions: int = -1, + replication_factor: int = -1, + replica_assignments: Mapping[int, Sequence[int]] | None = None, + topic_configs: Mapping[str, str] | None = None, ) -> None: ... diff --git a/stubs/kafka-python/kafka/consumer/fetcher.pyi b/stubs/kafka-python/kafka/consumer/fetcher.pyi index 42addaaca938..7e5a0e1b1240 100644 --- a/stubs/kafka-python/kafka/consumer/fetcher.pyi +++ b/stubs/kafka-python/kafka/consumer/fetcher.pyi @@ -9,19 +9,19 @@ READ_COMMITTED: int ISOLATION_LEVEL_CONFIG: Incomplete class ConsumerRecord(NamedTuple): - topic: Incomplete - partition: Incomplete - leader_epoch: Incomplete - offset: Incomplete - timestamp: Incomplete - timestamp_type: Incomplete + topic: str + partition: int + leader_epoch: int | None + offset: int + timestamp: int + timestamp_type: int key: Incomplete value: Incomplete - headers: Incomplete - checksum: Incomplete - serialized_key_size: Incomplete - serialized_value_size: Incomplete - serialized_header_size: Incomplete + headers: list[tuple[str, bytes]] + checksum: int | None + serialized_key_size: int + serialized_value_size: int + serialized_header_size: int class CompletedFetch(NamedTuple): topic_partition: Incomplete diff --git a/stubs/kafka-python/kafka/consumer/group.pyi b/stubs/kafka-python/kafka/consumer/group.pyi index 9645166cc57c..166b595d3439 100644 --- a/stubs/kafka-python/kafka/consumer/group.pyi +++ b/stubs/kafka-python/kafka/consumer/group.pyi @@ -1,37 +1,142 @@ +import selectors +import ssl from _typeshed import Incomplete -from collections.abc import Iterator +from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence +from typing import Literal, TypeAlias, TypedDict, overload +from typing_extensions import Self, Unpack + +from kafka.consumer.fetcher import ConsumerRecord +from kafka.consumer.subscription_state import ConsumerRebalanceListener +from kafka.future import Future +from kafka.serializer.abstract import Deserializer +from kafka.structs import OffsetAndMetadata, OffsetAndTimestamp, TopicPartition + +_ApiVersion: TypeAlias = tuple[int, ...] +_BootstrapServers: TypeAlias = str | Sequence[str] +_CommitCallback: TypeAlias = Callable[[Mapping[TopicPartition, OffsetAndMetadata], object], object] +_ConsumerDeserializer: TypeAlias = Deserializer | Callable[[bytes | None], object] +_KafkaClientFactory: TypeAlias = Callable[..., object] +_SaslMechanism: TypeAlias = Literal["PLAIN", "GSSAPI", "OAUTHBEARER", "SCRAM-SHA-256", "SCRAM-SHA-512"] +_SecurityProtocol: TypeAlias = Literal["PLAINTEXT", "SSL", "SASL_PLAINTEXT", "SASL_SSL"] +_SocketOption: TypeAlias = tuple[int, int, int] + +class _KafkaConsumerConfig(TypedDict, total=False): + bootstrap_servers: _BootstrapServers + client_id: str + group_id: str | None + group_instance_id: str | None + key_deserializer: _ConsumerDeserializer | None + value_deserializer: _ConsumerDeserializer | None + enable_incremental_fetch_sessions: bool + fetch_max_wait_ms: int + fetch_min_bytes: int + fetch_max_bytes: int + max_partition_fetch_bytes: int + request_timeout_ms: int + retry_backoff_ms: int + reconnect_backoff_ms: int + reconnect_backoff_max_ms: int + max_in_flight_requests_per_connection: int + auto_offset_reset: Literal["earliest", "latest", "smallest", "largest"] + enable_auto_commit: bool + auto_commit_interval_ms: int + default_offset_commit_callback: _CommitCallback + check_crcs: bool + isolation_level: Literal["read_uncommitted", "read_committed"] + allow_auto_create_topics: bool + metadata_max_age_ms: int + partition_assignment_strategy: Sequence[type[object]] + max_poll_records: int + max_poll_interval_ms: int + session_timeout_ms: int + heartbeat_interval_ms: int + receive_buffer_bytes: int | None + send_buffer_bytes: int | None + socket_options: Sequence[_SocketOption] + sock_chunk_bytes: int + sock_chunk_buffer_count: int + consumer_timeout_ms: int | float + security_protocol: _SecurityProtocol + ssl_context: ssl.SSLContext | None + ssl_check_hostname: bool + ssl_cafile: str | None + ssl_certfile: str | None + ssl_keyfile: str | None + ssl_crlfile: str | None + ssl_password: str | None + ssl_ciphers: str | None + api_version: _ApiVersion | None + api_version_auto_timeout_ms: int + connections_max_idle_ms: int + metric_reporters: Sequence[type[object]] + metrics_enabled: bool + metrics_num_samples: int + metrics_sample_window_ms: int + metric_group_prefix: str + selector: type[selectors.BaseSelector] + exclude_internal_topics: bool + sasl_mechanism: _SaslMechanism | None + sasl_plain_username: str | None + sasl_plain_password: str | None + sasl_kerberos_name: object | None + sasl_kerberos_service_name: str + sasl_kerberos_domain_name: str | None + sasl_oauth_token_provider: object | None + socks5_proxy: str | None + kafka_client: _KafkaClientFactory log: Incomplete -class KafkaConsumer(Iterator[Incomplete]): +class KafkaConsumer(Iterator[ConsumerRecord]): DEFAULT_CONFIG: Incomplete DEFAULT_SESSION_TIMEOUT_MS_0_9: int config: Incomplete - def __init__(self, *topics, **configs) -> None: ... + def __init__(self, *topics: str, **configs: Unpack[_KafkaConsumerConfig]) -> None: ... def bootstrap_connected(self): ... - def assign(self, partitions) -> None: ... - def assignment(self): ... - def close(self, autocommit: bool = True, timeout_ms=None) -> None: ... - def commit_async(self, offsets=None, callback=None): ... - def commit(self, offsets=None, timeout_ms=None) -> None: ... - def committed(self, partition, metadata: bool = False, timeout_ms=None): ... - def topics(self): ... - def partitions_for_topic(self, topic): ... - def poll(self, timeout_ms: int = 0, max_records=None, update_offsets: bool = True): ... - def position(self, partition, timeout_ms=None): ... - def highwater(self, partition): ... - def pause(self, *partitions) -> None: ... - def paused(self): ... - def resume(self, *partitions) -> None: ... - def seek(self, partition, offset) -> None: ... - def seek_to_beginning(self, *partitions) -> None: ... - def seek_to_end(self, *partitions) -> None: ... - def subscribe(self, topics=(), pattern=None, listener=None) -> None: ... - def subscription(self): ... + def assign(self, partitions: Iterable[TopicPartition]) -> None: ... + def assignment(self) -> set[TopicPartition]: ... + def close(self, autocommit: bool = True, timeout_ms: int | None = None) -> None: ... + def commit_async( + self, offsets: Mapping[TopicPartition, OffsetAndMetadata] | None = None, callback: _CommitCallback | None = None + ) -> Future: ... + def commit( + self, offsets: Mapping[TopicPartition, OffsetAndMetadata] | None = None, timeout_ms: int | None = None + ) -> None: ... + + @overload + def committed( + self, partition: TopicPartition, metadata: Literal[False] = False, timeout_ms: int | None = None + ) -> int | None: ... + @overload + def committed( + self, partition: TopicPartition, metadata: Literal[True], timeout_ms: int | None = None + ) -> OffsetAndMetadata | None: ... + @overload + def committed( + self, partition: TopicPartition, metadata: bool, timeout_ms: int | None = None + ) -> int | OffsetAndMetadata | None: ... + + def topics(self) -> set[str]: ... + def partitions_for_topic(self, topic: str) -> set[int]: ... + def poll( + self, timeout_ms: int = 0, max_records: int | None = None, update_offsets: bool = True + ) -> dict[TopicPartition, list[ConsumerRecord]]: ... + def position(self, partition: TopicPartition, timeout_ms: int | None = None) -> int | None: ... + def highwater(self, partition: TopicPartition) -> int | None: ... + def pause(self, *partitions: TopicPartition) -> None: ... + def paused(self) -> set[TopicPartition]: ... + def resume(self, *partitions: TopicPartition) -> None: ... + def seek(self, partition: TopicPartition, offset: int) -> None: ... + def seek_to_beginning(self, *partitions: TopicPartition) -> None: ... + def seek_to_end(self, *partitions: TopicPartition) -> None: ... + def subscribe( + self, topics: Iterable[str] = (), pattern: str | None = None, listener: ConsumerRebalanceListener | None = None + ) -> None: ... + def subscription(self) -> set[str]: ... def unsubscribe(self) -> None: ... - def metrics(self, raw: bool = False): ... - def offsets_for_times(self, timestamps): ... - def beginning_offsets(self, partitions): ... - def end_offsets(self, partitions): ... - def __iter__(self): ... - def __next__(self): ... + def metrics(self, raw: bool = False) -> dict[str, dict[str, object]] | dict[object, object] | None: ... + def offsets_for_times(self, timestamps: Mapping[TopicPartition, int]) -> dict[TopicPartition, OffsetAndTimestamp | None]: ... + def beginning_offsets(self, partitions: Iterable[TopicPartition]) -> dict[TopicPartition, int]: ... + def end_offsets(self, partitions: Iterable[TopicPartition]) -> dict[TopicPartition, int]: ... + def __iter__(self) -> Self: ... + def __next__(self) -> ConsumerRecord: ... diff --git a/stubs/kafka-python/kafka/producer/future.pyi b/stubs/kafka-python/kafka/producer/future.pyi index dc02d81662c6..ad0fa3962f16 100644 --- a/stubs/kafka-python/kafka/producer/future.pyi +++ b/stubs/kafka-python/kafka/producer/future.pyi @@ -2,10 +2,11 @@ from _typeshed import Incomplete from typing import NamedTuple from kafka.future import Future +from kafka.structs import TopicPartition class FutureProduceResult(Future): - topic_partition: Incomplete - def __init__(self, topic_partition) -> None: ... + topic_partition: TopicPartition + def __init__(self, topic_partition: TopicPartition) -> None: ... def success(self, value): ... def failure(self, error): ... def wait(self, timeout=None): ... @@ -25,12 +26,12 @@ class FutureRecordMetadata(Future): def get(self, timeout=None): ... class RecordMetadata(NamedTuple): - topic: Incomplete - partition: Incomplete - topic_partition: Incomplete - offset: Incomplete - timestamp: Incomplete - checksum: Incomplete - serialized_key_size: Incomplete - serialized_value_size: Incomplete - serialized_header_size: Incomplete + topic: str + partition: int + topic_partition: TopicPartition + offset: int + timestamp: int + checksum: int | None + serialized_key_size: int + serialized_value_size: int + serialized_header_size: int diff --git a/stubs/kafka-python/kafka/producer/kafka.pyi b/stubs/kafka-python/kafka/producer/kafka.pyi index 2bf712815c2c..ccba9b0083dd 100644 --- a/stubs/kafka-python/kafka/producer/kafka.pyi +++ b/stubs/kafka-python/kafka/producer/kafka.pyi @@ -1,4 +1,79 @@ +import selectors +import ssl from _typeshed import Incomplete +from collections.abc import Callable, Mapping, Sequence +from typing import Literal, TypeAlias, TypedDict +from typing_extensions import Unpack + +from kafka.producer.future import FutureRecordMetadata +from kafka.serializer.abstract import Serializer +from kafka.structs import OffsetAndMetadata, TopicPartition + +_ApiVersion: TypeAlias = tuple[int, ...] +_BootstrapServers: TypeAlias = str | Sequence[str] +_KafkaClientFactory: TypeAlias = Callable[..., object] +_Partitioner: TypeAlias = Callable[[bytes | None, Sequence[int], Sequence[int]], int] +_ProducerSerializer: TypeAlias = Serializer | Callable[[object], bytes] +_SaslMechanism: TypeAlias = Literal["PLAIN", "GSSAPI", "OAUTHBEARER", "SCRAM-SHA-256", "SCRAM-SHA-512"] +_SecurityProtocol: TypeAlias = Literal["PLAINTEXT", "SSL", "SASL_PLAINTEXT", "SASL_SSL"] +_SocketOption: TypeAlias = tuple[int, int, int] + +class _KafkaProducerConfig(TypedDict, total=False): + bootstrap_servers: _BootstrapServers + client_id: str | None + key_serializer: _ProducerSerializer | None + value_serializer: _ProducerSerializer | None + enable_idempotence: bool + transactional_id: str | None + transaction_timeout_ms: int + delivery_timeout_ms: float + acks: int | Literal["all"] + bootstrap_topics_filter: set[str] + compression_type: Literal["gzip", "snappy", "lz4", "zstd"] | None + retries: int | float + batch_size: int + linger_ms: int + partitioner: _Partitioner + connections_max_idle_ms: int + max_block_ms: int + max_request_size: int + allow_auto_create_topics: bool + metadata_max_age_ms: int + retry_backoff_ms: int + request_timeout_ms: int + receive_buffer_bytes: int | None + send_buffer_bytes: int | None + socket_options: Sequence[_SocketOption] + sock_chunk_bytes: int + sock_chunk_buffer_count: int + reconnect_backoff_ms: int + reconnect_backoff_max_ms: int + max_in_flight_requests_per_connection: int + security_protocol: _SecurityProtocol + ssl_context: ssl.SSLContext | None + ssl_check_hostname: bool + ssl_cafile: str | None + ssl_certfile: str | None + ssl_keyfile: str | None + ssl_crlfile: str | None + ssl_password: str | None + ssl_ciphers: str | None + api_version: _ApiVersion | None + api_version_auto_timeout_ms: int + metric_reporters: Sequence[type[object]] + metrics_enabled: bool + metrics_num_samples: int + metrics_sample_window_ms: int + selector: type[selectors.BaseSelector] + sasl_mechanism: _SaslMechanism | None + sasl_plain_username: str | None + sasl_plain_password: str | None + sasl_kerberos_name: object | None + sasl_kerberos_service_name: str + sasl_kerberos_domain_name: str | None + sasl_oauth_token_provider: object | None + socks5_proxy: str | None + kafka_client: _KafkaClientFactory log: Incomplete PRODUCER_CLIENT_ID_SEQUENCE: Incomplete @@ -7,18 +82,28 @@ class KafkaProducer: DEFAULT_CONFIG: Incomplete DEPRECATED_CONFIGS: Incomplete config: Incomplete - def __init__(self, **configs) -> None: ... + def __init__(self, **configs: Unpack[_KafkaProducerConfig]) -> None: ... def bootstrap_connected(self): ... def __del__(self) -> None: ... - def close(self, timeout=None, null_logger: bool = False): ... - def partitions_for(self, topic): ... + def close(self, timeout: float | None = None, null_logger: bool = False) -> None: ... + def partitions_for(self, topic: str) -> set[int]: ... @classmethod def max_usable_produce_magic(cls, api_version): ... def init_transactions(self) -> None: ... def begin_transaction(self) -> None: ... - def send_offsets_to_transaction(self, offsets, consumer_group_id) -> None: ... + def send_offsets_to_transaction( + self, offsets: Mapping[TopicPartition, OffsetAndMetadata], consumer_group_id: str + ) -> None: ... def commit_transaction(self) -> None: ... def abort_transaction(self) -> None: ... - def send(self, topic, value=None, key=None, headers=None, partition=None, timestamp_ms=None): ... - def flush(self, timeout=None) -> None: ... - def metrics(self, raw: bool = False): ... + def send( + self, + topic: str, + value: object = None, + key: object = None, + headers: Sequence[tuple[str, bytes]] | None = None, + partition: int | None = None, + timestamp_ms: int | None = None, + ) -> FutureRecordMetadata: ... + def flush(self, timeout: float | None = None) -> None: ... + def metrics(self, raw: bool = False) -> dict[str, dict[str, object]] | dict[object, object] | None: ... diff --git a/stubs/kafka-python/kafka/structs.pyi b/stubs/kafka-python/kafka/structs.pyi index 58a5098a8566..997afe9492f3 100644 --- a/stubs/kafka-python/kafka/structs.pyi +++ b/stubs/kafka-python/kafka/structs.pyi @@ -2,52 +2,52 @@ from _typeshed import Incomplete from typing import NamedTuple class TopicPartition(NamedTuple): - topic: Incomplete - partition: Incomplete + topic: str + partition: int class BrokerMetadata(NamedTuple): - nodeId: Incomplete - host: Incomplete - port: Incomplete - rack: Incomplete + nodeId: int + host: str + port: int + rack: str | None class PartitionMetadata(NamedTuple): - topic: Incomplete - partition: Incomplete - leader: Incomplete - leader_epoch: Incomplete - replicas: Incomplete - isr: Incomplete - offline_replicas: Incomplete + topic: str + partition: int + leader: int + leader_epoch: int | None + replicas: list[int] + isr: list[int] + offline_replicas: list[int] error: Incomplete class OffsetAndMetadata(NamedTuple): - offset: Incomplete - metadata: Incomplete - leader_epoch: Incomplete + offset: int + metadata: str + leader_epoch: int class OffsetAndTimestamp(NamedTuple): - offset: Incomplete - timestamp: Incomplete - leader_epoch: Incomplete + offset: int + timestamp: int + leader_epoch: int class MemberInformation(NamedTuple): - member_id: Incomplete - client_id: Incomplete - client_host: Incomplete + member_id: str + client_id: str + client_host: str member_metadata: Incomplete member_assignment: Incomplete class GroupInformation(NamedTuple): - error_code: Incomplete - group: Incomplete - state: Incomplete - protocol_type: Incomplete - protocol: Incomplete - members: Incomplete - authorized_operations: Incomplete + error_code: int + group: str + state: str + protocol_type: str + protocol: str + members: list[MemberInformation] + authorized_operations: list[str] class RetryOptions(NamedTuple): - limit: Incomplete - backoff_ms: Incomplete - retry_on_timeouts: Incomplete + limit: int + backoff_ms: int + retry_on_timeouts: bool From b490d49e583b3618c036e6f8b75c58dcad217693 Mon Sep 17 00:00:00 2001 From: Rasmus Nygren Date: Wed, 20 May 2026 22:05:31 +0200 Subject: [PATCH 3/5] Ensure stubtests for kafka-python passes --- .../@tests/stubtest_allowlist.txt | 21 +++++++++++++++++ stubs/kafka-python/METADATA.toml | 3 +++ stubs/kafka-python/kafka/admin/client.pyi | 4 +++- stubs/kafka-python/kafka/client_async.pyi | 3 +-- stubs/kafka-python/kafka/consumer/fetcher.pyi | 4 +++- stubs/kafka-python/kafka/consumer/group.pyi | 3 ++- stubs/kafka-python/kafka/coordinator/base.pyi | 2 ++ stubs/kafka-python/kafka/producer/kafka.pyi | 3 ++- stubs/kafka-python/kafka/producer/sender.pyi | 16 ++++++------- stubs/kafka-python/kafka/protocol/group.pyi | 6 ++--- stubs/kafka-python/kafka/protocol/message.pyi | 2 ++ stubs/kafka-python/kafka/protocol/produce.pyi | 23 +++++++++++-------- .../kafka/record/default_records.pyi | 8 +++---- 13 files changed, 67 insertions(+), 31 deletions(-) create mode 100644 stubs/kafka-python/@tests/stubtest_allowlist.txt diff --git a/stubs/kafka-python/@tests/stubtest_allowlist.txt b/stubs/kafka-python/@tests/stubtest_allowlist.txt new file mode 100644 index 000000000000..2d75794f5e1b --- /dev/null +++ b/stubs/kafka-python/@tests/stubtest_allowlist.txt @@ -0,0 +1,21 @@ +# Command-line entry points are not a useful typed API surface. +kafka.__main__ +kafka.admin.__main__ +kafka.consumer.__main__ +kafka.producer.__main__ + +# Concrete subclasses define these abstract properties as class attributes. +kafka.protocol.api.Request.API_KEY +kafka.protocol.api.Request.API_VERSION +kafka.protocol.api.Request.RESPONSE_TYPE +kafka.protocol.api.Request.SCHEMA +kafka.protocol.api.Response.API_KEY +kafka.protocol.api.Response.API_VERSION +kafka.protocol.api.Response.SCHEMA + +# Vendored compatibility modules are implementation details. +kafka.vendor +kafka.vendor.enum34 +kafka.vendor.selectors34 +kafka.vendor.six +kafka.vendor.socketpair diff --git a/stubs/kafka-python/METADATA.toml b/stubs/kafka-python/METADATA.toml index 2f06c1b96010..1404f47c9d12 100644 --- a/stubs/kafka-python/METADATA.toml +++ b/stubs/kafka-python/METADATA.toml @@ -1,2 +1,5 @@ version = "2.3.*" upstream-repository = "https://github.com/dpkp/kafka-python" + +[tool.stubtest] +stubtest-dependencies = ["pyperf"] diff --git a/stubs/kafka-python/kafka/admin/client.pyi b/stubs/kafka-python/kafka/admin/client.pyi index 9fd535f54bac..bbda95e50889 100644 --- a/stubs/kafka-python/kafka/admin/client.pyi +++ b/stubs/kafka-python/kafka/admin/client.pyi @@ -2,7 +2,7 @@ import selectors import ssl from _typeshed import Incomplete from collections.abc import Callable, Iterable, Mapping, Sequence -from typing import Literal, TypeAlias, TypedDict +from typing import Literal, TypeAlias, TypedDict, type_check_only from typing_extensions import Unpack from kafka.admin.acl_resource import ACL, ACLFilter @@ -20,6 +20,7 @@ _SaslMechanism: TypeAlias = Literal["PLAIN", "GSSAPI", "OAUTHBEARER", "SCRAM-SHA _SecurityProtocol: TypeAlias = Literal["PLAINTEXT", "SSL", "SASL_PLAINTEXT", "SASL_SSL"] _SocketOption: TypeAlias = tuple[int, int, int] +@type_check_only class _KafkaAdminClientConfig(TypedDict, total=False): bootstrap_servers: _BootstrapServers client_id: str @@ -59,6 +60,7 @@ class _KafkaAdminClientConfig(TypedDict, total=False): metrics_sample_window_ms: int kafka_client: _KafkaClientFactory +@type_check_only class _CreateAclsResult(TypedDict): succeeded: list[ACL] failed: list[tuple[ACL, KafkaError]] diff --git a/stubs/kafka-python/kafka/client_async.pyi b/stubs/kafka-python/kafka/client_async.pyi index b1b456ad7845..3946ec2b79a9 100644 --- a/stubs/kafka-python/kafka/client_async.pyi +++ b/stubs/kafka-python/kafka/client_async.pyi @@ -1,4 +1,5 @@ from _typeshed import Incomplete +from collections import OrderedDict as OrderedDict log: Incomplete socketpair: Incomplete @@ -33,8 +34,6 @@ class KafkaClient: def await_ready(self, node_id, timeout_ms: int = 30000): ... def send_and_receive(self, node_id, request): ... -OrderedDict = dict - class IdleConnectionManager: connections_max_idle: Incomplete next_idle_close_check_time: Incomplete diff --git a/stubs/kafka-python/kafka/consumer/fetcher.pyi b/stubs/kafka-python/kafka/consumer/fetcher.pyi index 7e5a0e1b1240..a34ae667d98b 100644 --- a/stubs/kafka-python/kafka/consumer/fetcher.pyi +++ b/stubs/kafka-python/kafka/consumer/fetcher.pyi @@ -1,5 +1,5 @@ from _typeshed import Incomplete -from typing import NamedTuple +from typing import ClassVar, NamedTuple import kafka.errors as Errors @@ -99,6 +99,8 @@ class FetchMetadata: THROTTLED_SESSION_ID: int INITIAL_EPOCH: int FINAL_EPOCH: int + INITIAL: ClassVar[FetchMetadata] + LEGACY: ClassVar[FetchMetadata] session_id: Incomplete epoch: Incomplete def __init__(self, session_id, epoch) -> None: ... diff --git a/stubs/kafka-python/kafka/consumer/group.pyi b/stubs/kafka-python/kafka/consumer/group.pyi index 166b595d3439..e18e3cf3dc33 100644 --- a/stubs/kafka-python/kafka/consumer/group.pyi +++ b/stubs/kafka-python/kafka/consumer/group.pyi @@ -2,7 +2,7 @@ import selectors import ssl from _typeshed import Incomplete from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence -from typing import Literal, TypeAlias, TypedDict, overload +from typing import Literal, TypeAlias, TypedDict, overload, type_check_only from typing_extensions import Self, Unpack from kafka.consumer.fetcher import ConsumerRecord @@ -20,6 +20,7 @@ _SaslMechanism: TypeAlias = Literal["PLAIN", "GSSAPI", "OAUTHBEARER", "SCRAM-SHA _SecurityProtocol: TypeAlias = Literal["PLAINTEXT", "SSL", "SASL_PLAINTEXT", "SASL_SSL"] _SocketOption: TypeAlias = tuple[int, int, int] +@type_check_only class _KafkaConsumerConfig(TypedDict, total=False): bootstrap_servers: _BootstrapServers client_id: str diff --git a/stubs/kafka-python/kafka/coordinator/base.pyi b/stubs/kafka-python/kafka/coordinator/base.pyi index 502bff9f7bf1..ae911d976734 100644 --- a/stubs/kafka-python/kafka/coordinator/base.pyi +++ b/stubs/kafka-python/kafka/coordinator/base.pyi @@ -1,6 +1,7 @@ import abc import threading from _typeshed import Incomplete +from typing import ClassVar from kafka import errors as Errors @@ -13,6 +14,7 @@ class MemberState: STABLE: str class Generation: + NO_GENERATION: ClassVar[Generation] generation_id: Incomplete member_id: Incomplete protocol: Incomplete diff --git a/stubs/kafka-python/kafka/producer/kafka.pyi b/stubs/kafka-python/kafka/producer/kafka.pyi index ccba9b0083dd..c00758c2f684 100644 --- a/stubs/kafka-python/kafka/producer/kafka.pyi +++ b/stubs/kafka-python/kafka/producer/kafka.pyi @@ -2,7 +2,7 @@ import selectors import ssl from _typeshed import Incomplete from collections.abc import Callable, Mapping, Sequence -from typing import Literal, TypeAlias, TypedDict +from typing import Literal, TypeAlias, TypedDict, type_check_only from typing_extensions import Unpack from kafka.producer.future import FutureRecordMetadata @@ -18,6 +18,7 @@ _SaslMechanism: TypeAlias = Literal["PLAIN", "GSSAPI", "OAUTHBEARER", "SCRAM-SHA _SecurityProtocol: TypeAlias = Literal["PLAINTEXT", "SSL", "SASL_PLAINTEXT", "SASL_SSL"] _SocketOption: TypeAlias = tuple[int, int, int] +@type_check_only class _KafkaProducerConfig(TypedDict, total=False): bootstrap_servers: _BootstrapServers client_id: str | None diff --git a/stubs/kafka-python/kafka/producer/sender.pyi b/stubs/kafka-python/kafka/producer/sender.pyi index c50b249d0c01..abbb22aac1d7 100644 --- a/stubs/kafka-python/kafka/producer/sender.pyi +++ b/stubs/kafka-python/kafka/producer/sender.pyi @@ -5,14 +5,14 @@ from typing import NamedTuple log: Incomplete class PartitionResponse(NamedTuple): - error: Incomplete - base_offset: Incomplete - last_offset: Incomplete - log_append_time: Incomplete - log_start_offset: Incomplete - record_errors: Incomplete - error_message: Incomplete - current_leader: Incomplete + error: Incomplete = ... + base_offset: Incomplete = ... + last_offset: Incomplete = ... + log_append_time: Incomplete = ... + log_start_offset: Incomplete = ... + record_errors: Incomplete = ... + error_message: Incomplete = ... + current_leader: Incomplete = ... class Sender(threading.Thread): DEFAULT_CONFIG: Incomplete diff --git a/stubs/kafka-python/kafka/protocol/group.pyi b/stubs/kafka-python/kafka/protocol/group.pyi index ea618f7e841c..8cfd38e655a3 100644 --- a/stubs/kafka-python/kafka/protocol/group.pyi +++ b/stubs/kafka-python/kafka/protocol/group.pyi @@ -8,9 +8,9 @@ DEFAULT_GENERATION_ID: int UNKNOWN_MEMBER_ID: str class GroupMember(NamedTuple): - member_id: Incomplete - group_instance_id: Incomplete - metadata_bytes: Incomplete + member_id: Incomplete = ... + group_instance_id: Incomplete = ... + metadata_bytes: Incomplete = ... class JoinGroupResponse_v0(Response): API_KEY: int diff --git a/stubs/kafka-python/kafka/protocol/message.pyi b/stubs/kafka-python/kafka/protocol/message.pyi index 3e2a48204671..c04794f2913a 100644 --- a/stubs/kafka-python/kafka/protocol/message.pyi +++ b/stubs/kafka-python/kafka/protocol/message.pyi @@ -1,4 +1,5 @@ from _typeshed import Incomplete +from typing_extensions import disjoint_base from kafka.protocol.struct import Struct from kafka.protocol.types import AbstractType @@ -30,6 +31,7 @@ class Message(Struct): def decompress(self): ... def __hash__(self): ... +@disjoint_base class PartialMessage(bytes): ... class MessageSet(AbstractType): diff --git a/stubs/kafka-python/kafka/protocol/produce.pyi b/stubs/kafka-python/kafka/protocol/produce.pyi index 98c88ea0c62b..7652fbf6be7c 100644 --- a/stubs/kafka-python/kafka/protocol/produce.pyi +++ b/stubs/kafka-python/kafka/protocol/produce.pyi @@ -1,5 +1,6 @@ import abc from _typeshed import Incomplete +from typing import type_check_only from kafka.protocol.api import Request, Response @@ -48,53 +49,55 @@ class ProduceResponse_v8(Response): API_VERSION: int SCHEMA: Incomplete -class ProduceRequest(Request, metaclass=abc.ABCMeta): +@type_check_only +class _ProduceRequest(Request, metaclass=abc.ABCMeta): API_KEY: int def expect_response(self): ... -class ProduceRequest_v0(ProduceRequest): +class ProduceRequest_v0(_ProduceRequest): API_VERSION: int RESPONSE_TYPE = ProduceResponse_v0 SCHEMA: Incomplete -class ProduceRequest_v1(ProduceRequest): +class ProduceRequest_v1(_ProduceRequest): API_VERSION: int RESPONSE_TYPE = ProduceResponse_v1 SCHEMA: Incomplete -class ProduceRequest_v2(ProduceRequest): +class ProduceRequest_v2(_ProduceRequest): API_VERSION: int RESPONSE_TYPE = ProduceResponse_v2 SCHEMA: Incomplete -class ProduceRequest_v3(ProduceRequest): +class ProduceRequest_v3(_ProduceRequest): API_VERSION: int RESPONSE_TYPE = ProduceResponse_v3 SCHEMA: Incomplete -class ProduceRequest_v4(ProduceRequest): +class ProduceRequest_v4(_ProduceRequest): API_VERSION: int RESPONSE_TYPE = ProduceResponse_v4 SCHEMA: Incomplete -class ProduceRequest_v5(ProduceRequest): +class ProduceRequest_v5(_ProduceRequest): API_VERSION: int RESPONSE_TYPE = ProduceResponse_v5 SCHEMA: Incomplete -class ProduceRequest_v6(ProduceRequest): +class ProduceRequest_v6(_ProduceRequest): API_VERSION: int RESPONSE_TYPE = ProduceResponse_v6 SCHEMA: Incomplete -class ProduceRequest_v7(ProduceRequest): +class ProduceRequest_v7(_ProduceRequest): API_VERSION: int RESPONSE_TYPE = ProduceResponse_v7 SCHEMA: Incomplete -class ProduceRequest_v8(ProduceRequest): +class ProduceRequest_v8(_ProduceRequest): API_VERSION: int RESPONSE_TYPE = ProduceResponse_v8 SCHEMA: Incomplete +ProduceRequest: list[type[_ProduceRequest]] ProduceResponse: Incomplete diff --git a/stubs/kafka-python/kafka/record/default_records.pyi b/stubs/kafka-python/kafka/record/default_records.pyi index e70f859a1307..bdb79252bc05 100644 --- a/stubs/kafka-python/kafka/record/default_records.pyi +++ b/stubs/kafka-python/kafka/record/default_records.pyi @@ -114,13 +114,13 @@ class DefaultRecordBatchBuilder(DefaultRecordBase, ABCRecordBatchBuilder): def producer_id(self): ... @property def producer_epoch(self): ... - def append( + def append( # type: ignore[override] self, offset, timestamp, key, value, - headers=..., + headers, encode_varint=..., size_of_varint=..., get_type=..., @@ -135,9 +135,9 @@ class DefaultRecordBatchBuilder(DefaultRecordBase, ABCRecordBatchBuilder): def build(self): ... def size(self): ... @classmethod - def header_size_in_bytes(self): ... + def header_size_in_bytes(cls): ... @classmethod - def size_in_bytes(self, offset_delta, timestamp_delta, key, value, headers): ... + def size_in_bytes(cls, offset_delta, timestamp_delta, key, value, headers): ... @classmethod def size_of(cls, key, value, headers): ... @classmethod From 4b3443a01131abce7f6d58733a6e09d31fc5dc09 Mon Sep 17 00:00:00 2001 From: Rasmus Nygren Date: Wed, 20 May 2026 22:42:47 +0200 Subject: [PATCH 4/5] kafka-stubs: maybe fix platform-specific stubtest failure --- stubs/kafka-python/@tests/stubtest_allowlist_darwin.txt | 2 ++ stubs/kafka-python/kafka/protocol/message.pyi | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 stubs/kafka-python/@tests/stubtest_allowlist_darwin.txt diff --git a/stubs/kafka-python/@tests/stubtest_allowlist_darwin.txt b/stubs/kafka-python/@tests/stubtest_allowlist_darwin.txt new file mode 100644 index 000000000000..0f5c5020fb76 --- /dev/null +++ b/stubs/kafka-python/@tests/stubtest_allowlist_darwin.txt @@ -0,0 +1,2 @@ +# The bytes subclass object layout differs by platform/Python build. +kafka.protocol.message.PartialMessage diff --git a/stubs/kafka-python/kafka/protocol/message.pyi b/stubs/kafka-python/kafka/protocol/message.pyi index c04794f2913a..3e2a48204671 100644 --- a/stubs/kafka-python/kafka/protocol/message.pyi +++ b/stubs/kafka-python/kafka/protocol/message.pyi @@ -1,5 +1,4 @@ from _typeshed import Incomplete -from typing_extensions import disjoint_base from kafka.protocol.struct import Struct from kafka.protocol.types import AbstractType @@ -31,7 +30,6 @@ class Message(Struct): def decompress(self): ... def __hash__(self): ... -@disjoint_base class PartialMessage(bytes): ... class MessageSet(AbstractType): From 5f638e69259590b3e135565871dd72399eccfad7 Mon Sep 17 00:00:00 2001 From: Rasmus Nygren Date: Fri, 22 May 2026 11:03:14 +0200 Subject: [PATCH 5/5] Drop benchmark modules from kafka-python stubs --- .../@tests/stubtest_allowlist.txt | 3 +++ stubs/kafka-python/METADATA.toml | 3 --- .../kafka/benchmarks/__init__.pyi | 0 .../kafka/benchmarks/consumer_performance.pyi | 18 -------------- .../kafka/benchmarks/load_example.pyi | 24 ------------------- .../kafka/benchmarks/producer_performance.pyi | 18 -------------- .../kafka/benchmarks/record_batch_compose.pyi | 12 ---------- .../kafka/benchmarks/record_batch_read.pyi | 13 ---------- .../kafka/benchmarks/varint_speed.pyi | 17 ------------- 9 files changed, 3 insertions(+), 105 deletions(-) delete mode 100644 stubs/kafka-python/kafka/benchmarks/__init__.pyi delete mode 100644 stubs/kafka-python/kafka/benchmarks/consumer_performance.pyi delete mode 100644 stubs/kafka-python/kafka/benchmarks/load_example.pyi delete mode 100644 stubs/kafka-python/kafka/benchmarks/producer_performance.pyi delete mode 100644 stubs/kafka-python/kafka/benchmarks/record_batch_compose.pyi delete mode 100644 stubs/kafka-python/kafka/benchmarks/record_batch_read.pyi delete mode 100644 stubs/kafka-python/kafka/benchmarks/varint_speed.pyi diff --git a/stubs/kafka-python/@tests/stubtest_allowlist.txt b/stubs/kafka-python/@tests/stubtest_allowlist.txt index 2d75794f5e1b..b8dfd146c7cc 100644 --- a/stubs/kafka-python/@tests/stubtest_allowlist.txt +++ b/stubs/kafka-python/@tests/stubtest_allowlist.txt @@ -4,6 +4,9 @@ kafka.admin.__main__ kafka.consumer.__main__ kafka.producer.__main__ +# Benchmark modules are not included in type stubs. +kafka.benchmarks.* + # Concrete subclasses define these abstract properties as class attributes. kafka.protocol.api.Request.API_KEY kafka.protocol.api.Request.API_VERSION diff --git a/stubs/kafka-python/METADATA.toml b/stubs/kafka-python/METADATA.toml index 1404f47c9d12..2f06c1b96010 100644 --- a/stubs/kafka-python/METADATA.toml +++ b/stubs/kafka-python/METADATA.toml @@ -1,5 +1,2 @@ version = "2.3.*" upstream-repository = "https://github.com/dpkp/kafka-python" - -[tool.stubtest] -stubtest-dependencies = ["pyperf"] diff --git a/stubs/kafka-python/kafka/benchmarks/__init__.pyi b/stubs/kafka-python/kafka/benchmarks/__init__.pyi deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/stubs/kafka-python/kafka/benchmarks/consumer_performance.pyi b/stubs/kafka-python/kafka/benchmarks/consumer_performance.pyi deleted file mode 100644 index 99a13accd26f..000000000000 --- a/stubs/kafka-python/kafka/benchmarks/consumer_performance.pyi +++ /dev/null @@ -1,18 +0,0 @@ -import threading -from _typeshed import Incomplete - -class ConsumerPerformance: - @staticmethod - def run(args) -> None: ... - -class StatsReporter(threading.Thread): - interval: Incomplete - consumer: Incomplete - event: Incomplete - raw_metrics: Incomplete - def __init__(self, interval, consumer, event=None, raw_metrics: bool = False) -> None: ... - def print_stats(self) -> None: ... - def print_final(self) -> None: ... - def run(self) -> None: ... - -def get_args_parser(): ... diff --git a/stubs/kafka-python/kafka/benchmarks/load_example.pyi b/stubs/kafka-python/kafka/benchmarks/load_example.pyi deleted file mode 100644 index 28651aa44f86..000000000000 --- a/stubs/kafka-python/kafka/benchmarks/load_example.pyi +++ /dev/null @@ -1,24 +0,0 @@ -import threading -from _typeshed import Incomplete - -class Producer(threading.Thread): - bootstrap_servers: Incomplete - topic: Incomplete - stop_event: Incomplete - big_msg: Incomplete - def __init__(self, bootstrap_servers, topic, stop_event, msg_size) -> None: ... - sent: int - def run(self) -> None: ... - -class Consumer(threading.Thread): - bootstrap_servers: Incomplete - topic: Incomplete - stop_event: Incomplete - msg_size: Incomplete - def __init__(self, bootstrap_servers, topic, stop_event, msg_size) -> None: ... - valid: int - invalid: int - def run(self) -> None: ... - -def get_args_parser(): ... -def main(args) -> None: ... diff --git a/stubs/kafka-python/kafka/benchmarks/producer_performance.pyi b/stubs/kafka-python/kafka/benchmarks/producer_performance.pyi deleted file mode 100644 index b4432d9f2719..000000000000 --- a/stubs/kafka-python/kafka/benchmarks/producer_performance.pyi +++ /dev/null @@ -1,18 +0,0 @@ -import threading -from _typeshed import Incomplete - -class ProducerPerformance: - @staticmethod - def run(args) -> None: ... - -class StatsReporter(threading.Thread): - interval: Incomplete - producer: Incomplete - event: Incomplete - raw_metrics: Incomplete - def __init__(self, interval, producer, event=None, raw_metrics: bool = False) -> None: ... - def print_stats(self) -> None: ... - def print_final(self) -> None: ... - def run(self) -> None: ... - -def get_args_parser(): ... diff --git a/stubs/kafka-python/kafka/benchmarks/record_batch_compose.pyi b/stubs/kafka-python/kafka/benchmarks/record_batch_compose.pyi deleted file mode 100644 index edbc7e4294c8..000000000000 --- a/stubs/kafka-python/kafka/benchmarks/record_batch_compose.pyi +++ /dev/null @@ -1,12 +0,0 @@ -from _typeshed import Incomplete - -DEFAULT_BATCH_SIZE: Incomplete -KEY_SIZE: int -VALUE_SIZE: int -TIMESTAMP_RANGE: Incomplete -MESSAGES_PER_BATCH: int - -def random_bytes(length): ... -def prepare(): ... -def finalize(results) -> None: ... -def func(loops, magic): ... diff --git a/stubs/kafka-python/kafka/benchmarks/record_batch_read.pyi b/stubs/kafka-python/kafka/benchmarks/record_batch_read.pyi deleted file mode 100644 index 229763854f91..000000000000 --- a/stubs/kafka-python/kafka/benchmarks/record_batch_read.pyi +++ /dev/null @@ -1,13 +0,0 @@ -from _typeshed import Incomplete - -DEFAULT_BATCH_SIZE: Incomplete -KEY_SIZE: int -VALUE_SIZE: int -TIMESTAMP_RANGE: Incomplete -BATCH_SAMPLES: int -MESSAGES_PER_BATCH: int - -def random_bytes(length): ... -def prepare(magic): ... -def finalize(results) -> None: ... -def func(loops, magic): ... diff --git a/stubs/kafka-python/kafka/benchmarks/varint_speed.pyi b/stubs/kafka-python/kafka/benchmarks/varint_speed.pyi deleted file mode 100644 index 8c2a5962d7de..000000000000 --- a/stubs/kafka-python/kafka/benchmarks/varint_speed.pyi +++ /dev/null @@ -1,17 +0,0 @@ -from _typeshed import Incomplete - -test_data: Incomplete -BENCH_VALUES_ENC: Incomplete -BENCH_VALUES_DEC: Incomplete - -def encode_varint_1(num): ... -def encode_varint_2(value, int2byte=...): ... -def encode_varint_3(value, buf): ... -def encode_varint_4(value, int2byte=...): ... -def encode_varint_5(value, buf, pos: int = 0): ... -def encode_varint_6(value, buf): ... -def size_of_varint_1(value): ... -def size_of_varint_2(value): ... -def decode_varint_1(buffer, pos: int = 0): ... -def decode_varint_2(buffer, pos: int = 0): ... -def decode_varint_3(buffer, pos: int = 0): ...