Skip to content

Commit 23e2f56

Browse files
committed
Use dataclasses instead of named tuples, add visitors column comment, break bottom description into paragraphs, refactor code in main module
1 parent cff369d commit 23e2f56

File tree

4 files changed

+32
-44
lines changed

4 files changed

+32
-44
lines changed

completion.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import json
22
from collections.abc import Iterator
3+
from dataclasses import dataclass
34
from functools import cache
45
from pathlib import Path
56
from tempfile import TemporaryDirectory
6-
from typing import Literal, NamedTuple
7+
from typing import Literal
78

89
import git
910
from potodo import potodo
@@ -58,7 +59,8 @@ def get_completion(clones_dir: str, repo: str) -> tuple[float, 'TranslatorsData'
5859
return completion, translators_data
5960

6061

61-
class TranslatorsData(NamedTuple):
62+
@dataclass(frozen=True)
63+
class TranslatorsData:
6264
number: int
6365
link: str | Literal[False]
6466

generate.py

Lines changed: 21 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,20 @@
1010
# ///
1111
import subprocess
1212
from collections.abc import Iterator
13+
from dataclasses import dataclass
1314
from datetime import datetime, timezone
1415
from logging import info
1516
from pathlib import Path
1617
from tempfile import TemporaryDirectory
17-
from typing import cast, NamedTuple
1818

1919
from git import Repo
2020
from jinja2 import Template
2121

2222
import contribute
23-
import repositories
2423
import build_status
25-
import visitors
24+
from visitors import get_number_of_visitors
2625
from completion import latest_branch_from_devguide, get_completion, TranslatorsData
27-
from repositories import Language
26+
from repositories import get_languages_and_repos, Language
2827

2928
generation_time = datetime.now(timezone.utc)
3029

@@ -38,57 +37,41 @@ def get_completion_progress() -> Iterator['LanguageProjectData']:
3837
)
3938
Repo.clone_from(
4039
'https://github.com/python/cpython.git',
41-
Path(clones_dir, 'cpython'),
40+
cpython_dir := Path(clones_dir, 'cpython'),
4241
depth=1,
4342
branch=latest_branch_from_devguide(devguide_dir),
4443
)
45-
subprocess.run(
46-
['make', '-C', Path(clones_dir, 'cpython/Doc'), 'venv'], check=True
47-
)
48-
subprocess.run(
49-
['make', '-C', Path(clones_dir, 'cpython/Doc'), 'gettext'], check=True
50-
)
44+
subprocess.run(['make', '-C', cpython_dir / 'Doc', 'venv'], check=True)
45+
subprocess.run(['make', '-C', cpython_dir / 'Doc', 'gettext'], check=True)
5146
languages_built = dict(build_status.get_languages())
52-
for language, repo in repositories.get_languages_and_repos(devguide_dir):
47+
for language, repo in get_languages_and_repos(devguide_dir):
5348
built = language.code in languages_built
54-
in_switcher = languages_built.get(language.code)
55-
tx = language.code in contribute.pulling_from_transifex
56-
contrib_link = contribute.get_contrib_link(language.code, repo)
57-
if not repo:
58-
yield LanguageProjectData(
59-
language,
60-
cast(str, repo),
61-
0.0,
62-
TranslatorsData(0, False),
63-
0,
64-
built,
65-
in_switcher,
66-
False,
67-
None,
68-
)
69-
continue
70-
completion, translators_data = get_completion(clones_dir, repo)
71-
visitors_num = (
72-
visitors.get_number_of_visitors(language.code) if built else 0
73-
)
49+
if repo:
50+
completion, translators_data = get_completion(clones_dir, repo)
51+
visitors_num = get_number_of_visitors(language.code) if built else 0
52+
else:
53+
completion = 0.0
54+
translators_data = TranslatorsData(0, False)
55+
visitors_num = 0
7456
yield LanguageProjectData(
7557
language,
7658
repo,
7759
completion,
7860
translators_data,
7961
visitors_num,
8062
built,
81-
in_switcher,
82-
tx,
83-
contrib_link,
63+
in_switcher=languages_built.get(language.code),
64+
uses_platform=language.code in contribute.pulling_from_transifex,
65+
contribution_link=contribute.get_contrib_link(language.code, repo),
8466
)
8567

8668

87-
class LanguageProjectData(NamedTuple):
69+
@dataclass(frozen=True)
70+
class LanguageProjectData:
8871
language: Language
89-
repository: str
72+
repository: str | None
9073
completion: float
91-
translators: 'TranslatorsData'
74+
translators: TranslatorsData
9275
visitors: int
9376
built: bool
9477
in_switcher: bool | None

repositories.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import re
22
from collections.abc import Iterator
3+
from dataclasses import dataclass
34
from pathlib import Path
45
from tempfile import TemporaryDirectory
5-
from typing import NamedTuple
66

77
from docutils import core
88
from docutils.nodes import table, row
@@ -33,7 +33,8 @@ def get_languages_and_repos(
3333
)
3434

3535

36-
class Language(NamedTuple):
36+
@dataclass(frozen=True)
37+
class Language:
3738
code: str
3839
name: str
3940

template.html.jinja

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<th>language</th>
1313
<th>contribute</th>
1414
<th>build</th>
15-
<th><a href="https://plausible.io/data-policy#how-we-count-unique-users-without-cookies" target="_blank">visitors</a></th>
15+
<th>visitors*</th>
1616
<th>translators</th>
1717
<th>completion</th>
1818
</tr>
@@ -55,7 +55,9 @@
5555
{% endfor %}
5656
</tbody>
5757
</table>
58-
<p>For more information about translations, see the <a href="https://devguide.python.org/documentation/translating/" target="_blank">Python Developer’s Guide</a>. <br> Last updated at {{ generation_time.strftime('%A, %-d %B %Y, %-H:%M:%S %Z') }} (in {{ duration // 60 }}:{{ "{:02}".format(duration % 60) }} minutes).</p>
58+
<p>* sum of <a href="https://plausible.io/data-policy#how-we-count-unique-users-without-cookies" target="_blank">daily unique visitors</a> since 8 June 2024</p>
59+
<p>For more information about translations, see the <a href="https://devguide.python.org/documentation/translating/" target="_blank">Python Developer’s Guide</a>.</p>
60+
<p>Last updated at {{ generation_time.strftime('%A, %-d %B %Y, %-H:%M:%S %Z') }} (in {{ duration // 60 }}:{{ "{:02}".format(duration % 60) }} minutes).</p>
5961
</body>
6062
<script>
6163
function updateProgressBarVisibility() {

0 commit comments

Comments
 (0)