Skip to content

Commit

Permalink
migrate to cloup
Browse files Browse the repository at this point in the history
  • Loading branch information
sauljabin committed Jul 12, 2024
1 parent 92a2788 commit 72409d1
Showing 1 changed file with 55 additions and 68 deletions.
123 changes: 55 additions & 68 deletions kaskade/main.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import sys

import click
import cloup

from kaskade import APP_VERSION
from kaskade.consumer import KaskadeConsumer
from kaskade.admin import KaskadeAdmin
from kaskade.consumer import KaskadeConsumer
from kaskade.models import Format

SR_URL_MESSAGE_VALIDATION = """Usage: kaskade consumer [OPTIONS]
Expand All @@ -17,58 +17,45 @@
Error: Missing option '-k avro' and/or '-v avro'"""

epilog = "More information at https://github.com/sauljabin/kaskade."

@click.group()
@click.version_option(APP_VERSION)
def cli() -> None:
"""
kaskade is a terminal user interface for kafka.
\b
Admin mode:
Allows you to list and search topics.
Run <kaskade admin --help> for more information.
\b
Consumer mode:
Consumes a topic.
Run <kaskade consumer --help> for more information.

More at https://github.com/sauljabin/kaskade.
"""
@cloup.group(epilog=epilog)
@cloup.version_option(APP_VERSION)
def cli() -> None:
"""kaskade is a terminal user interface for kafka."""
pass


@cli.command()
@click.option(
"-b",
"bootstrap_servers_input",
help="Bootstrap server(s). Comma-separated list of host and port pairs. Example: localhost:9091,localhost:9092.",
metavar="host:port",
required=True,
)
@click.option(
"-x",
"kafka_properties_input",
help="Kafka property. Set a librdkafka configuration property. Multiple -x are allowed.",
metavar="property=value",
multiple=True,
@cli.command(epilog=epilog)
@cloup.option_group(
"Kafka options",
cloup.option(
"-b",
"bootstrap_servers_input",
help="Bootstrap server(s). Comma-separated list of host and port pairs. Example: localhost:9091,localhost:9092.",
metavar="host:port",
required=True,
),
cloup.option(
"-x",
"kafka_properties_input",
help="Kafka property. Set a librdkafka configuration property. Multiple -x are allowed.",
metavar="property=value",
multiple=True,
),
)
def admin(
bootstrap_servers_input: str,
kafka_properties_input: tuple[str, ...],
) -> None:
"""
kaskade admin mode allows you to manage topics.
Administrator mode.
\b
Examples:
kaskade admin -b localhost:9092
kaskade admin -b localhost:9092 -x security.protocol=SSL
More at https://github.com/sauljabin/kaskade.
kaskade admin -b localhost:9092
kaskade admin -b localhost:9092 -x security.protocol=SSL
"""
kafka_conf = {k: v for (k, v) in [pair.split("=", 1) for pair in kafka_properties_input]}
kafka_conf["bootstrap.servers"] = bootstrap_servers_input
Expand All @@ -77,45 +64,48 @@ def admin(
kaskade_app.run()


@cli.command()
@click.option(
"-b",
"bootstrap_servers_input",
help="Bootstrap server(s). Comma-separated list of host and port pairs. Example: localhost:9091,localhost:9092.",
metavar="host:port",
required=True,
@cli.command(epilog=epilog)
@cloup.option_group(
"Kafka options",
cloup.option(
"-b",
"bootstrap_servers_input",
help="Bootstrap server(s). Comma-separated list of host and port pairs. Example: localhost:9091,localhost:9092.",
metavar="host:port",
required=True,
),
cloup.option(
"-x",
"kafka_properties_input",
help="Kafka property. Set a librdkafka configuration property. Multiple -x are allowed.",
metavar="property=value",
multiple=True,
),
)
@click.option(
"-x",
"kafka_properties_input",
help="Kafka property. Set a librdkafka configuration property. Multiple -x are allowed.",
metavar="property=value",
multiple=True,
)
@click.option(
@cloup.option(
"-t",
"topic",
help="Topic.",
metavar="name",
required=True,
)
@click.option(
@cloup.option(
"-k",
"key_format_str",
type=click.Choice(Format.str_list(), False),
type=cloup.Choice(Format.str_list(), False),
help="Key format.",
default=str(Format.BYTES),
show_default=True,
)
@click.option(
@cloup.option(
"-v",
"value_format_str",
type=click.Choice(Format.str_list(), False),
type=cloup.Choice(Format.str_list(), False),
help="Value format.",
default=str(Format.BYTES),
show_default=True,
)
@click.option(
@cloup.option(
"-s",
"registry_properties_input",
help="Schema Registry property. Set a SchemaRegistryClient property. Multiple -s are allowed. Needed if -k avro "
Expand All @@ -132,17 +122,14 @@ def consumer(
value_format_str: str,
) -> None:
"""
kaskade consumer mode.
Consumer mode.
\b
Examples:
kaskade consumer -b localhost:9092 -t my-topic
kaskade consumer -b localhost:9092 -t my-topic -v json
kaskade consumer -b localhost:9092 -t my-topic -x auto.offset.reset=earliest
kaskade consumer -b localhost:9092 -t my-topic -s url=http://localhost:8081 -v avro
More at https://github.com/sauljabin/kaskade.
kaskade consumer -b localhost:9092 -t my-topic
kaskade consumer -b localhost:9092 -t my-topic -v json
kaskade consumer -b localhost:9092 -t my-topic -x auto.offset.reset=earliest
kaskade consumer -b localhost:9092 -t my-topic -s url=http://localhost:8081 -v avro
"""
kafka_conf = {k: v for (k, v) in [pair.split("=", 1) for pair in kafka_properties_input]}
kafka_conf["bootstrap.servers"] = bootstrap_servers_input
Expand Down

0 comments on commit 72409d1

Please sign in to comment.