Skip to content

Commit 4823212

Browse files
AA-Turnerhugovk
andauthored
Set __version__ in the runtime package (python#222)
* Set ``__version__`` in the runtime package * Return the version key in ``setup()`` * Add static type annotations to ``setup()`` * Fix the Python version for ``tomli`` * read ``__version__`` from ``__init__.py`` Co-authored-by: Hugo van Kemenade <[email protected]>
1 parent b6a1724 commit 4823212

File tree

5 files changed

+37
-12
lines changed

5 files changed

+37
-12
lines changed

CONTRIBUTING.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ How to release
22
--------------
33

44
- Update ``CHANGELOG.rst``
5-
- Bump version (YYYY.MM) in ``pyproject.toml``
5+
- Bump version (YYYY.MM) in ``python_docs_theme/__init__.py``
66
- Commit
77
- Push to check tests pass on
88
`GitHub Actions <https://github.com/python/python-docs-theme/actions>`__

babel_runner.py

+20-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from __future__ import annotations
44

55
import argparse
6+
import ast
67
import subprocess
78
from pathlib import Path
89

@@ -17,6 +18,8 @@
1718
) from ie
1819

1920
PROJECT_DIR = Path(__file__).resolve().parent
21+
PYPROJECT_TOML = PROJECT_DIR / "pyproject.toml"
22+
INIT_PY = PROJECT_DIR / "python_docs_theme" / "__init__.py"
2023

2124
# Global variables used by pybabel below (paths relative to PROJECT_DIR)
2225
DOMAIN = "messages"
@@ -29,9 +32,23 @@
2932

3033
def get_project_info() -> dict:
3134
"""Retrieve project's info to populate the message catalog template"""
32-
with open(Path(PROJECT_DIR / "pyproject.toml"), "rb") as f:
33-
data = tomllib.load(f)
34-
return data["project"]
35+
pyproject_text = PYPROJECT_TOML.read_text(encoding="utf-8")
36+
project_data = tomllib.loads(pyproject_text)["project"]
37+
38+
# read __version__ from __init__.py
39+
for child in ast.parse(INIT_PY.read_bytes()).body:
40+
if not isinstance(child, ast.Assign):
41+
continue
42+
target = child.targets[0]
43+
if not isinstance(target, ast.Name) or target.id != "__version__":
44+
continue
45+
version_node = child.value
46+
if not isinstance(version_node, ast.Constant):
47+
continue
48+
project_data["version"] = version_node.value
49+
break
50+
51+
return project_data
3552

3653

3754
def extract_messages() -> None:

pyproject.toml

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ requires = [
66

77
[project]
88
name = "python-docs-theme"
9-
version = "2024.12"
109
description = "The Sphinx theme for the CPython docs and related projects"
1110
readme = "README.md"
1211
license.file = "LICENSE"
@@ -28,6 +27,8 @@ classifiers = [
2827
"Topic :: Documentation",
2928
"Topic :: Software Development :: Documentation",
3029
]
30+
dynamic = [ "version" ]
31+
3132
dependencies = [
3233
"sphinx>=3.4",
3334
]

python_docs_theme/__init__.py

+13-6
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
from __future__ import annotations
22

33
import hashlib
4-
import os
54
from functools import cache
65
from pathlib import Path
7-
from typing import Any
86

97
import sphinx.application
108
from sphinx.builders.html import StandaloneHTMLBuilder
119

12-
THEME_PATH = Path(__file__).parent.resolve()
10+
TYPE_CHECKING = False
11+
if TYPE_CHECKING:
12+
from typing import Any
13+
14+
from sphinx.application import Sphinx
15+
from sphinx.util.typing import ExtensionMetadata
16+
17+
__version__ = "2024.12"
18+
19+
THEME_PATH = Path(__file__).resolve().parent
1320

1421

1522
@cache
@@ -52,15 +59,15 @@ def _html_page_context(
5259
)
5360

5461

55-
def setup(app):
62+
def setup(app: Sphinx) -> ExtensionMetadata:
5663
app.require_sphinx("3.4")
5764

58-
current_dir = os.path.abspath(os.path.dirname(__file__))
59-
app.add_html_theme("python_docs_theme", current_dir)
65+
app.add_html_theme("python_docs_theme", str(THEME_PATH))
6066

6167
app.connect("html-page-context", _html_page_context)
6268

6369
return {
70+
"version": __version__,
6471
"parallel_read_safe": True,
6572
"parallel_write_safe": True,
6673
}

requirements.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
setuptools
33
Babel
44
Jinja2
5-
tomli; python_version < "3.10"
5+
tomli; python_version < "3.11"

0 commit comments

Comments
 (0)