8
8
# "docutils",
9
9
# ]
10
10
# ///
11
+ import json
11
12
import concurrent .futures
12
13
import itertools
13
14
import logging
14
15
import subprocess
15
16
from collections .abc import Iterator
16
- from dataclasses import dataclass
17
+ from dataclasses import dataclass , asdict
17
18
from datetime import datetime , timezone
18
19
from pathlib import Path
19
20
from tempfile import TemporaryDirectory
@@ -48,6 +49,7 @@ def get_completion_progress() -> Iterator['LanguageProjectData']:
48
49
subprocess .run (['make' , '-C' , cpython_dir / 'Doc' , 'venv' ], check = True )
49
50
subprocess .run (['make' , '-C' , cpython_dir / 'Doc' , 'gettext' ], check = True )
50
51
languages_built = dict (build_status .get_languages (http := PoolManager ()))
52
+
51
53
with concurrent .futures .ThreadPoolExecutor () as executor :
52
54
return executor .map (
53
55
get_project_data ,
@@ -67,7 +69,7 @@ def get_project_data(
67
69
) -> 'LanguageProjectData' :
68
70
built = language .code in languages_built
69
71
if repo :
70
- completion , translators_data = get_completion (clones_dir , repo )
72
+ completion , translators_data , branch = get_completion (clones_dir , repo )
71
73
visitors_num = get_number_of_visitors (language .code , http ) if built else 0
72
74
else :
73
75
completion = 0.0
@@ -76,6 +78,7 @@ def get_project_data(
76
78
return LanguageProjectData (
77
79
language ,
78
80
repo ,
81
+ branch ,
79
82
completion ,
80
83
translators_data ,
81
84
visitors_num ,
@@ -90,6 +93,7 @@ def get_project_data(
90
93
class LanguageProjectData :
91
94
language : Language
92
95
repository : str | None
96
+ branch : str
93
97
completion : float
94
98
translators : TranslatorsData
95
99
visitors : int
@@ -105,9 +109,12 @@ class LanguageProjectData:
105
109
template = Template (Path ('template.html.jinja' ).read_text ())
106
110
107
111
output = template .render (
108
- completion_progress = list (get_completion_progress ()),
112
+ completion_progress = ( completion_progress := list (get_completion_progress () )),
109
113
generation_time = generation_time ,
110
114
duration = (datetime .now (timezone .utc ) - generation_time ).seconds ,
111
115
)
112
116
113
117
Path ('index.html' ).write_text (output )
118
+ Path ('index.json' ).write_text (
119
+ json .dumps (completion_progress , indent = 2 , default = asdict )
120
+ )
0 commit comments