From de315a2d0f9a7754fca63d06d03c1ff298d0f784 Mon Sep 17 00:00:00 2001 From: Ognjen Joldzic <44299700+ognjen-j@users.noreply.github.com> Date: Fri, 28 May 2021 16:06:56 +0200 Subject: [PATCH] Refactored the delete topic logic. (#186) * Refactored the delete topic logic. * Modified the tests to use the plural variant of the delete topic command. * Bugfix when returning futures. * Refactoring for the ensure_kafka_futures_method. * Bugfix when re-raising exceptions on waiting for futures. * Fixed an endless loop in the futures method. * Fix for the timeout issue. * Comment fixes. * Made the exception trace easier to read. --- esque/cli/commands.py | 31 +- esque/clients/consumer.py | 1 + esque/controller/topic_controller.py | 18 +- esque/errors.py | 4 + esque/helpers.py | 31 +- poetry.lock | 774 ++++++------------- tests/integration/commands/test_deletion.py | 60 +- tests/integration/commands/test_multiargs.py | 8 +- 8 files changed, 349 insertions(+), 578 deletions(-) diff --git a/esque/cli/commands.py b/esque/cli/commands.py index 3de6f1a9..ae8d7d32 100644 --- a/esque/cli/commands.py +++ b/esque/cli/commands.py @@ -455,16 +455,33 @@ def delete_consumer_group(state: State, consumergroup_id: Tuple[str]): @delete.command("topic") -@click.argument( - "topic-name", metavar="TOPIC_NAME", required=False, type=click.STRING, autocompletion=list_topics, nargs=-1 -) +@click.argument("topic-name", metavar="TOPIC_NAME", required=False, type=click.STRING, autocompletion=list_topics) @default_options def delete_topic(state: State, topic_name: str): - """Delete a topic + """Delete a single topic WARNING: This command cannot be undone, and all data in the topic will be lost. """ - topic_names = list(topic_name) + get_piped_stdin_arguments() + topic_controller = state.cluster.topic_controller + current_topics = [topic.name for topic in topic_controller.list_topics(get_topic_objects=False)] + if topic_name not in current_topics: + click.echo(click.style(f"Topic [{topic_name}] doesn't exist on the cluster.", fg="red")) + else: + click.echo(f"Deleting {click.style(topic_name, fg='green')}") + if ensure_approval("Are you sure?", no_verify=state.no_verify): + topic_controller.delete_topics([Topic(topic_name)]) + click.echo(click.style(f"Topic '{topic_name}' successfully deleted.", fg="green")) + + +@delete.command("topics") +@click.argument("topic-list", metavar="TOPIC_LIST", required=False, autocompletion=list_topics, nargs=-1) +@default_options +def delete_topics(state: State, topic_list: Tuple[str]): + """Delete multiple topics + + WARNING: This command cannot be undone, and all data in the topics will be lost. + """ + topic_names = list(topic_list) + get_piped_stdin_arguments() topic_controller = state.cluster.topic_controller current_topics = [topic.name for topic in topic_controller.list_topics(get_topic_objects=False)] existing_topics: List[str] = [] @@ -478,9 +495,7 @@ def delete_topic(state: State, topic_name: str): click.echo(click.style("The provided list contains no existing topics.", fg="red")) else: if ensure_approval("Are you sure?", no_verify=state.no_verify): - for topic_name in existing_topics: - topic_controller.delete_topic(Topic(topic_name)) - assert topic_name not in (t.name for t in topic_controller.list_topics(get_topic_objects=False)) + topic_controller.delete_topics([Topic(topic_name) for topic_name in existing_topics]) click.echo(click.style(f"Topics '{existing_topics}' successfully deleted.", fg="green")) diff --git a/esque/clients/consumer.py b/esque/clients/consumer.py index d151a988..9937e3c4 100644 --- a/esque/clients/consumer.py +++ b/esque/clients/consumer.py @@ -55,6 +55,7 @@ def _setup_config(self): { "group.id": self._group_id, "error_cb": log_error, + "session.timeout.ms": 10_000, # We need to commit offsets manually once we"re sure it got saved # to the sink "enable.auto.commit": self._enable_auto_commit, diff --git a/esque/controller/topic_controller.py b/esque/controller/topic_controller.py index cd666c5e..599ce57b 100644 --- a/esque/controller/topic_controller.py +++ b/esque/controller/topic_controller.py @@ -12,6 +12,7 @@ from confluent_kafka.cimpl import KafkaException, NewTopic, TopicPartition from esque.config import ESQUE_GROUP_ID, Config +from esque.errors import TopicDeletionException from esque.helpers import ensure_kafka_future_done from esque.resources.topic import Partition, Topic, TopicDiff @@ -96,9 +97,20 @@ def _get_altered_config(self, topic: Topic) -> Dict[str, str]: altered_config[name] = value return altered_config - def delete_topic(self, topic: Topic): - future = self.cluster.confluent_client.delete_topics([topic.name])[topic.name] - ensure_kafka_future_done(future) + def delete_topic(self, topic: Topic) -> bool: + return self.delete_topics([topic]) + + def delete_topics(self, topics: List[Topic]) -> bool: + futures = self.cluster.confluent_client.delete_topics([topic.name for topic in topics], operation_timeout=60) + errors: List[str] = [] + for topic_name, future in futures.items(): + try: + future.result() + except KafkaException as e: + errors.append(f"[{topic_name}]: {e.args[0].str()}") + if errors: + raise TopicDeletionException("The following exceptions occurred:\n " + "\n ".join(sorted(errors))) + return True def get_cluster_topic( self, topic_name: str, *, retrieve_last_timestamp: bool = False, retrieve_partition_data: bool = True diff --git a/esque/errors.py b/esque/errors.py index 996c9734..50533346 100644 --- a/esque/errors.py +++ b/esque/errors.py @@ -122,6 +122,10 @@ class InvalidReplicationFactorException(KafkaException): pass +class TopicDeletionException(ExceptionWithMessage): + pass + + class ValidationException(ExceptionWithMessage): pass diff --git a/esque/helpers.py b/esque/helpers.py index f2c83e29..aab2b2db 100644 --- a/esque/helpers.py +++ b/esque/helpers.py @@ -1,7 +1,6 @@ import logging from concurrent.futures import Future, wait -from itertools import islice -from typing import Type, TypeVar +from typing import List, Type, TypeVar import confluent_kafka import pendulum @@ -31,22 +30,24 @@ def set_instance(cls: Type[T], instance: T): def ensure_kafka_future_done(future: Future, timeout: int = 60 * 5) -> Future: - # Clients, such as confluents AdminClient, may return a done future with an exception - done, not_done = wait({future}, timeout=timeout) - - if not_done: - raise FutureTimeoutException("Future timed out after {} seconds".format(timeout)) + return ensure_kafka_futures_done(futures=[future], timeout=timeout)[0] - result = next(islice(done, 1)) - exception = result.exception() +def ensure_kafka_futures_done(futures: List[Future], timeout: int = 60 * 5) -> List[Future]: + # Clients, such as confluents AdminClient, may return a done future with an exception + done, not_done = wait(futures, timeout=timeout) - if exception is None: - return result - elif isinstance(exception, confluent_kafka.KafkaException): - raise_for_kafka_error(exception.args[0]) - else: - raise exception + if not_done: + raise FutureTimeoutException("{} future(s) timed out after {} seconds".format(len(not_done), timeout)) + for result in list(done): + exception = result.exception() + if exception is None: + continue + if isinstance(exception, confluent_kafka.KafkaException): + raise_for_kafka_error(exception.args[0]) + elif isinstance(exception, BaseException): + raise exception + return list(done) def unpack_confluent_config(config): diff --git a/poetry.lock b/poetry.lock index 71a5d89d..1e8e7351 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,67 +1,58 @@ [[package]] -name = "appdirs" -version = "1.4.4" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +name = "appdirs" optional = false python-versions = "*" +version = "1.4.4" [[package]] -name = "atomicwrites" -version = "1.4.0" -description = "Atomic file writes." category = "dev" +description = "Atomic file writes." +marker = "sys_platform == \"win32\"" +name = "atomicwrites" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "1.4.0" [[package]] -name = "attrs" -version = "20.3.0" -description = "Classes Without Boilerplate" category = "dev" +description = "Classes Without Boilerplate" +name = "attrs" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "furo", "sphinx", "pre-commit"] -docs = ["furo", "sphinx", "zope.interface"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"] +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "21.2.0" [[package]] -name = "avro-python3" -version = "1.10.0" -description = "Avro is a serialization and RPC framework." category = "main" +description = "Avro is a serialization and RPC framework." +name = "avro-python3" optional = false python-versions = ">=3.5" - -[package.extras] -snappy = ["python-snappy"] -zstandard = ["zstandard"] +version = "1.10.0" [[package]] -name = "bandit" -version = "1.7.0" -description = "Security oriented static analyser for python code." category = "dev" +description = "Security oriented static analyser for python code." +name = "bandit" optional = false python-versions = ">=3.5" +version = "1.7.0" [package.dependencies] -colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} GitPython = ">=1.0.1" PyYAML = ">=5.3.1" +colorama = ">=0.3.9" six = ">=1.10.0" stevedore = ">=1.20.0" [[package]] -name = "black" -version = "19.3b0" -description = "The uncompromising code formatter." category = "dev" +description = "The uncompromising code formatter." +name = "black" optional = false python-versions = ">=3.6" +version = "19.3b0" [package.dependencies] appdirs = "*" @@ -69,378 +60,352 @@ attrs = ">=18.1.0" click = ">=6.5" toml = ">=0.9.4" -[package.extras] -d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] - [[package]] -name = "certifi" -version = "2020.12.5" -description = "Python package for providing Mozilla's CA Bundle." category = "main" +description = "Python package for providing Mozilla's CA Bundle." +name = "certifi" optional = false python-versions = "*" +version = "2020.12.5" [[package]] -name = "chardet" -version = "4.0.0" -description = "Universal encoding detector for Python 2 and 3" category = "main" +description = "Universal encoding detector for Python 2 and 3" +name = "chardet" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "4.0.0" [[package]] -name = "click" -version = "7.1.2" -description = "Composable command line interface toolkit" category = "main" +description = "Composable command line interface toolkit" +name = "click" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "7.1.2" [[package]] -name = "colorama" -version = "0.4.4" -description = "Cross-platform colored terminal text." category = "dev" +description = "Cross-platform colored terminal text." +marker = "sys_platform == \"win32\" or platform_system == \"Windows\"" +name = "colorama" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "0.4.4" [[package]] -name = "confluent-kafka" -version = "1.6.0" -description = "Confluent's Python client for Apache Kafka" category = "main" +description = "Confluent's Python client for Apache Kafka" +name = "confluent-kafka" optional = false python-versions = "*" +version = "1.7.0" [package.dependencies] -avro-python3 = {version = "1.10.0", optional = true, markers = "python_version > \"3.0\" and extra == \"avro\""} -fastavro = {version = ">=1.0", optional = true, markers = "python_version > \"3.0\" and extra == \"avro\""} -requests = {version = "*", optional = true, markers = "extra == \"avro\""} +requests = "*" -[package.extras] -avro = ["requests", "fastavro (>=0.23.0,<1.0)", "avro (==1.10.0)", "fastavro (>=1.0)", "avro-python3 (==1.10.0)"] -dev = ["pytest-timeout", "flake8", "requests", "pytest (==4.6.4)", "fastavro (>=0.23.0,<1.0)", "avro (==1.10.0)", "fastavro (>=1.0)", "avro-python3 (==1.10.0)", "pytest"] -doc = ["sphinx", "sphinx-rtd-theme", "requests", "fastavro (>=0.23.0,<1.0)", "avro (==1.10.0)", "fastavro (>=1.0)", "avro-python3 (==1.10.0)"] -json = ["jsonschema", "requests", "pyrsistent (==0.16.1)", "pyrsistent"] -protobuf = ["protobuf", "requests"] -schema-registry = ["requests"] +[package.dependencies.avro-python3] +python = ">=3.1" +version = "1.10.0" + +[package.dependencies.fastavro] +python = ">=3.1" +version = ">=1.0" [[package]] -name = "coverage" -version = "5.5" -description = "Code coverage measurement for Python" category = "dev" +description = "Code coverage measurement for Python" +name = "coverage" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" - -[package.extras] -toml = ["toml"] +version = "5.5" [[package]] -name = "coveralls" -version = "1.11.1" -description = "Show coverage stats online via coveralls.io" category = "dev" +description = "Show coverage stats online via coveralls.io" +name = "coveralls" optional = false python-versions = "*" +version = "1.11.1" [package.dependencies] coverage = ">=3.6,<6.0" docopt = ">=0.6.1" requests = ">=1.0.0" -[package.extras] -yaml = ["PyYAML (>=3.10,<5.3)"] - [[package]] -name = "docopt" -version = "0.6.2" -description = "Pythonic argument parser, that will make you smile" category = "dev" +description = "Pythonic argument parser, that will make you smile" +name = "docopt" optional = false python-versions = "*" +version = "0.6.2" [[package]] -name = "fastavro" -version = "1.3.3" -description = "Fast read/write of AVRO files" category = "main" +description = "Fast read/write of AVRO files" +name = "fastavro" optional = false python-versions = ">=3.6" - -[package.extras] -codecs = ["python-snappy", "zstandard", "lz4"] -lz4 = ["lz4"] -snappy = ["python-snappy"] -zstandard = ["zstandard"] +version = "1.4.1" [[package]] -name = "flake8" -version = "3.9.0" -description = "the modular source code checker: pep8 pyflakes and co" category = "dev" +description = "the modular source code checker: pep8 pyflakes and co" +name = "flake8" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +version = "3.9.2" [package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} mccabe = ">=0.6.0,<0.7.0" pycodestyle = ">=2.7.0,<2.8.0" pyflakes = ">=2.3.0,<2.4.0" +[package.dependencies.importlib-metadata] +python = "<3.8" +version = "*" + [[package]] -name = "gitdb" -version = "4.0.5" -description = "Git Object Database" category = "dev" +description = "Git Object Database" +name = "gitdb" optional = false python-versions = ">=3.4" +version = "4.0.7" [package.dependencies] -smmap = ">=3.0.1,<4" +smmap = ">=3.0.1,<5" [[package]] -name = "gitpython" -version = "3.1.14" -description = "Python Git Library" category = "dev" +description = "Python Git Library" +name = "gitpython" optional = false -python-versions = ">=3.4" +python-versions = ">=3.5" +version = "3.1.17" [package.dependencies] gitdb = ">=4.0.1,<5" +[package.dependencies.typing-extensions] +python = "<3.8" +version = ">=3.7.4.0" + [[package]] -name = "idna" -version = "2.10" -description = "Internationalized Domain Names in Applications (IDNA)" category = "main" +description = "Internationalized Domain Names in Applications (IDNA)" +name = "idna" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.10" [[package]] -name = "importlib-metadata" -version = "3.7.3" -description = "Read metadata from Python packages" category = "dev" +description = "Read metadata from Python packages" +marker = "python_version < \"3.8\"" +name = "importlib-metadata" optional = false python-versions = ">=3.6" +version = "4.2.0" [package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] +[package.dependencies.typing-extensions] +python = "<3.8" +version = ">=3.6.4" [[package]] -name = "isort" -version = "4.3.21" -description = "A Python utility / library to sort Python imports." category = "dev" +description = "A Python utility / library to sort Python imports." +name = "isort" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "4.3.21" [package.dependencies] -toml = {version = "*", optional = true, markers = "extra == \"pyproject\""} - -[package.extras] -pipfile = ["pipreqs", "requirementslib"] -pyproject = ["toml"] -requirements = ["pipreqs", "pip-api"] -xdg_home = ["appdirs (>=1.4.0)"] +toml = "*" [[package]] -name = "kafka-python" -version = "2.0.2" -description = "Pure Python client for Apache Kafka" category = "main" +description = "Pure Python client for Apache Kafka" +name = "kafka-python" optional = false python-versions = "*" - -[package.extras] -crc32c = ["crc32c"] +version = "2.0.2" [[package]] -name = "mccabe" -version = "0.6.1" -description = "McCabe checker, plugin for flake8" category = "dev" +description = "McCabe checker, plugin for flake8" +name = "mccabe" optional = false python-versions = "*" +version = "0.6.1" [[package]] -name = "more-itertools" -version = "8.7.0" -description = "More routines for operating on iterables, beyond itertools" category = "dev" +description = "More routines for operating on iterables, beyond itertools" +name = "more-itertools" optional = false python-versions = ">=3.5" +version = "8.8.0" [[package]] -name = "packaging" -version = "20.9" -description = "Core utilities for Python packages" category = "dev" +description = "Core utilities for Python packages" +name = "packaging" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "20.9" [package.dependencies] pyparsing = ">=2.0.2" [[package]] -name = "pbr" -version = "5.5.1" -description = "Python Build Reasonableness" category = "dev" +description = "Python Build Reasonableness" +name = "pbr" optional = false python-versions = ">=2.6" +version = "5.6.0" [[package]] -name = "pendulum" -version = "2.1.2" -description = "Python datetimes made easy" category = "main" +description = "Python datetimes made easy" +name = "pendulum" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "2.1.2" [package.dependencies] python-dateutil = ">=2.6,<3.0" pytzdata = ">=2020.1" [[package]] -name = "pluggy" -version = "0.13.1" -description = "plugin and hook calling mechanisms for python" category = "dev" +description = "plugin and hook calling mechanisms for python" +name = "pluggy" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "0.13.1" [package.dependencies] -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} - -[package.extras] -dev = ["pre-commit", "tox"] +[package.dependencies.importlib-metadata] +python = "<3.8" +version = ">=0.12" [[package]] -name = "py" -version = "1.10.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" category = "dev" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +name = "py" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "1.10.0" [[package]] -name = "pycodestyle" -version = "2.7.0" -description = "Python style guide checker" category = "dev" +description = "Python style guide checker" +name = "pycodestyle" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.7.0" [[package]] -name = "pyflakes" -version = "2.3.0" -description = "passive checker of Python programs" category = "dev" +description = "passive checker of Python programs" +name = "pyflakes" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.3.1" [[package]] -name = "pyparsing" -version = "2.4.7" -description = "Python parsing module" category = "dev" +description = "Python parsing module" +name = "pyparsing" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +version = "2.4.7" [[package]] -name = "pytest" -version = "5.4.3" -description = "pytest: simple powerful testing with Python" category = "dev" +description = "pytest: simple powerful testing with Python" +name = "pytest" optional = false python-versions = ">=3.5" +version = "5.4.3" [package.dependencies] -atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} +atomicwrites = ">=1.0" attrs = ">=17.4.0" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +colorama = "*" more-itertools = ">=4.0.0" packaging = "*" pluggy = ">=0.12,<1.0" py = ">=1.5.0" wcwidth = "*" -[package.extras] -checkqa-mypy = ["mypy (==v0.761)"] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] +[package.dependencies.importlib-metadata] +python = "<3.8" +version = ">=0.12" [[package]] -name = "pytest-cov" -version = "2.11.1" -description = "Pytest plugin for measuring coverage." category = "dev" +description = "Pytest plugin for measuring coverage." +name = "pytest-cov" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "2.12.0" [package.dependencies] coverage = ">=5.2.1" pytest = ">=4.6" -[package.extras] -testing = ["fields", "hunter", "process-tests (==2.0.2)", "six", "pytest-xdist", "virtualenv"] - [[package]] -name = "pytest-mock" -version = "1.13.0" -description = "Thin-wrapper around the mock package for easier use with py.test" category = "dev" +description = "Thin-wrapper around the mock package for easier use with py.test" +name = "pytest-mock" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "1.13.0" [package.dependencies] pytest = ">=2.7" -[package.extras] -dev = ["pre-commit", "tox"] - [[package]] -name = "python-dateutil" -version = "2.8.1" -description = "Extensions to the standard Python datetime module" category = "main" +description = "Extensions to the standard Python datetime module" +name = "python-dateutil" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +version = "2.8.1" [package.dependencies] six = ">=1.5" [[package]] -name = "pytzdata" -version = "2020.1" -description = "The Olson timezone database for Python." category = "main" +description = "The Olson timezone database for Python." +name = "pytzdata" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2020.1" [[package]] -name = "pyyaml" -version = "5.4.1" -description = "YAML parser and emitter for Python" category = "main" +description = "YAML parser and emitter for Python" +name = "pyyaml" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +version = "5.4.1" [[package]] -name = "requests" -version = "2.25.1" -description = "Python HTTP for Humans." category = "main" +description = "Python HTTP for Humans." +name = "requests" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "2.25.1" [package.dependencies] certifi = ">=2017.4.17" @@ -448,407 +413,140 @@ chardet = ">=3.0.2,<5" idna = ">=2.5,<3" urllib3 = ">=1.21.1,<1.27" -[package.extras] -security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"] -socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] - [[package]] -name = "six" -version = "1.15.0" -description = "Python 2 and 3 compatibility utilities" category = "main" +description = "Python 2 and 3 compatibility utilities" +name = "six" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +version = "1.16.0" [[package]] -name = "smmap" -version = "3.0.5" -description = "A pure Python implementation of a sliding window memory map manager" category = "dev" +description = "A pure Python implementation of a sliding window memory map manager" +name = "smmap" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.5" +version = "4.0.0" [[package]] -name = "stevedore" -version = "3.3.0" -description = "Manage dynamic plugins for Python applications" category = "dev" +description = "Manage dynamic plugins for Python applications" +name = "stevedore" optional = false python-versions = ">=3.6" +version = "3.3.0" [package.dependencies] -importlib-metadata = {version = ">=1.7.0", markers = "python_version < \"3.8\""} pbr = ">=2.0.0,<2.1.0 || >2.1.0" +[package.dependencies.importlib-metadata] +python = "<3.8" +version = ">=1.7.0" + [[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" category = "main" +description = "Python Library for Tom's Obvious, Minimal Language" +name = "toml" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +version = "0.10.2" [[package]] -name = "typing-extensions" -version = "3.7.4.3" -description = "Backported and Experimental Type Hints for Python 3.5+" category = "dev" +description = "Backported and Experimental Type Hints for Python 3.5+" +marker = "python_version < \"3.8\"" +name = "typing-extensions" optional = false python-versions = "*" +version = "3.10.0.0" [[package]] -name = "urllib3" -version = "1.26.4" -description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" +description = "HTTP library with thread-safe connection pooling, file post, and more." +name = "urllib3" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" - -[package.extras] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] -brotli = ["brotlipy (>=0.6.0)"] +version = "1.26.5" [[package]] -name = "wcwidth" -version = "0.2.5" -description = "Measures the displayed width of unicode strings in a terminal" category = "dev" +description = "Measures the displayed width of unicode strings in a terminal" +name = "wcwidth" optional = false python-versions = "*" +version = "0.2.5" [[package]] -name = "yamale" -version = "2.2.0" -description = "A schema and validator for YAML." category = "main" +description = "A schema and validator for YAML." +name = "yamale" optional = false python-versions = "*" +version = "2.2.0" [package.dependencies] pyyaml = "*" [[package]] -name = "zipp" -version = "3.4.1" -description = "Backport of pathlib-compatible object wrapper for zip files" category = "dev" +description = "Backport of pathlib-compatible object wrapper for zip files" +marker = "python_version < \"3.8\"" +name = "zipp" optional = false python-versions = ">=3.6" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] +version = "3.4.1" [metadata] -lock-version = "1.1" -python-versions = "^3.6" content-hash = "8b8a402839c2ee87319e1a307ec33f785ccedefb35b6805b8aa956af3ea2ba59" +python-versions = "^3.6" -[metadata.files] -appdirs = [ - {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, - {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, -] -atomicwrites = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, -] -attrs = [ - {file = "attrs-20.3.0-py2.py3-none-any.whl", hash = "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6"}, - {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, -] -avro-python3 = [ - {file = "avro-python3-1.10.0.tar.gz", hash = "sha256:a455c215540b1fceb1823e2a918e94959b54cb363307c97869aa46b5b55bde05"}, -] -bandit = [ - {file = "bandit-1.7.0-py3-none-any.whl", hash = "sha256:216be4d044209fa06cf2a3e51b319769a51be8318140659719aa7a115c35ed07"}, - {file = "bandit-1.7.0.tar.gz", hash = "sha256:8a4c7415254d75df8ff3c3b15cfe9042ecee628a1e40b44c15a98890fbfc2608"}, -] -black = [ - {file = "black-19.3b0-py36-none-any.whl", hash = "sha256:09a9dcb7c46ed496a9850b76e4e825d6049ecd38b611f1224857a79bd985a8cf"}, - {file = "black-19.3b0.tar.gz", hash = "sha256:68950ffd4d9169716bcb8719a56c07a2f4485354fec061cdd5910aa07369731c"}, -] -certifi = [ - {file = "certifi-2020.12.5-py2.py3-none-any.whl", hash = "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830"}, - {file = "certifi-2020.12.5.tar.gz", hash = "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c"}, -] -chardet = [ - {file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"}, - {file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"}, -] -click = [ - {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, - {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, -] -colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, -] -confluent-kafka = [ - {file = "confluent-kafka-1.6.0.tar.gz", hash = "sha256:8a9caabdb02e87cd65c7f10f689ba3f1a15f8774de455e96fa5fc56eecfee63c"}, - {file = "confluent_kafka-1.6.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:5b8d8373ed07ce92639865bce6f313d966619b90fdbddb5f6e222a4780945821"}, - {file = "confluent_kafka-1.6.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:6e434de7ae1815c7f431de3dea542092795476d4af919f648366510ca7ccdab4"}, - {file = "confluent_kafka-1.6.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:1b8ecf80405a9c530ff5acfd2000f7e281b9b00ed8c47235023e46c1fb74b78e"}, - {file = "confluent_kafka-1.6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a0e4bed19d3917911da3f6f8830c47778d08918cebb313fafb858f88c91c91e8"}, - {file = "confluent_kafka-1.6.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:08c0642ee1630f04b1a4fc4263b32528839ffd2c9c3ca6d8ec77c5e352cfe1ef"}, - {file = "confluent_kafka-1.6.0-cp36-cp36m-win32.whl", hash = "sha256:2047b049e82dd2c7b9ec30534efbfa755445eced9132ab618440aeeb8d7e3161"}, - {file = "confluent_kafka-1.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:360641ff18f8e3afc24f5f3ae18613f307e8f13ac839df6c089f682ada5740b9"}, - {file = "confluent_kafka-1.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ae7a1059737f9289ca3592b134c3da9c3ebef88410a1d5ac9d8c4d2b2bad6f0b"}, - {file = "confluent_kafka-1.6.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:345d48e553959e54ae5bebd53abfb8e7c08d6a6642df4c3585fa2f81199bf3b2"}, - {file = "confluent_kafka-1.6.0-cp37-cp37m-win32.whl", hash = "sha256:123710f81f522bd4d1684acae408a74ef6a95849eccd15415dea73f77ed2ef2c"}, - {file = "confluent_kafka-1.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7e4d8d8713fed30874e4477a9bc9ed276a2acf2111597645e79e7042a5c7dbf1"}, - {file = "confluent_kafka-1.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f32314d399cb5c920b7f9365e1b7d119319a31257e32b6ee81cb9a81d124b9d7"}, - {file = "confluent_kafka-1.6.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:2e71d10f5fe2db90068a1a1a33b5d01bd4b1ec58b71cfcc2ecc1babdc5d35bb2"}, - {file = "confluent_kafka-1.6.0-cp38-cp38-win32.whl", hash = "sha256:de6fc17ea557c2f8949796a239cc2ebb3580488a84fbd315429082fb19f0c960"}, - {file = "confluent_kafka-1.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:970c0867904882bc895331d3410c5a238385f6d58476a32323ff2a6c2aa1f5f2"}, - {file = "confluent_kafka-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ca5353f4dfe79390542e0d5e2807eeb74898d08e527c530d341c9a7531c37788"}, - {file = "confluent_kafka-1.6.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:4e984535d7eb606fbda0614da3c77eaf98ca17f125dbf834b2b0849db6481139"}, -] -coverage = [ - {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"}, - {file = "coverage-5.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b"}, - {file = "coverage-5.5-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669"}, - {file = "coverage-5.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90"}, - {file = "coverage-5.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c"}, - {file = "coverage-5.5-cp27-cp27m-win32.whl", hash = "sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a"}, - {file = "coverage-5.5-cp27-cp27m-win_amd64.whl", hash = "sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81"}, - {file = "coverage-5.5-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6"}, - {file = "coverage-5.5-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0"}, - {file = "coverage-5.5-cp310-cp310-win_amd64.whl", hash = "sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae"}, - {file = "coverage-5.5-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb"}, - {file = "coverage-5.5-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160"}, - {file = "coverage-5.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6"}, - {file = "coverage-5.5-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701"}, - {file = "coverage-5.5-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793"}, - {file = "coverage-5.5-cp35-cp35m-win32.whl", hash = "sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e"}, - {file = "coverage-5.5-cp35-cp35m-win_amd64.whl", hash = "sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3"}, - {file = "coverage-5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066"}, - {file = "coverage-5.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a"}, - {file = "coverage-5.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465"}, - {file = "coverage-5.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb"}, - {file = "coverage-5.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821"}, - {file = "coverage-5.5-cp36-cp36m-win32.whl", hash = "sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45"}, - {file = "coverage-5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184"}, - {file = "coverage-5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a"}, - {file = "coverage-5.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53"}, - {file = "coverage-5.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d"}, - {file = "coverage-5.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638"}, - {file = "coverage-5.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3"}, - {file = "coverage-5.5-cp37-cp37m-win32.whl", hash = "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a"}, - {file = "coverage-5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a"}, - {file = "coverage-5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6"}, - {file = "coverage-5.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2"}, - {file = "coverage-5.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759"}, - {file = "coverage-5.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873"}, - {file = "coverage-5.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a"}, - {file = "coverage-5.5-cp38-cp38-win32.whl", hash = "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6"}, - {file = "coverage-5.5-cp38-cp38-win_amd64.whl", hash = "sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502"}, - {file = "coverage-5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b"}, - {file = "coverage-5.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529"}, - {file = "coverage-5.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b"}, - {file = "coverage-5.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff"}, - {file = "coverage-5.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b"}, - {file = "coverage-5.5-cp39-cp39-win32.whl", hash = "sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6"}, - {file = "coverage-5.5-cp39-cp39-win_amd64.whl", hash = "sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03"}, - {file = "coverage-5.5-pp36-none-any.whl", hash = "sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079"}, - {file = "coverage-5.5-pp37-none-any.whl", hash = "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4"}, - {file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"}, -] -coveralls = [ - {file = "coveralls-1.11.1-py2.py3-none-any.whl", hash = "sha256:4b6bfc2a2a77b890f556bc631e35ba1ac21193c356393b66c84465c06218e135"}, - {file = "coveralls-1.11.1.tar.gz", hash = "sha256:67188c7ec630c5f708c31552f2bcdac4580e172219897c4136504f14b823132f"}, -] -docopt = [ - {file = "docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491"}, -] -fastavro = [ - {file = "fastavro-1.3.3-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:aff437d0a2cab602ecffffa85da9289ddfd05b0a4fe77a139133a355cb603cb7"}, - {file = "fastavro-1.3.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:996f2675eb1469535b5f5749c6a045b895bafa7938ff21996afa0f6dcc476fe5"}, - {file = "fastavro-1.3.3-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:02cd188c97cdc72459a06370f4a3fa0b10626c9fcea077f250f1eac9e8d7e519"}, - {file = "fastavro-1.3.3-cp36-cp36m-win_amd64.whl", hash = "sha256:d91f3394ab636b860e447af2102f60a0acbec4f8beb21b9fd8292e972295ef1f"}, - {file = "fastavro-1.3.3-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:c80340db54e866b13626f0282b0af9189220978d3b4e384f499ebd8118bfb943"}, - {file = "fastavro-1.3.3-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:a61b478d1ec6788c8fc4ec4e17b8735c9fa59ed2d6780a3a31c94678beb14dbe"}, - {file = "fastavro-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:63aaae1d599c084debc7db628a8b911bc78a9848a86c3eef1be02b6c32ead1ec"}, - {file = "fastavro-1.3.3-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:c532503cc4abd7bf41227a68bd9cf162eabe36d749f2ccff5d26efcdc2233900"}, - {file = "fastavro-1.3.3-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:328d2cfdda8535a133ebba6689db8e30a146a0873c446151a0bd16de547bdcc3"}, - {file = "fastavro-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:f266c0e76d26dd90412fb7eb7b1a6417157c0faf48daa0d8a945ac24da5a407c"}, - {file = "fastavro-1.3.3-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:9e4aff00a5afcaa78228909709dce3a42dc58cfea37919349c68c1272a8e2f29"}, - {file = "fastavro-1.3.3-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:2c53b804e58ffc7446437bd5c6fb36a031830381fc33d939dc5e1214b4265fa8"}, - {file = "fastavro-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:03fd673f0407bb2e49b2008dc28cadde7291fd4b9ae2a0711a353dcb0c5c2488"}, - {file = "fastavro-1.3.3.tar.gz", hash = "sha256:1d9b18a86ecc3837a919c3190f2f538b7bcf179e0ad2524d7626699773bf2945"}, -] -flake8 = [ - {file = "flake8-3.9.0-py2.py3-none-any.whl", hash = "sha256:12d05ab02614b6aee8df7c36b97d1a3b2372761222b19b58621355e82acddcff"}, - {file = "flake8-3.9.0.tar.gz", hash = "sha256:78873e372b12b093da7b5e5ed302e8ad9e988b38b063b61ad937f26ca58fc5f0"}, -] -gitdb = [ - {file = "gitdb-4.0.5-py3-none-any.whl", hash = "sha256:91f36bfb1ab7949b3b40e23736db18231bf7593edada2ba5c3a174a7b23657ac"}, - {file = "gitdb-4.0.5.tar.gz", hash = "sha256:c9e1f2d0db7ddb9a704c2a0217be31214e91a4fe1dea1efad19ae42ba0c285c9"}, -] -gitpython = [ - {file = "GitPython-3.1.14-py3-none-any.whl", hash = "sha256:3283ae2fba31c913d857e12e5ba5f9a7772bbc064ae2bb09efafa71b0dd4939b"}, - {file = "GitPython-3.1.14.tar.gz", hash = "sha256:be27633e7509e58391f10207cd32b2a6cf5b908f92d9cd30da2e514e1137af61"}, -] -idna = [ - {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, - {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, -] -importlib-metadata = [ - {file = "importlib_metadata-3.7.3-py3-none-any.whl", hash = "sha256:b74159469b464a99cb8cc3e21973e4d96e05d3024d337313fedb618a6e86e6f4"}, - {file = "importlib_metadata-3.7.3.tar.gz", hash = "sha256:742add720a20d0467df2f444ae41704000f50e1234f46174b51f9c6031a1bd71"}, -] -isort = [ - {file = "isort-4.3.21-py2.py3-none-any.whl", hash = "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd"}, - {file = "isort-4.3.21.tar.gz", hash = "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1"}, -] -kafka-python = [ - {file = "kafka-python-2.0.2.tar.gz", hash = "sha256:04dfe7fea2b63726cd6f3e79a2d86e709d608d74406638c5da33a01d45a9d7e3"}, - {file = "kafka_python-2.0.2-py2.py3-none-any.whl", hash = "sha256:2d92418c7cb1c298fa6c7f0fb3519b520d0d7526ac6cb7ae2a4fc65a51a94b6e"}, -] -mccabe = [ - {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, - {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, -] -more-itertools = [ - {file = "more-itertools-8.7.0.tar.gz", hash = "sha256:c5d6da9ca3ff65220c3bfd2a8db06d698f05d4d2b9be57e1deb2be5a45019713"}, - {file = "more_itertools-8.7.0-py3-none-any.whl", hash = "sha256:5652a9ac72209ed7df8d9c15daf4e1aa0e3d2ccd3c87f8265a0673cd9cbc9ced"}, -] -packaging = [ - {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, - {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, -] -pbr = [ - {file = "pbr-5.5.1-py2.py3-none-any.whl", hash = "sha256:b236cde0ac9a6aedd5e3c34517b423cd4fd97ef723849da6b0d2231142d89c00"}, - {file = "pbr-5.5.1.tar.gz", hash = "sha256:5fad80b613c402d5b7df7bd84812548b2a61e9977387a80a5fc5c396492b13c9"}, -] -pendulum = [ - {file = "pendulum-2.1.2-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:b6c352f4bd32dff1ea7066bd31ad0f71f8d8100b9ff709fb343f3b86cee43efe"}, - {file = "pendulum-2.1.2-cp27-cp27m-win_amd64.whl", hash = "sha256:318f72f62e8e23cd6660dbafe1e346950281a9aed144b5c596b2ddabc1d19739"}, - {file = "pendulum-2.1.2-cp35-cp35m-macosx_10_15_x86_64.whl", hash = "sha256:0731f0c661a3cb779d398803655494893c9f581f6488048b3fb629c2342b5394"}, - {file = "pendulum-2.1.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:3481fad1dc3f6f6738bd575a951d3c15d4b4ce7c82dce37cf8ac1483fde6e8b0"}, - {file = "pendulum-2.1.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9702069c694306297ed362ce7e3c1ef8404ac8ede39f9b28b7c1a7ad8c3959e3"}, - {file = "pendulum-2.1.2-cp35-cp35m-win_amd64.whl", hash = "sha256:fb53ffa0085002ddd43b6ca61a7b34f2d4d7c3ed66f931fe599e1a531b42af9b"}, - {file = "pendulum-2.1.2-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:c501749fdd3d6f9e726086bf0cd4437281ed47e7bca132ddb522f86a1645d360"}, - {file = "pendulum-2.1.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:c807a578a532eeb226150d5006f156632df2cc8c5693d778324b43ff8c515dd0"}, - {file = "pendulum-2.1.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2d1619a721df661e506eff8db8614016f0720ac171fe80dda1333ee44e684087"}, - {file = "pendulum-2.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:f888f2d2909a414680a29ae74d0592758f2b9fcdee3549887779cd4055e975db"}, - {file = "pendulum-2.1.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:e95d329384717c7bf627bf27e204bc3b15c8238fa8d9d9781d93712776c14002"}, - {file = "pendulum-2.1.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4c9c689747f39d0d02a9f94fcee737b34a5773803a64a5fdb046ee9cac7442c5"}, - {file = "pendulum-2.1.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:1245cd0075a3c6d889f581f6325dd8404aca5884dea7223a5566c38aab94642b"}, - {file = "pendulum-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:db0a40d8bcd27b4fb46676e8eb3c732c67a5a5e6bfab8927028224fbced0b40b"}, - {file = "pendulum-2.1.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:f5e236e7730cab1644e1b87aca3d2ff3e375a608542e90fe25685dae46310116"}, - {file = "pendulum-2.1.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:de42ea3e2943171a9e95141f2eecf972480636e8e484ccffaf1e833929e9e052"}, - {file = "pendulum-2.1.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7c5ec650cb4bec4c63a89a0242cc8c3cebcec92fcfe937c417ba18277d8560be"}, - {file = "pendulum-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:33fb61601083f3eb1d15edeb45274f73c63b3c44a8524703dc143f4212bf3269"}, - {file = "pendulum-2.1.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:29c40a6f2942376185728c9a0347d7c0f07905638c83007e1d262781f1e6953a"}, - {file = "pendulum-2.1.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:94b1fc947bfe38579b28e1cccb36f7e28a15e841f30384b5ad6c5e31055c85d7"}, - {file = "pendulum-2.1.2.tar.gz", hash = "sha256:b06a0ca1bfe41c990bbf0c029f0b6501a7f2ec4e38bfec730712015e8860f207"}, -] -pluggy = [ - {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, - {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, -] -py = [ - {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, - {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, -] -pycodestyle = [ - {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, - {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, -] -pyflakes = [ - {file = "pyflakes-2.3.0-py2.py3-none-any.whl", hash = "sha256:910208209dcea632721cb58363d0f72913d9e8cf64dc6f8ae2e02a3609aba40d"}, - {file = "pyflakes-2.3.0.tar.gz", hash = "sha256:e59fd8e750e588358f1b8885e5a4751203a0516e0ee6d34811089ac294c8806f"}, -] -pyparsing = [ - {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, - {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, -] -pytest = [ - {file = "pytest-5.4.3-py3-none-any.whl", hash = "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1"}, - {file = "pytest-5.4.3.tar.gz", hash = "sha256:7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"}, -] -pytest-cov = [ - {file = "pytest-cov-2.11.1.tar.gz", hash = "sha256:359952d9d39b9f822d9d29324483e7ba04a3a17dd7d05aa6beb7ea01e359e5f7"}, - {file = "pytest_cov-2.11.1-py2.py3-none-any.whl", hash = "sha256:bdb9fdb0b85a7cc825269a4c56b48ccaa5c7e365054b6038772c32ddcdc969da"}, -] -pytest-mock = [ - {file = "pytest-mock-1.13.0.tar.gz", hash = "sha256:e24a911ec96773022ebcc7030059b57cd3480b56d4f5d19b7c370ec635e6aed5"}, - {file = "pytest_mock-1.13.0-py2.py3-none-any.whl", hash = "sha256:67e414b3caef7bff6fc6bd83b22b5bc39147e4493f483c2679bc9d4dc485a94d"}, -] -python-dateutil = [ - {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, - {file = "python_dateutil-2.8.1-py2.py3-none-any.whl", hash = "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"}, -] -pytzdata = [ - {file = "pytzdata-2020.1-py2.py3-none-any.whl", hash = "sha256:e1e14750bcf95016381e4d472bad004eef710f2d6417240904070b3d6654485f"}, - {file = "pytzdata-2020.1.tar.gz", hash = "sha256:3efa13b335a00a8de1d345ae41ec78dd11c9f8807f522d39850f2dd828681540"}, -] -pyyaml = [ - {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"}, - {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"}, - {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"}, - {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"}, - {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"}, - {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"}, - {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"}, - {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"}, - {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"}, - {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, - {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, -] -requests = [ - {file = "requests-2.25.1-py2.py3-none-any.whl", hash = "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e"}, - {file = "requests-2.25.1.tar.gz", hash = "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804"}, -] -six = [ - {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, - {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, -] -smmap = [ - {file = "smmap-3.0.5-py2.py3-none-any.whl", hash = "sha256:7bfcf367828031dc893530a29cb35eb8c8f2d7c8f2d0989354d75d24c8573714"}, - {file = "smmap-3.0.5.tar.gz", hash = "sha256:84c2751ef3072d4f6b2785ec7ee40244c6f45eb934d9e543e2c51f1bd3d54c50"}, -] -stevedore = [ - {file = "stevedore-3.3.0-py3-none-any.whl", hash = "sha256:50d7b78fbaf0d04cd62411188fa7eedcb03eb7f4c4b37005615ceebe582aa82a"}, - {file = "stevedore-3.3.0.tar.gz", hash = "sha256:3a5bbd0652bf552748871eaa73a4a8dc2899786bc497a2aa1fcb4dcdb0debeee"}, -] -toml = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] -typing-extensions = [ - {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"}, - {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, - {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"}, -] -urllib3 = [ - {file = "urllib3-1.26.4-py2.py3-none-any.whl", hash = "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df"}, - {file = "urllib3-1.26.4.tar.gz", hash = "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937"}, -] -wcwidth = [ - {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, - {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, -] -yamale = [ - {file = "yamale-2.2.0.tar.gz", hash = "sha256:8c3fd8d8ff69365c45856b3bb07160f4cfce77a01d4fb62bde9b2c4dc30eaed3"}, -] -zipp = [ - {file = "zipp-3.4.1-py3-none-any.whl", hash = "sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098"}, - {file = "zipp-3.4.1.tar.gz", hash = "sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76"}, -] +[metadata.hashes] +appdirs = ["7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41", "a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"] +atomicwrites = ["6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197", "ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"] +attrs = ["149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1", "ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"] +avro-python3 = ["a455c215540b1fceb1823e2a918e94959b54cb363307c97869aa46b5b55bde05"] +bandit = ["216be4d044209fa06cf2a3e51b319769a51be8318140659719aa7a115c35ed07", "8a4c7415254d75df8ff3c3b15cfe9042ecee628a1e40b44c15a98890fbfc2608"] +black = ["09a9dcb7c46ed496a9850b76e4e825d6049ecd38b611f1224857a79bd985a8cf", "68950ffd4d9169716bcb8719a56c07a2f4485354fec061cdd5910aa07369731c"] +certifi = ["1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c", "719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830"] +chardet = ["0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa", "f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"] +click = ["d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a", "dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"] +colorama = ["5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b", "9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"] +confluent-kafka = ["11173733e0540a98e493c91a05686ba4e777883c2cda756d47848fce84e06b30", "1246f3c674357630b078bbc76824eabea87ac5a9ca270886abca9c7f052381da", "1e8e7770eaf2f6df0a3620f0bfc5dc2293e6ca3ac1e14c4babe6fefc03f50e18", "2b4d8d53148a26f0cafcb42e9483f76473120bc091fa0ede497caf8cc8db6f88", "33c32de2357ddcd3f8a98a96591c69c7ada76215e051ed5dbb17b763921f376a", "415c23e7ccf948e50de616191febd4ec299b1d748ae0abdab3888f0ec0915ea9", "5d9c75822c0b1cb7787fc60a78b3f249bfd56b3a692dd079d9d7510ffefe2c99", "5e044e5c5fce78c87aedd56dbd7bd5c046dbf7a0bc9a0eff32229766be8808a5", "80e01b4791513c27eded8517af847530dfdf04c43d99ff132ed9c3085933b75b", "8bb0d7e28deac58b234f7481184a60f743838c4e06309fbcca9484b93697c33b", "955de681f2bc7241d580ebb43d7516f825950518bfaf2c8e6bc3c88d22be4f08", "9f5ff838f2ca87e467aa992f9fcb8bbdd222097690fe6b15aa733025a1613532", "aa5f2905783b1a4e560e4172e228e2174a077090cbdf91a5448dd8deac02b2a9", "aad712996e1465e806f7e027ad248b2474d2140a3985d5f7789a5ff68e5dba8a", "bbba1f144992fbd920cb10c7c2450e82fc8936e04272d36be3a3567bfbf768d4", "bc2ad89e6cc4e05c5855dfbee2838a699861943ab3ea62ff2b914d72fcd1a6c6", "c0b3fc70c31f636562464e905c2b75a2705d3d53bb4687fd48b574dee2a7fa51", "ee3f33077e3534b33cec9825843cd705ede458c585cfab2a052813391fb73291", "f2628f3ebffe05d346f0456c566d5519a59bd0aa88179a9b7408c1808415c102", "f98fa8982da1a960e6c1bfca49b235f8de45c8af83d6b741d78f96f346748488"] +coverage = ["004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c", "01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6", "040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45", "06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a", "13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03", "13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529", "184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a", "18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a", "1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2", "217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6", "24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759", "2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53", "2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a", "2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4", "2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff", "2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502", "30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793", "3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb", "372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905", "41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821", "44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b", "4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81", "51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0", "52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b", "53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3", "5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184", "6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701", "74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a", "7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82", "796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638", "869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5", "8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083", "8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6", "900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90", "92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465", "970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a", "972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3", "9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e", "af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066", "b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf", "b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b", "c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae", "c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669", "d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873", "d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b", "d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6", "d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb", "deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160", "ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c", "f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079", "f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d", "f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6"] +coveralls = ["4b6bfc2a2a77b890f556bc631e35ba1ac21193c356393b66c84465c06218e135", "67188c7ec630c5f708c31552f2bcdac4580e172219897c4136504f14b823132f"] +docopt = ["49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491"] +fastavro = ["18ed93c24ba96ed0e6cacf50170805188cc53a5e50c40fc94316387a98aa497b", "237a741668316a2aadb14ba0532666a305dd14b4043aace89bcb0c6419c08162", "3e804c4fc9875314aa41901055941b199f87aeb1c880cc6fe3ad258fa08b24c6", "3f99237de0f853f083a0f9929f54155b408a5c4b04fcfa8c59e589aa853f2111", "453676a26e99f2f3af7f57c4236ceeee4e453ab7b9bd5f09e9c89bad5e572c78", "5bd8a134daff2ea5ef0d72a528ca42dfe6c01deac7103dedf77d1a55936a981e", "6d7d4032ecb28bef3dd41e8c91c986df351e3323f526c901d1cbb53425617756", "72c81690cef6ed9c87a146eaf9f608150bf78fd537a7e796780381b4a7baabb8", "741cd757b7789e6ab821a1de02c1e18dfada417e1cfccae3f20dc2aadd6654fc", "948e69da16f4bf20bea65805ea210d793eae55f5f24f8be2c4d18c2a773aaf7b", "a4b6c2b2d126bf6246bead79cba43e17f07a1b99a25ccceb315c6e75ab7c9d39", "a8c5df1aa6c29409bbfe571504e87bf23553c88083a83febb42a74ec0cabe2ba", "c298d2b2389049dfc6a06326a0a2f9809c7045e8cadb82b9e7e948fd32270547", "cad3ecbac1fe1d319c617ff01104639795020cb72faf7e30ebe802c1d60ec915"] +flake8 = ["07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b", "bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"] +gitdb = ["6c4cc71933456991da20917998acbe6cf4fb41eeaab7d6d67fbc05ecd4c865b0", "96bf5c08b157a666fec41129e6d327235284cca4c81e92109260f353ba138005"] +gitpython = ["29fe82050709760081f588dd50ce83504feddbebdc4da6956d02351552b1c135", "ee24bdc93dce357630764db659edaf6b8d664d4ff5447ccfeedd2dc5c253f41e"] +idna = ["b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", "b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"] +importlib-metadata = ["057e92c15bc8d9e8109738a48db0ccb31b4d9d5cfbee5a8670879a30be66304b", "b7e52a1f8dec14a75ea73e0891f3060099ca1d8e6a462a4dff11c3e119ea1b31"] +isort = ["54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1", "6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd"] +kafka-python = ["04dfe7fea2b63726cd6f3e79a2d86e709d608d74406638c5da33a01d45a9d7e3", "2d92418c7cb1c298fa6c7f0fb3519b520d0d7526ac6cb7ae2a4fc65a51a94b6e"] +mccabe = ["ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", "dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"] +more-itertools = ["2cf89ec599962f2ddc4d568a05defc40e0a587fbc10d5989713638864c36be4d", "83f0308e05477c68f56ea3a888172c78ed5d5b3c282addb67508e7ba6c8f813a"] +packaging = ["5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5", "67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"] +pbr = ["42df03e7797b796625b1029c0400279c7c34fd7df24a7d7818a1abb5b38710dd", "c68c661ac5cc81058ac94247278eeda6d2e6aecb3e227b0387c30d277e7ef8d4"] +pendulum = ["0731f0c661a3cb779d398803655494893c9f581f6488048b3fb629c2342b5394", "1245cd0075a3c6d889f581f6325dd8404aca5884dea7223a5566c38aab94642b", "29c40a6f2942376185728c9a0347d7c0f07905638c83007e1d262781f1e6953a", "2d1619a721df661e506eff8db8614016f0720ac171fe80dda1333ee44e684087", "318f72f62e8e23cd6660dbafe1e346950281a9aed144b5c596b2ddabc1d19739", "33fb61601083f3eb1d15edeb45274f73c63b3c44a8524703dc143f4212bf3269", "3481fad1dc3f6f6738bd575a951d3c15d4b4ce7c82dce37cf8ac1483fde6e8b0", "4c9c689747f39d0d02a9f94fcee737b34a5773803a64a5fdb046ee9cac7442c5", "7c5ec650cb4bec4c63a89a0242cc8c3cebcec92fcfe937c417ba18277d8560be", "94b1fc947bfe38579b28e1cccb36f7e28a15e841f30384b5ad6c5e31055c85d7", "9702069c694306297ed362ce7e3c1ef8404ac8ede39f9b28b7c1a7ad8c3959e3", "b06a0ca1bfe41c990bbf0c029f0b6501a7f2ec4e38bfec730712015e8860f207", "b6c352f4bd32dff1ea7066bd31ad0f71f8d8100b9ff709fb343f3b86cee43efe", "c501749fdd3d6f9e726086bf0cd4437281ed47e7bca132ddb522f86a1645d360", "c807a578a532eeb226150d5006f156632df2cc8c5693d778324b43ff8c515dd0", "db0a40d8bcd27b4fb46676e8eb3c732c67a5a5e6bfab8927028224fbced0b40b", "de42ea3e2943171a9e95141f2eecf972480636e8e484ccffaf1e833929e9e052", "e95d329384717c7bf627bf27e204bc3b15c8238fa8d9d9781d93712776c14002", "f5e236e7730cab1644e1b87aca3d2ff3e375a608542e90fe25685dae46310116", "f888f2d2909a414680a29ae74d0592758f2b9fcdee3549887779cd4055e975db", "fb53ffa0085002ddd43b6ca61a7b34f2d4d7c3ed66f931fe599e1a531b42af9b"] +pluggy = ["15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0", "966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"] +py = ["21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3", "3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"] +pycodestyle = ["514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068", "c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"] +pyflakes = ["7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3", "f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"] +pyparsing = ["c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", "ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"] +pytest = ["5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1", "7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"] +pytest-cov = ["8535764137fecce504a49c2b742288e3d34bc09eed298ad65963616cc98fd45e", "95d4933dcbbacfa377bb60b29801daa30d90c33981ab2a79e9ab4452c165066e"] +pytest-mock = ["67e414b3caef7bff6fc6bd83b22b5bc39147e4493f483c2679bc9d4dc485a94d", "e24a911ec96773022ebcc7030059b57cd3480b56d4f5d19b7c370ec635e6aed5"] +python-dateutil = ["73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", "75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"] +pytzdata = ["3efa13b335a00a8de1d345ae41ec78dd11c9f8807f522d39850f2dd828681540", "e1e14750bcf95016381e4d472bad004eef710f2d6417240904070b3d6654485f"] +pyyaml = ["08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf", "0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696", "129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393", "294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77", "3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922", "3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5", "4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8", "49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10", "4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc", "5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018", "607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e", "6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253", "72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347", "74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183", "895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541", "8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb", "bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185", "bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc", "c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db", "cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa", "d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46", "d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122", "dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b", "e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63", "e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df", "fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc", "fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247", "fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6", "fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"] +requests = ["27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", "c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e"] +six = ["1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"] +smmap = ["7e65386bd122d45405ddf795637b7f7d2b532e7e401d46bbe3fb49b9986d5182", "a9a7479e4c572e2e775c404dcd3080c8dc49f39918c2cf74913d30c4c478e3c2"] +stevedore = ["3a5bbd0652bf552748871eaa73a4a8dc2899786bc497a2aa1fcb4dcdb0debeee", "50d7b78fbaf0d04cd62411188fa7eedcb03eb7f4c4b37005615ceebe582aa82a"] +toml = ["806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", "b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"] +typing-extensions = ["0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497", "50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342", "779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"] +urllib3 = ["753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c", "a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098"] +wcwidth = ["beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784", "c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"] +yamale = ["8c3fd8d8ff69365c45856b3bb07160f4cfce77a01d4fb62bde9b2c4dc30eaed3"] +zipp = ["3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76", "51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098"] diff --git a/tests/integration/commands/test_deletion.py b/tests/integration/commands/test_deletion.py index 8bacba57..8f2b4cf9 100644 --- a/tests/integration/commands/test_deletion.py +++ b/tests/integration/commands/test_deletion.py @@ -2,18 +2,18 @@ import pytest from click.testing import CliRunner -from esque.cli.commands import delete_topic +from esque.cli.commands import delete_topic, delete_topics from esque.errors import NoConfirmationPossibleException @pytest.mark.integration -def test_topic_deletion_without_verification_does_not_work( +def test_topic_deletion_singular_without_verification_does_not_work( interactive_cli_runner: CliRunner, confluent_admin_client: confluent_kafka.admin.AdminClient, topic: str ): topics = confluent_admin_client.list_topics(timeout=5).topics.keys() assert topic in topics - result = interactive_cli_runner.invoke(delete_topic, [topic], catch_exceptions=False) + result = interactive_cli_runner.invoke(delete_topic, topic, catch_exceptions=False) assert result.exit_code == 0 topics = confluent_admin_client.list_topics(timeout=5).topics.keys() @@ -21,7 +21,21 @@ def test_topic_deletion_without_verification_does_not_work( @pytest.mark.integration -def test_delete_topic_without_topic_name_is_handled( +def test_topic_deletion_plural_without_verification_does_not_work( + interactive_cli_runner: CliRunner, confluent_admin_client: confluent_kafka.admin.AdminClient, topic: str +): + topics = confluent_admin_client.list_topics(timeout=5).topics.keys() + assert topic in topics + + result = interactive_cli_runner.invoke(delete_topics, [topic], catch_exceptions=False) + assert result.exit_code == 0 + + topics = confluent_admin_client.list_topics(timeout=5).topics.keys() + assert topic in topics + + +@pytest.mark.integration +def test_delete_topic_singular_without_topic_name_is_handled( interactive_cli_runner: CliRunner, confluent_admin_client: confluent_kafka.admin.AdminClient ): n_topics_before = len(confluent_admin_client.list_topics(timeout=5).topics) @@ -29,17 +43,43 @@ def test_delete_topic_without_topic_name_is_handled( n_topics_after = len(confluent_admin_client.list_topics(timeout=5).topics) assert result.exit_code == 0 assert n_topics_before == n_topics_after - assert "The provided list contains no existing topics." in result.output + assert "doesn't exist on the cluster." in result.output + + +@pytest.mark.integration +def test_delete_topic_plural_without_topic_name_is_handled( + interactive_cli_runner: CliRunner, confluent_admin_client: confluent_kafka.admin.AdminClient +): + n_topics_before = len(confluent_admin_client.list_topics(timeout=5).topics) + result = interactive_cli_runner.invoke(delete_topics) + n_topics_after = len(confluent_admin_client.list_topics(timeout=5).topics) + assert result.exit_code == 0 + assert n_topics_before == n_topics_after + assert "The provided list contains no existing topics" in result.output + + +@pytest.mark.integration +def test_topic_deletion_as_argument_singular_works( + interactive_cli_runner: CliRunner, confluent_admin_client: confluent_kafka.admin.AdminClient, topic: str +): + topics = confluent_admin_client.list_topics(timeout=5).topics.keys() + assert topic in topics + + result = interactive_cli_runner.invoke(delete_topic, topic, input="y\n", catch_exceptions=False) + assert result.exit_code == 0 + + topics = confluent_admin_client.list_topics(timeout=5).topics.keys() + assert topic not in topics @pytest.mark.integration -def test_topic_deletion_as_argument_works( +def test_topic_deletion_as_argument_plural_works( interactive_cli_runner: CliRunner, confluent_admin_client: confluent_kafka.admin.AdminClient, topic: str ): topics = confluent_admin_client.list_topics(timeout=5).topics.keys() assert topic in topics - result = interactive_cli_runner.invoke(delete_topic, [topic], input="y\n", catch_exceptions=False) + result = interactive_cli_runner.invoke(delete_topics, topic, input="y\n", catch_exceptions=False) assert result.exit_code == 0 topics = confluent_admin_client.list_topics(timeout=5).topics.keys() @@ -53,7 +93,7 @@ def test_topic_deletion_as_stdin_works( topics = confluent_admin_client.list_topics(timeout=5).topics.keys() assert topic in topics - result = non_interactive_cli_runner.invoke(delete_topic, "--no-verify", input=topic, catch_exceptions=False) + result = non_interactive_cli_runner.invoke(delete_topics, "--no-verify", input=topic, catch_exceptions=False) assert result.exit_code == 0 topics = confluent_admin_client.list_topics(timeout=5).topics.keys() @@ -67,7 +107,7 @@ def test_topic_deletion_stops_in_non_interactive_mode_without_no_verify( topics = confluent_admin_client.list_topics(timeout=5).topics.keys() assert topic in topics - result = non_interactive_cli_runner.invoke(delete_topic, input=topic) + result = non_interactive_cli_runner.invoke(delete_topics, input=topic) assert result.exit_code != 0 assert isinstance(result.exception, NoConfirmationPossibleException) @@ -85,7 +125,7 @@ def test_keep_dash_delete_dot( assert basic_topic in topics assert duplicate_topic in topics - result = interactive_cli_runner.invoke(delete_topic, [duplicate_topic], input="y\n", catch_exceptions=False) + result = interactive_cli_runner.invoke(delete_topics, [duplicate_topic], input="y\n", catch_exceptions=False) assert result.exit_code == 0 topics = confluent_admin_client.list_topics(timeout=5).topics.keys() diff --git a/tests/integration/commands/test_multiargs.py b/tests/integration/commands/test_multiargs.py index 72cf2d0a..397c1afe 100644 --- a/tests/integration/commands/test_multiargs.py +++ b/tests/integration/commands/test_multiargs.py @@ -8,7 +8,7 @@ from confluent_kafka.admin import AdminClient from confluent_kafka.cimpl import NewTopic, TopicPartition -from esque.cli.commands import delete_consumer_group, delete_topic, get_consumergroups, get_topics +from esque.cli.commands import delete_consumer_group, delete_topics, get_consumergroups, get_topics from esque.config import Config from esque.controller.consumergroup_controller import ConsumerGroupController from esque.resources.consumergroup import ConsumerGroup @@ -55,7 +55,7 @@ def test_topic_deletions_multiple_cli( assert "not_in_the_list_of_topics" not in topics_pre_deletion result = interactive_cli_runner.invoke( - delete_topic, topics_to_delete + ["not_in_the_list_of_topics"], input="Y\n", catch_exceptions=False + delete_topics, topics_to_delete + ["not_in_the_list_of_topics"], input="Y\n", catch_exceptions=False ) assert result.exit_code == 0 @@ -77,7 +77,7 @@ def test_topic_deletions_piped( assert "not_in_the_list_of_topics" not in topics_pre_deletion result = non_interactive_cli_runner.invoke( - delete_topic, + delete_topics, "--no-verify", input="\n".join(topics_to_delete + ["not_in_the_list_of_topics"]), catch_exceptions=False, @@ -151,7 +151,7 @@ def test_topic_list_output_compatibility_for_piping( ): all_topics = non_interactive_cli_runner.invoke(get_topics, args="--hide-internal").stdout assert topic in all_topics - result = non_interactive_cli_runner.invoke(delete_topic, "--no-verify", input=all_topics, catch_exceptions=False) + result = non_interactive_cli_runner.invoke(delete_topics, "--no-verify", input=all_topics, catch_exceptions=False) assert result.exit_code == 0 all_topics = sorted(list(confluent_admin_client.list_topics(timeout=5).topics.keys())) assert all_topics == ["__confluent.support.metrics", "__consumer_offsets"]