|
1 | 1 | import os |
| 2 | +from importlib.metadata import PackageNotFoundError |
| 3 | +from importlib.metadata import version as package_version |
2 | 4 |
|
3 | 5 | from sphinx.util import logging |
4 | 6 |
|
5 | 7 | from sphinx_test_spec.builder import TestSpecBuilder, build_testspec_json |
6 | 8 | from sphinx_test_spec.domain import MESSAGE_CATALOG_NAME, TestSpecDomain |
7 | 9 |
|
8 | 10 | LOG = logging.getLogger(__name__) |
9 | | -VERSION = 25.1 |
| 11 | +PACKAGE_NAME = "sphinx-test-spec" # bzw. "sphinx-rst-table" |
| 12 | + |
| 13 | + |
| 14 | +def get_extension_version() -> str: |
| 15 | + """Return the installed package version from package metadata. |
| 16 | +
|
| 17 | + The version is maintained in ``pyproject.toml`` only. When the package is |
| 18 | + installed, that value is exposed through Python package metadata and used |
| 19 | + by Sphinx in ``setup()``. The fallback is only for direct source-tree usage |
| 20 | + without an installed distribution. |
| 21 | + """ |
| 22 | + try: |
| 23 | + return package_version(PACKAGE_NAME) |
| 24 | + except PackageNotFoundError: |
| 25 | + return "0+unknown" |
10 | 26 |
|
11 | 27 |
|
12 | 28 | def rst_testspec_jinja(app, docname, source): |
@@ -40,4 +56,8 @@ def setup(app): |
40 | 56 | LOG.debug(f"using locale dir {locale_dir}") |
41 | 57 | app.add_message_catalog(MESSAGE_CATALOG_NAME, locale_dir) |
42 | 58 |
|
43 | | - return {"version": VERSION, "parallel_read_safe": True, "parallel_write_safe": True} |
| 59 | + return { |
| 60 | + "version": get_extension_version(), |
| 61 | + "parallel_read_safe": True, |
| 62 | + "parallel_write_safe": True, |
| 63 | + } |
0 commit comments