88# "docutils",
99# ]
1010# ///
11+ import json
1112import concurrent .futures
1213import itertools
1314import logging
1415import subprocess
1516from collections .abc import Iterator
16- from dataclasses import dataclass
17+ from dataclasses import dataclass , asdict
1718from datetime import datetime , timezone
1819from pathlib import Path
1920from tempfile import TemporaryDirectory
@@ -48,6 +49,7 @@ def get_completion_progress() -> Iterator['LanguageProjectData']:
4849 subprocess .run (['make' , '-C' , cpython_dir / 'Doc' , 'venv' ], check = True )
4950 subprocess .run (['make' , '-C' , cpython_dir / 'Doc' , 'gettext' ], check = True )
5051 languages_built = dict (build_status .get_languages (http := PoolManager ()))
52+
5153 with concurrent .futures .ThreadPoolExecutor () as executor :
5254 return executor .map (
5355 get_project_data ,
@@ -67,7 +69,7 @@ def get_project_data(
6769) -> 'LanguageProjectData' :
6870 built = language .code in languages_built
6971 if repo :
70- completion , translators_data = get_completion (clones_dir , repo )
72+ completion , translators_data , branch = get_completion (clones_dir , repo )
7173 visitors_num = get_number_of_visitors (language .code , http ) if built else 0
7274 else :
7375 completion = 0.0
@@ -76,6 +78,7 @@ def get_project_data(
7678 return LanguageProjectData (
7779 language ,
7880 repo ,
81+ branch ,
7982 completion ,
8083 translators_data ,
8184 visitors_num ,
@@ -90,6 +93,7 @@ def get_project_data(
9093class LanguageProjectData :
9194 language : Language
9295 repository : str | None
96+ branch : str
9397 completion : float
9498 translators : TranslatorsData
9599 visitors : int
@@ -105,9 +109,12 @@ class LanguageProjectData:
105109 template = Template (Path ('template.html.jinja' ).read_text ())
106110
107111 output = template .render (
108- completion_progress = list (get_completion_progress ()),
112+ completion_progress = ( completion_progress := list (get_completion_progress () )),
109113 generation_time = generation_time ,
110114 duration = (datetime .now (timezone .utc ) - generation_time ).seconds ,
111115 )
112116
113117 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