Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 13 additions & 4 deletions generate.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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__':
Expand Down
20 changes: 16 additions & 4 deletions repositories.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,36 @@
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)

for node in doctree.traverse(table):
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)
6 changes: 3 additions & 3 deletions template.html.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,16 @@
</tr>
</thead>
<tbody>
{% 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 %}
<tr>
{% if repo %}
<td data-label="language">
<a href="https://github.com/{{ repo }}" target="_blank">
{{ language }}
{{ language_name }} ({{ language }})
</a>
</td>
{% else %}
<td data-label="language">{{ language }}</td>
<td data-label="language">{{ language_name }} ({{ language }})</td>
{% endif %}
<td data-label="build">
{% if build %}
Expand Down
Loading