Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions osipy/cli/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@

def _get_version() -> str:
"""Read version without importing the full osipy package."""
from importlib.metadata import version
from osipy._version import __version__

return version("osipy")
return __version__


def create_parser() -> argparse.ArgumentParser:
Expand Down
25 changes: 24 additions & 1 deletion tests/unit/cli/test_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
dump_defaults,
load_config,
)
from osipy.cli.main import create_parser
from osipy.cli.main import _get_version, create_parser

# ---------------------------------------------------------------------------
# Fixtures
Expand Down Expand Up @@ -1114,3 +1114,26 @@ def test_output_override(self) -> None:

args_short = parser.parse_args(["-o", "/out", "config.yaml", "/data"])
assert args_short.output == "/out"


# ---------------------------------------------------------------------------
# TestVersionLookup — GH-173
# ---------------------------------------------------------------------------


class TestVersionLookup:
"""create_parser() must never crash reading the version, since it runs
on every CLI invocation, not just `--version`."""

def test_get_version_matches_version_module(self) -> None:
"""_get_version() reads straight from osipy._version."""
from osipy._version import __version__

assert _get_version() == __version__

def test_version_flag_exits_cleanly(self) -> None:
"""--version exits 0 without raising."""
parser = create_parser()
with pytest.raises(SystemExit) as exc_info:
parser.parse_args(["--version"])
assert exc_info.value.code == 0
Loading