1010# "python-docs-theme",
1111# ]
1212# ///
13+ import json
14+ import concurrent .futures
15+ import itertools
1316import logging
1417import subprocess
1518from collections .abc import Iterator
16- from concurrent .futures import ProcessPoolExecutor
17- from dataclasses import dataclass
19+ from dataclasses import dataclass , asdict
1820from datetime import datetime , timezone
1921from itertools import repeat
2022from pathlib import Path
@@ -51,26 +53,26 @@ def get_completion_progress() -> Iterator['LanguageProjectData']:
5153 subprocess .run (['make' , '-C' , cpython_dir / 'Doc' , 'venv' ], check = True )
5254 subprocess .run (['make' , '-C' , cpython_dir / 'Doc' , 'gettext' ], check = True )
5355 languages_built = dict (build_status .get_languages (http := PoolManager ()))
54- with ProcessPoolExecutor () as executor :
56+ with concurrent . futures . ProcessPoolExecutor () as executor :
5557 return executor .map (
56- get_data ,
58+ get_project_data ,
5759 * 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 ),
6163 )
6264
6365
64- def get_data (
66+ def get_project_data (
6567 language : Language ,
66- repo : str ,
68+ repo : str | None ,
6769 languages_built : dict [str , bool ],
6870 clones_dir : str ,
6971 http : PoolManager ,
7072) -> 'LanguageProjectData' :
7173 built = language .code in languages_built
7274 if repo :
73- completion , translators_data = get_completion (clones_dir , repo )
75+ completion , translators_data , branch = get_completion (clones_dir , repo )
7476 visitors_num = get_number_of_visitors (language .code , http ) if built else 0
7577 warnings = (
7678 build_warnings .number (clones_dir , repo , language .code ) if completion else 0
@@ -80,9 +82,11 @@ def get_data(
8082 translators_data = TranslatorsData (0 , False )
8183 visitors_num = 0
8284 warnings = 0
85+ branch = None
8386 return LanguageProjectData (
8487 language ,
8588 repo ,
89+ branch ,
8690 completion ,
8791 translators_data ,
8892 visitors_num ,
@@ -98,6 +102,7 @@ def get_data(
98102class LanguageProjectData :
99103 language : Language
100104 repository : str | None
105+ branch : str | None
101106 completion : float
102107 translators : TranslatorsData
103108 visitors : int
@@ -114,9 +119,12 @@ class LanguageProjectData:
114119 template = Template (Path ('template.html.jinja' ).read_text ())
115120
116121 output = template .render (
117- completion_progress = list (get_completion_progress ()),
122+ completion_progress = ( completion_progress := list (get_completion_progress () )),
118123 generation_time = generation_time ,
119124 duration = (datetime .now (timezone .utc ) - generation_time ).seconds ,
120125 )
121126
122127 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