Skip to content

Commit 9a8a2e2

Browse files
dpkpclaude
andauthored
Add kafka-python cli script to wrap admin/consumer/producer (#3034)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 31e3de0 commit 9a8a2e2

5 files changed

Lines changed: 51 additions & 12 deletions

File tree

kafka/cli/__init__.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import sys
2+
3+
USAGE = """\
4+
usage: kafka-python {admin,consumer,producer} [options]
5+
6+
Top-level entry point for the kafka-python command-line tools.
7+
8+
kafka-python admin -- administrative client (topics, configs, groups, ...)
9+
kafka-python consumer -- console consumer
10+
kafka-python producer -- console producer
11+
12+
Run `kafka-python <subcommand> --help` for subcommand-specific options.
13+
"""
14+
15+
16+
def run_cli(args=None):
17+
if args is None:
18+
args = sys.argv[1:]
19+
20+
if not args or args[0] in ('-h', '--help'):
21+
sys.stdout.write(USAGE)
22+
return 0 if args else 1
23+
24+
sub, rest = args[0], args[1:]
25+
if sub == 'admin':
26+
from kafka.cli.admin import run_cli as sub_run
27+
elif sub == 'consumer':
28+
from kafka.cli.consumer import run_cli as sub_run
29+
elif sub == 'producer':
30+
from kafka.cli.producer import run_cli as sub_run
31+
else:
32+
sys.stderr.write('kafka-python: unknown subcommand: %r\n' % sub)
33+
sys.stderr.write(USAGE)
34+
return 2
35+
36+
return sub_run(rest, prog='kafka-python %s' % sub)

kafka/cli/admin/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
from kafka.errors import BrokerResponseError
1616

1717

18-
def build_parser(groups=()):
18+
def build_parser(groups=(), prog=None):
1919
parser = argparse.ArgumentParser(
20-
prog='python -m kafka.admin',
20+
prog=prog or 'python -m kafka.admin',
2121
description='Kafka Admin Client',
2222
)
2323
add_common_cli_args(parser, bootstrap_required=False)
@@ -37,12 +37,12 @@ def build_parser(groups=()):
3737
return parser
3838

3939

40-
def run_cli(args=None):
40+
def run_cli(args=None, prog=None):
4141
parser = build_parser([
4242
ACLsCommandGroup, ClusterCommandGroup, ConfigsCommandGroup,
4343
TopicsCommandGroup, PartitionsCommandGroup, GroupsCommandGroup,
4444
UsersCommandGroup,
45-
])
45+
], prog=prog)
4646
config = parser.parse_args(args)
4747
if not config.group:
4848
parser.print_help()

kafka/cli/consumer/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
from ..common import add_common_cli_args, configure_logging, build_connect_kwargs
77

88

9-
def main_parser():
9+
def main_parser(prog=None):
1010
parser = argparse.ArgumentParser(
11-
prog='python -m kafka.consumer',
11+
prog=prog or 'python -m kafka.consumer',
1212
description='Kafka console consumer',
1313
)
1414
add_common_cli_args(parser)
@@ -30,8 +30,8 @@ def main_parser():
3030
return parser
3131

3232

33-
def run_cli(args=None):
34-
parser = main_parser()
33+
def run_cli(args=None, prog=None):
34+
parser = main_parser(prog=prog)
3535
config = parser.parse_args(args)
3636

3737
if config.format not in ('str', 'raw', 'full'):

kafka/cli/producer/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
from ..common import add_common_cli_args, configure_logging, build_connect_kwargs
77

88

9-
def main_parser():
9+
def main_parser(prog=None):
1010
parser = argparse.ArgumentParser(
11-
prog='python -m kafka.producer',
11+
prog=prog or 'python -m kafka.producer',
1212
description='Kafka console producer',
1313
)
1414
add_common_cli_args(parser)
@@ -22,8 +22,8 @@ def main_parser():
2222
return parser
2323

2424

25-
def run_cli(args=None):
26-
parser = main_parser()
25+
def run_cli(args=None, prog=None):
26+
parser = main_parser(prog=prog)
2727
config = parser.parse_args(args)
2828

2929
configure_logging(config)

pyproject.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ Repository = "https://github.com/dpkp/kafka-python"
3636
Issues = "https://github.com/dpkp/kafka-python/issues"
3737
Changelog = "https://github.com/dpkp/kafka-python/blob/master/CHANGES.md"
3838

39+
[project.scripts]
40+
kafka-python = "kafka.cli:run_cli"
41+
3942
[project.optional-dependencies]
4043
crc32c = ["crc32c"]
4144
lz4 = ["lz4"]

0 commit comments

Comments
 (0)