1515import subprocess
1616from collections .abc import Iterator
1717from dataclasses import dataclass , asdict
18- from datetime import datetime , date , timedelta , timezone
18+ from datetime import datetime , timezone
1919from pathlib import Path
2020from tempfile import TemporaryDirectory
2121
3232generation_time = datetime .now (timezone .utc )
3333
3434
35- def get_cached_data () -> dict :
36- try :
37- with open ('index.json' ) as f :
38- return json .load (f )
39- except FileNotFoundError :
40- return {'previous_completion' : {}, 'last_sunday' : None }
41-
42-
43- def get_last_sunday () -> str :
44- today = date .today ()
45- offset = today .weekday () + 1
46- last_sunday = today - timedelta (days = offset )
47- return last_sunday .isoformat ()
48-
49-
50- def update_previous_completion (cached_data : dict , completion_progress : list ):
51- current_sunday = get_last_sunday ()
52- if cached_data .get ('last_sunday' ) != current_sunday :
53- cached_data ['previous_completion' ] = {
54- item .language .code : item .completion for item in completion_progress
55- }
56- cached_data ['last_sunday' ] = current_sunday
57-
58-
59- def save_index_json (cached_data : dict , completion_progress : list ):
60- with open ('index.json' , 'w' ) as f :
61- json .dump (
62- {
63- 'last_sunday' : cached_data ['last_sunday' ],
64- 'previous_completion' : cached_data ['previous_completion' ],
65- 'languages' : [asdict (item ) for item in completion_progress ],
66- },
67- f ,
68- indent = 2 ,
69- )
70-
71-
7235def get_completion_progress () -> Iterator ['LanguageProjectData' ]:
7336 with TemporaryDirectory () as clones_dir :
7437 Repo .clone_from (
@@ -144,19 +107,15 @@ class LanguageProjectData:
144107if __name__ == '__main__' :
145108 logging .basicConfig (level = logging .INFO )
146109 logging .info (f'starting at { generation_time } ' )
147-
148- cached_data = get_cached_data ()
149- completion_progress = list (get_completion_progress ())
150-
151- update_previous_completion (cached_data , completion_progress )
152- save_index_json (cached_data , completion_progress )
153-
154110 template = Template (Path ('template.html.jinja' ).read_text ())
111+
155112 output = template .render (
156- completion_progress = completion_progress ,
157- previous_completion = cached_data .get ('previous_completion' , {}),
113+ completion_progress = (completion_progress := list (get_completion_progress ())),
158114 generation_time = generation_time ,
159115 duration = (datetime .now (timezone .utc ) - generation_time ).seconds ,
160116 )
161117
162118 Path ('index.html' ).write_text (output )
119+ Path ('index.json' ).write_text (
120+ json .dumps (completion_progress , indent = 2 , default = asdict )
121+ )
0 commit comments