From e1ca7dfe1eca2d129186a14438edd48e9102f31b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89loi=20Rivard?= Date: Thu, 2 Jan 2025 23:29:58 +0100 Subject: [PATCH] feat: --version CLI option --- CHANGES.rst | 7 +++++++ canaille/commands.py | 9 +++++++++ tests/app/commands/test_version.py | 11 +++++++++++ 3 files changed, 27 insertions(+) create mode 100644 tests/app/commands/test_version.py diff --git a/CHANGES.rst b/CHANGES.rst index 469040cc..83ecae35 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,3 +1,10 @@ +[0.0.58] - Unreleased +--------------------- + +Added +^^^^^ +- ``--version`` option to the CLI. :pr:`209` + [0.0.57] - 2024-12-31 --------------------- diff --git a/canaille/commands.py b/canaille/commands.py index 0c681874..3f62e540 100644 --- a/canaille/commands.py +++ b/canaille/commands.py @@ -1,3 +1,5 @@ +import importlib.metadata + import click from flask.cli import FlaskGroup @@ -7,6 +9,8 @@ import canaille.core.commands import canaille.oidc.commands from canaille import create_app +version = importlib.metadata.version("canaille") + @click.group( cls=FlaskGroup, @@ -14,6 +18,7 @@ from canaille import create_app add_version_option=False, add_default_commands=False, ) +@click.version_option(version, prog_name="Canaille") def cli(): """Canaille management utilities.""" @@ -22,3 +27,7 @@ canaille.app.commands.register(cli) canaille.backends.commands.register(cli) canaille.core.commands.register(cli) canaille.oidc.commands.register(cli) + + +if __name__ == "__main__": # pragma: no cover + cli() diff --git a/tests/app/commands/test_version.py b/tests/app/commands/test_version.py new file mode 100644 index 00000000..35066d8e --- /dev/null +++ b/tests/app/commands/test_version.py @@ -0,0 +1,11 @@ +import re + +from canaille.commands import cli + + +def test_check_command(testclient, mock_smpp): + runner = testclient.app.test_cli_runner() + res = runner.invoke(cli, ["--version"]) + semver_pattern = r"(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?" + assert re.match(rf"Canaille, version {semver_pattern}", res.stdout) + assert res.exit_code == 0, res.stdout