From 23d71b299501f1f2e6ee1ff1513b51cc53d2f78d Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Sat, 28 Dec 2024 23:44:13 +0200 Subject: [PATCH 1/5] Indicate languages in the docs.python.org switcher --- generate.py | 20 +++++++++++++++++--- switcher.py | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 switcher.py diff --git a/generate.py b/generate.py index c38bffde2..adb4a2662 100644 --- a/generate.py +++ b/generate.py @@ -1,4 +1,5 @@ # /// script +# requires-python = ">=3.11" # dependencies = [ # "gitpython", # "potodo", @@ -16,6 +17,7 @@ from jinja2 import Template import repositories +import switcher import visitors from completion import branches_from_devguide, get_completion @@ -30,13 +32,23 @@ ) subprocess.run(['make', '-C', Path(clones_dir, 'cpython/Doc'), 'venv'], check=True) subprocess.run(['make', '-C', Path(clones_dir, 'cpython/Doc'), 'gettext'], check=True) + switcher_languages = switcher.get_languages() for language, repo in repositories.get_languages_and_repos(devguide_dir): if repo: completion_number, translators_number = get_completion(clones_dir, repo) visitors_number = visitors.get_number_of_visitors(language) else: completion_number, visitors_number = 0.0, 0 - completion_progress.append((language, repo, completion_number, translators_number, visitors_number)) + completion_progress.append( + ( + language, + repo, + completion_number, + translators_number, + visitors_number, + switcher_languages[language], + ) + ) print(completion_progress[-1]) template = Template( @@ -58,13 +70,14 @@ -{% for language, repo, completion, translators, visitors in completion_progress | sort(attribute=2) | reverse %} +{% for language, repo, completion, translators, visitors, in_switcher in completion_progress | sort(attribute=2) | reverse %} {% if repo %} - {{ language }} + {{ language -}} + {{- "*" if in_switcher else "" }} @@ -84,6 +97,7 @@ {% endfor %} +

* Language is in the docs.python.org switcher.

Last updated at {{ generation_time.strftime('%A, %d %B %Y, %X %Z') }}.

diff --git a/switcher.py b/switcher.py new file mode 100644 index 000000000..eb3787ce4 --- /dev/null +++ b/switcher.py @@ -0,0 +1,38 @@ +""" +Fetch languages in the https://docs.python.org language switcher. + +Return a defaultdict mapping language codes to a Boolean indicating +whether it is in the language switcher. +""" + +import tomllib +from collections import defaultdict + +import requests + + +def get_languages() -> defaultdict[str, bool]: + # Languages missing from config.toml are not in production + in_prod = defaultdict(lambda: False) + data = requests.get( + "https://raw.githubusercontent.com/" + "python/docsbuild-scripts/refs/heads/main/config.toml", + timeout=10, + ).text + languages = tomllib.loads(data)["languages"] + for code, language in languages.items(): + code = code.lower().replace("_", "-") + # Languages in config.toml default to being in production + in_prod[code] = language.get("in_prod", True) + return in_prod + + +def main() -> None: + languages = get_languages() + print(languages) + for code in ("en", "pl", "ar", "zh-cn"): + print(f"{code}: {languages[code]}") + + +if __name__ == "__main__": + main() From 23b13a252a81767faa82d8aecf89feac2564f94a Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Sun, 29 Dec 2024 17:07:43 +0200 Subject: [PATCH 2/5] Update get_languages to return generator of language codes in switcher Co-authored-by: Maciej Olko --- switcher.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/switcher.py b/switcher.py index eb3787ce4..a8aae4e0b 100644 --- a/switcher.py +++ b/switcher.py @@ -11,20 +11,18 @@ import requests -def get_languages() -> defaultdict[str, bool]: - # Languages missing from config.toml are not in production - in_prod = defaultdict(lambda: False) +def get_languages() -> Generator[str, None, None]: data = requests.get( "https://raw.githubusercontent.com/" "python/docsbuild-scripts/refs/heads/main/config.toml", timeout=10, ).text - languages = tomllib.loads(data)["languages"] + config = tomllib.loads(data) + languages = config["languages"] + defaults = config["defaults"] for code, language in languages.items(): - code = code.lower().replace("_", "-") - # Languages in config.toml default to being in production - in_prod[code] = language.get("in_prod", True) - return in_prod + if language.get("in_prod", defaults["in_prod"]): + yield code.lower().replace("_", "-") def main() -> None: From 8a6f51cb9ea5ed1c4ec31326be7989c52e973c44 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Sun, 29 Dec 2024 17:08:18 +0200 Subject: [PATCH 3/5] Update following refactor --- generate.py | 4 ++-- switcher.py | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/generate.py b/generate.py index adb4a2662..c722b75e9 100644 --- a/generate.py +++ b/generate.py @@ -32,7 +32,7 @@ ) subprocess.run(['make', '-C', Path(clones_dir, 'cpython/Doc'), 'venv'], check=True) subprocess.run(['make', '-C', Path(clones_dir, 'cpython/Doc'), 'gettext'], check=True) - switcher_languages = switcher.get_languages() + switcher_languages = list(switcher.get_languages()) for language, repo in repositories.get_languages_and_repos(devguide_dir): if repo: completion_number, translators_number = get_completion(clones_dir, repo) @@ -46,7 +46,7 @@ completion_number, translators_number, visitors_number, - switcher_languages[language], + language in switcher_languages, ) ) print(completion_progress[-1]) diff --git a/switcher.py b/switcher.py index a8aae4e0b..301b54812 100644 --- a/switcher.py +++ b/switcher.py @@ -7,6 +7,7 @@ import tomllib from collections import defaultdict +from typing import Generator import requests @@ -26,10 +27,10 @@ def get_languages() -> Generator[str, None, None]: def main() -> None: - languages = get_languages() + languages = list(get_languages()) print(languages) for code in ("en", "pl", "ar", "zh-cn"): - print(f"{code}: {languages[code]}") + print(f"{code}: {code in languages}") if __name__ == "__main__": From 0b9a31f82f948048cc9300d42008676f17fcfc57 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Sun, 29 Dec 2024 17:21:08 +0200 Subject: [PATCH 4/5] =?UTF-8?q?Include=20build=20column=20with=20either=20?= =?UTF-8?q?'in=20switcher'=20(linked=20to=20docs)=20or=20=E2=9C=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- generate.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/generate.py b/generate.py index c722b75e9..cf875048d 100644 --- a/generate.py +++ b/generate.py @@ -64,6 +64,7 @@ language + build visitors translators completion @@ -75,9 +76,15 @@ {% if repo %} - {{ language -}} + {{ language }} - {{- "*" if in_switcher else "" }} + + + {% if in_switcher %} + in switcher + {% else %} + ✗ + {% endif %} @@ -97,7 +104,6 @@ {% endfor %} -

* Language is in the docs.python.org switcher.

Last updated at {{ generation_time.strftime('%A, %d %B %Y, %X %Z') }}.

From c83621168e8b6b86a1a0b2f2414504cf58bb35fe Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Sun, 29 Dec 2024 17:27:18 +0200 Subject: [PATCH 5/5] Specifically refer to data-label instead of counting relative child --- style.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/style.css b/style.css index 7270d08bb..a92e7514b 100644 --- a/style.css +++ b/style.css @@ -25,10 +25,10 @@ th { min-width: 50px; box-sizing: border-box; } -td:nth-child(2) { +td[data-label="visitors"] { text-align: right; } -td:last-child { +td[data-label="completion"] { width: 100%; } @media screen and (max-width: 600px) { @@ -56,7 +56,7 @@ td:last-child { left: 10px; position: absolute; } - td:last-child { + td[data-label="completion"] { width: inherit; } .progress-bar {