Skip to content

Commit 6fdebf1

Browse files
authored
Merge pull request #21 from looooown2006/fix/version-metadata-11
fix(cli): sync version with package metadata
2 parents e763fdd + f73fc26 commit 6fdebf1

2 files changed

Lines changed: 52 additions & 5 deletions

File tree

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
11
"""MCP server for Python standard library documentation."""
22

3-
__version__ = "0.1.0"
3+
import tomllib
4+
from importlib.metadata import PackageNotFoundError, version
5+
from pathlib import Path
6+
7+
8+
def _read_version() -> str:
9+
try:
10+
return version("mcp-server-python-docs")
11+
except PackageNotFoundError:
12+
pyproject_path = Path(__file__).resolve().parents[2] / "pyproject.toml"
13+
with pyproject_path.open("rb") as fh:
14+
return tomllib.load(fh)["project"]["version"]
15+
16+
17+
__version__ = _read_version()

tests/test_packaging.py

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55
"""
66
from __future__ import annotations
77

8+
import os
89
import shutil
910
import subprocess
1011
import sys
1112
import zipfile
13+
from importlib.metadata import version
1214
from pathlib import Path
1315

1416
import pytest
@@ -100,8 +102,38 @@ def test_required_deps_present(self):
100102
class TestVersionFlag:
101103
"""PKG-06: --version flag prints version."""
102104

105+
def test_module_version_matches_package_metadata(self):
106+
"""__version__ stays in sync with installed package metadata."""
107+
import mcp_server_python_docs
108+
109+
assert mcp_server_python_docs.__version__ == version("mcp-server-python-docs")
110+
111+
def test_source_tree_import_without_installed_metadata(self, tmp_path: Path):
112+
"""Source-tree import falls back to pyproject.toml when metadata is absent."""
113+
env = os.environ.copy()
114+
env["PYTHONPATH"] = str(PROJECT_ROOT / "src")
115+
result = subprocess.run(
116+
[
117+
sys.executable,
118+
"-S",
119+
"-c",
120+
"import mcp_server_python_docs; print(mcp_server_python_docs.__version__)",
121+
],
122+
capture_output=True,
123+
text=True,
124+
timeout=10,
125+
env=env,
126+
cwd=str(tmp_path),
127+
)
128+
assert result.returncode == 0, (
129+
f"Source-tree import failed.\n"
130+
f"stdout: {result.stdout!r}\n"
131+
f"stderr: {result.stderr!r}"
132+
)
133+
assert result.stdout.strip() == version("mcp-server-python-docs")
134+
103135
def test_version_flag_output(self):
104-
"""--version prints 0.1.0."""
136+
"""--version prints the installed package metadata version."""
105137
result = subprocess.run(
106138
[sys.executable, "-m", "mcp_server_python_docs", "--version"],
107139
capture_output=True,
@@ -110,8 +142,9 @@ def test_version_flag_output(self):
110142
)
111143
# Version output goes to stderr due to stdio hygiene
112144
combined = result.stdout + result.stderr
113-
assert "0.1.0" in combined, (
114-
f"Expected '0.1.0' in output.\n"
145+
expected = version("mcp-server-python-docs")
146+
assert expected in combined, (
147+
f"Expected {expected!r} in output.\n"
115148
f"stdout: {result.stdout!r}\n"
116149
f"stderr: {result.stderr!r}"
117150
)
@@ -140,7 +173,7 @@ def test_module_runnable(self):
140173
)
141174
assert result.returncode == 0
142175
combined = result.stdout + result.stderr
143-
assert "0.1.0" in combined
176+
assert version("mcp-server-python-docs") in combined
144177

145178
def test_entry_point_module_exists(self):
146179
"""The entry-point module is importable."""

0 commit comments

Comments
 (0)