diff --git a/generate.py b/generate.py index f273e7489..4592ee9b9 100644 --- a/generate.py +++ b/generate.py @@ -27,7 +27,7 @@ def get_completion_progress() -> ( - Iterator[tuple[str, str, float, int, int, bool, bool | None]] + Iterator[tuple[str, str, str, float, int, int, bool, bool | None]] ): with TemporaryDirectory() as clones_dir: Repo.clone_from( @@ -49,15 +49,24 @@ def get_completion_progress() -> ( ['make', '-C', Path(clones_dir, 'cpython/Doc'), 'gettext'], check=True ) languages_built = dict(build_status.get_languages()) - for lang, repo in repositories.get_languages_and_repos(devguide_dir): + for lang, lang_name, repo in repositories.get_languages_and_repos(devguide_dir): built = lang in languages_built in_switcher = languages_built.get(lang) if not repo: - yield lang, cast(str, repo), 0.0, 0, 0, built, in_switcher + yield lang, lang_name, cast(str, repo), 0.0, 0, 0, built, in_switcher continue completion, translators = get_completion(clones_dir, repo) visitors_num = visitors.get_number_of_visitors(lang) if built else 0 - yield lang, repo, completion, translators, visitors_num, built, in_switcher + yield ( + lang, + lang_name, + repo, + completion, + translators, + visitors_num, + built, + in_switcher, + ) if __name__ == '__main__': diff --git a/repositories.py b/repositories.py index 2ab70ec32..9ade1d2c7 100644 --- a/repositories.py +++ b/repositories.py @@ -1,12 +1,16 @@ import re from collections.abc import Iterator from pathlib import Path +from tempfile import TemporaryDirectory from docutils import core from docutils.nodes import table, row +from git import Repo -def get_languages_and_repos(devguide_dir: Path) -> Iterator[tuple[str, str | None]]: +def get_languages_and_repos( + devguide_dir: Path, +) -> Iterator[tuple[str, str, str | None]]: translating = devguide_dir.joinpath('documentation/translating.rst').read_text() doctree = core.publish_doctree(translating) @@ -14,11 +18,19 @@ def get_languages_and_repos(devguide_dir: Path) -> Iterator[tuple[str, str | Non for row_node in node.traverse(row)[1:]: language = row_node[0].astext() repo = row_node[2].astext() - language_match = re.match(r'.* \((.*)\)', language) + language_match = re.match(r'(.*) \((.*)\)', language) if not language_match: raise ValueError( f'Expected a language code in brackets in devguide table, found {language}' ) - language_code = language_match.group(1).lower().replace('_', '-') + language_name = language_match.group(1) + language_code = language_match.group(2).lower().replace('_', '-') repo_match = re.match(':github:`GitHub <(.*)>`', repo) - yield language_code, repo_match and repo_match.group(1) + yield language_code, language_name, repo_match and repo_match.group(1) + + +if __name__ == '__main__': + with TemporaryDirectory() as directory: + Repo.clone_from('https://github.com/python/devguide.git', directory, depth=1) + for item in get_languages_and_repos(Path(directory)): + print(item) diff --git a/template.html.jinja b/template.html.jinja index 91a0c176d..3d54f0dc8 100644 --- a/template.html.jinja +++ b/template.html.jinja @@ -16,16 +16,16 @@ -{% for language, repo, completion, translators, visitors, build, in_switcher in completion_progress | sort(attribute='2,3') | reverse %} +{% for language, language_name, repo, completion, translators, visitors, build, in_switcher in completion_progress | sort(attribute='3,4') | reverse %} {% if repo %} - {{ language }} + {{ language_name }} ({{ language }}) {% else %} - {{ language }} + {{ language_name }} ({{ language }}) {% endif %} {% if build %}