10
10
# "python-docs-theme",
11
11
# ]
12
12
# ///
13
+ import json
14
+ import concurrent .futures
15
+ import itertools
13
16
import logging
14
17
import subprocess
15
18
from collections .abc import Iterator
16
- from concurrent .futures import ProcessPoolExecutor
17
- from dataclasses import dataclass
19
+ from dataclasses import dataclass , asdict
18
20
from datetime import datetime , timezone
19
21
from itertools import repeat
20
22
from pathlib import Path
@@ -51,26 +53,26 @@ def get_completion_progress() -> Iterator['LanguageProjectData']:
51
53
subprocess .run (['make' , '-C' , cpython_dir / 'Doc' , 'venv' ], check = True )
52
54
subprocess .run (['make' , '-C' , cpython_dir / 'Doc' , 'gettext' ], check = True )
53
55
languages_built = dict (build_status .get_languages (http := PoolManager ()))
54
- with ProcessPoolExecutor () as executor :
56
+ with concurrent . futures . ProcessPoolExecutor () as executor :
55
57
return executor .map (
56
- get_data ,
58
+ get_project_data ,
57
59
* zip (* get_languages_and_repos (devguide_dir )),
58
- repeat (languages_built ),
59
- repeat (clones_dir ),
60
- repeat (http ),
60
+ itertools . repeat (languages_built ),
61
+ itertools . repeat (clones_dir ),
62
+ itertools . repeat (http ),
61
63
)
62
64
63
65
64
- def get_data (
66
+ def get_project_data (
65
67
language : Language ,
66
- repo : str ,
68
+ repo : str | None ,
67
69
languages_built : dict [str , bool ],
68
70
clones_dir : str ,
69
71
http : PoolManager ,
70
72
) -> 'LanguageProjectData' :
71
73
built = language .code in languages_built
72
74
if repo :
73
- completion , translators_data = get_completion (clones_dir , repo )
75
+ completion , translators_data , branch = get_completion (clones_dir , repo )
74
76
visitors_num = get_number_of_visitors (language .code , http ) if built else 0
75
77
warnings = (
76
78
build_warnings .number (clones_dir , repo , language .code ) if completion else 0
@@ -80,9 +82,11 @@ def get_data(
80
82
translators_data = TranslatorsData (0 , False )
81
83
visitors_num = 0
82
84
warnings = 0
85
+ branch = None
83
86
return LanguageProjectData (
84
87
language ,
85
88
repo ,
89
+ branch ,
86
90
completion ,
87
91
translators_data ,
88
92
visitors_num ,
@@ -98,6 +102,7 @@ def get_data(
98
102
class LanguageProjectData :
99
103
language : Language
100
104
repository : str | None
105
+ branch : str | None
101
106
completion : float
102
107
translators : TranslatorsData
103
108
visitors : int
@@ -114,9 +119,12 @@ class LanguageProjectData:
114
119
template = Template (Path ('template.html.jinja' ).read_text ())
115
120
116
121
output = template .render (
117
- completion_progress = list (get_completion_progress ()),
122
+ completion_progress = ( completion_progress := list (get_completion_progress () )),
118
123
generation_time = generation_time ,
119
124
duration = (datetime .now (timezone .utc ) - generation_time ).seconds ,
120
125
)
121
126
122
127
Path ('index.html' ).write_text (output )
128
+ Path ('index.json' ).write_text (
129
+ json .dumps (completion_progress , indent = 2 , default = asdict )
130
+ )
0 commit comments