32
32
"""
33
33
34
34
from bisect import bisect_left as bisect
35
- from collections import namedtuple
35
+ from collections import namedtuple , OrderedDict
36
36
from contextlib import contextmanager , suppress
37
37
import filecmp
38
38
import json
@@ -197,6 +197,14 @@ def git_clone(repository, directory, branch=None):
197
197
shell_out (["git" , "-C" , directory , "checkout" , branch ])
198
198
199
199
200
+ def version_to_tuple (version ):
201
+ return tuple (int (part ) for part in version .split ("." ))
202
+
203
+
204
+ def tuple_to_version (version_tuple ):
205
+ return "." .join (str (part ) for part in version_tuple )
206
+
207
+
200
208
def locate_nearest_version (available_versions , target_version ):
201
209
"""Look for the nearest version of target_version in available_versions.
202
210
Versions are to be given as tuples, like (3, 7) for 3.7.
@@ -213,12 +221,6 @@ def locate_nearest_version(available_versions, target_version):
213
221
'3.7'
214
222
"""
215
223
216
- def version_to_tuple (version ):
217
- return tuple (int (part ) for part in version .split ("." ))
218
-
219
- def tuple_to_version (version_tuple ):
220
- return "." .join (str (part ) for part in version_tuple )
221
-
222
224
available_versions_tuples = sorted (
223
225
[
224
226
version_to_tuple (available_version )
@@ -267,6 +269,14 @@ def edit(file):
267
269
os .rename (temporary , file )
268
270
269
271
272
+ def picker_label (version ):
273
+ if version .status == "in development" :
274
+ return "dev ({})" .format (version .name )
275
+ if version .status == "pre-release" :
276
+ return "pre ({})" .format (version .name )
277
+ return version .name
278
+
279
+
270
280
def setup_switchers (html_root ):
271
281
"""Setup cross-links between cpython versions:
272
282
- Cross-link various languages in a language switcher
@@ -281,18 +291,36 @@ def setup_switchers(html_root):
281
291
template .safe_substitute (
282
292
{
283
293
"LANGUAGES" : json .dumps (
284
- {
285
- language .tag : language .name
286
- for language in LANGUAGES
287
- if language .in_prod
288
- }
289
- )
294
+ OrderedDict (
295
+ sorted (
296
+ [
297
+ (language .tag , language .name )
298
+ for language in LANGUAGES
299
+ if language .in_prod
300
+ ]
301
+ )
302
+ )
303
+ ),
304
+ "VERSIONS" : json .dumps (
305
+ OrderedDict (
306
+ [
307
+ (version .name , picker_label (version ))
308
+ for version in sorted (
309
+ VERSIONS ,
310
+ key = lambda v : version_to_tuple (v .name ),
311
+ reverse = True ,
312
+ )
313
+ ]
314
+ )
315
+ ),
290
316
}
291
317
)
292
318
)
293
319
for file in Path (html_root ).glob ("**/*.html" ):
294
320
depth = len (file .relative_to (html_root ).parts ) - 1
295
- script = f""" <script type="text/javascript" src="{ '../' * depth } _static/switchers.js"></script>\n """
321
+ script = """ <script type="text/javascript" src="{}_static/switchers.js"></script>\n """ .format (
322
+ "../" * depth
323
+ )
296
324
with edit (file ) as (i , o ):
297
325
for line in i :
298
326
if line == script :
@@ -385,13 +413,13 @@ def copy_build_to_webroot(
385
413
"""Copy a given build to the appropriate webroot with appropriate rights.
386
414
"""
387
415
logging .info (
388
- "Publishing start for version: %s, language: %s" , version , language .tag
416
+ "Publishing start for version: %s, language: %s" , version . name , language .tag
389
417
)
390
418
checkout = os .path .join (
391
- build_root , version , "cpython-{lang}" .format (lang = language .tag )
419
+ build_root , version . name , "cpython-{lang}" .format (lang = language .tag )
392
420
)
393
421
if language .tag == "en" :
394
- target = os .path .join (www_root , version )
422
+ target = os .path .join (www_root , version . name )
395
423
else :
396
424
language_dir = os .path .join (www_root , language .tag )
397
425
os .makedirs (language_dir , exist_ok = True )
@@ -400,7 +428,7 @@ def copy_build_to_webroot(
400
428
except subprocess .CalledProcessError as err :
401
429
logging .warning ("Can't change group of %s: %s" , language_dir , str (err ))
402
430
os .chmod (language_dir , 0o775 )
403
- target = os .path .join (language_dir , version )
431
+ target = os .path .join (language_dir , version . name )
404
432
405
433
os .makedirs (target , exist_ok = True )
406
434
try :
@@ -475,7 +503,9 @@ def copy_build_to_webroot(
475
503
shell_out (
476
504
["curl" , "-XPURGE" , "https://docs.python.org/{%s}" % "," .join (to_purge )]
477
505
)
478
- logging .info ("Publishing done for version: %s, language: %s" , version , language .tag )
506
+ logging .info (
507
+ "Publishing done for version: %s, language: %s" , version .name , language .tag
508
+ )
479
509
480
510
481
511
def head (lines , n = 10 ):
@@ -491,7 +521,7 @@ def version_info():
491
521
subprocess .check_output (["xelatex" , "--version" ], universal_newlines = True ), n = 2
492
522
)
493
523
print (
494
- f """build_docs: { VERSION }
524
+ """build_docs: {VERSION}
495
525
496
526
# platex
497
527
@@ -501,7 +531,11 @@ def version_info():
501
531
# xelatex
502
532
503
533
{xelatex_version}
504
- """
534
+ """ .format (
535
+ VERSION = VERSION ,
536
+ platex_version = platex_version ,
537
+ xelatex_version = xelatex_version ,
538
+ )
505
539
)
506
540
507
541
0 commit comments