Skip to content

Commit 6bfedfd

Browse files
committed
FIX: Handling 3.10 as 3.10 and not 3.1.
1 parent 2e7296e commit 6bfedfd

File tree

1 file changed

+56
-33
lines changed

1 file changed

+56
-33
lines changed

build_docs.py

Lines changed: 56 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,12 @@
3131
3232
"""
3333

34+
from bisect import bisect
3435
import filecmp
3536
import logging
3637
import os
3738
import pathlib
39+
import re
3840
import shutil
3941
import subprocess
4042
import sys
@@ -53,11 +55,11 @@
5355

5456
BRANCHES = [
5557
# version, git branch, isdev
56-
(3.6, "3.6", False),
57-
(3.7, "3.7", False),
58-
(3.8, "3.8", False),
59-
(3.9, "3.9", True),
60-
(3.10, "master", True),
58+
("3.6", "3.6", False),
59+
("3.7", "3.7", False),
60+
("3.8", "3.8", False),
61+
("3.9", "3.9", True),
62+
("3.10", "master", True),
6163
]
6264

6365
LANGUAGES = ["en", "fr", "ja", "ko", "pt-br", "zh-cn", "zh-tw", "id"]
@@ -193,6 +195,39 @@ def pep_545_tag_to_gettext_tag(tag):
193195
return language + "_" + region.upper()
194196

195197

198+
def locate_nearest_version(available_versions, target_version):
199+
"""Look for the nearest version of target_version in available_versions.
200+
Versions are to be given as tuples, like (3, 7) for 3.7.
201+
202+
>>> locate_nearest_version(["2.7", "3.6", "3.7", "3.8"], "3.9")
203+
'3.8'
204+
>>> locate_nearest_version(["2.7", "3.6", "3.7", "3.8"], "3.5")
205+
'3.6'
206+
>>> locate_nearest_version(["2.7", "3.6", "3.7", "3.8"], "2.6")
207+
'2.7'
208+
>>> locate_nearest_version(["2.7", "3.6", "3.7", "3.8"], "3.10")
209+
'3.8'
210+
"""
211+
212+
def version_to_tuple(version):
213+
return tuple(int(part) for part in version.split("."))
214+
215+
def tuple_to_version(version_tuple):
216+
return ".".join(str(part) for part in version_tuple)
217+
218+
available_versions_tuples = [
219+
version_to_tuple(available_version) for available_version in available_versions
220+
]
221+
target_version_tuple = version_to_tuple(target_version)
222+
try:
223+
found = available_versions_tuples[
224+
bisect(available_versions_tuples, target_version_tuple)
225+
]
226+
except IndexError:
227+
found = available_versions_tuples[-1]
228+
return tuple_to_version(found)
229+
230+
196231
def translation_branch(locale_repo, locale_clone_dir, needed_version):
197232
"""Some cpython versions may be untranslated, being either too old or
198233
too new.
@@ -202,15 +237,11 @@ def translation_branch(locale_repo, locale_clone_dir, needed_version):
202237
"""
203238
git_clone(locale_repo, locale_clone_dir)
204239
remote_branches = shell_out(["git", "-C", locale_clone_dir, "branch", "-r"])
205-
translated_branches = []
206-
for translated_branch in remote_branches.split("\n"):
207-
if not translated_branch:
208-
continue
209-
try:
210-
translated_branches.append(float(translated_branch.split("/")[1]))
211-
except ValueError:
212-
pass # Skip non-version branches like 'master' if they exists.
213-
return str(sorted(translated_branches, key=lambda x: abs(needed_version - x))[0])
240+
branches = []
241+
for branch in remote_branches.split("\n"):
242+
if re.match(r".*/[0-9]+\.[0-9]+$", branch):
243+
branches.append(branch.split("/")[-1])
244+
return locate_nearest_version(branches, needed_version)
214245

215246

216247
def build_one(
@@ -228,17 +259,15 @@ def build_one(
228259
language = "en"
229260
if sentry_sdk:
230261
with sentry_sdk.configure_scope() as scope:
231-
scope.set_tag("version", repr(version))
262+
scope.set_tag("version", version)
232263
scope.set_tag("language", language)
233-
checkout = os.path.join(
234-
build_root, str(version), "cpython-{lang}".format(lang=language)
235-
)
236-
logging.info("Build start for version: %s, language: %s", str(version), language)
264+
checkout = os.path.join(build_root, version, "cpython-{lang}".format(lang=language))
265+
logging.info("Build start for version: %s, language: %s", version, language)
237266
sphinxopts = SPHINXOPTS[language].copy()
238267
sphinxopts.extend(["-q"])
239268
if language != "en":
240269
gettext_language_tag = pep_545_tag_to_gettext_tag(language)
241-
locale_dirs = os.path.join(build_root, str(version), "locale")
270+
locale_dirs = os.path.join(build_root, version, "locale")
242271
locale_clone_dir = os.path.join(
243272
locale_dirs, gettext_language_tag, "LC_MESSAGES"
244273
)
@@ -280,22 +309,18 @@ def build_one(
280309
logfile=os.path.join(log_directory, logname),
281310
)
282311
shell_out(["chgrp", "-R", group, log_directory])
283-
logging.info("Build done for version: %s, language: %s", str(version), language)
312+
logging.info("Build done for version: %s, language: %s", version, language)
284313

285314

286315
def copy_build_to_webroot(
287316
build_root, version, language, group, quick, skip_cache_invalidation, www_root
288317
):
289318
"""Copy a given build to the appropriate webroot with appropriate rights.
290319
"""
291-
logging.info(
292-
"Publishing start for version: %s, language: %s", str(version), language
293-
)
294-
checkout = os.path.join(
295-
build_root, str(version), "cpython-{lang}".format(lang=language)
296-
)
320+
logging.info("Publishing start for version: %s, language: %s", version, language)
321+
checkout = os.path.join(build_root, version, "cpython-{lang}".format(lang=language))
297322
if language == "en":
298-
target = os.path.join(www_root, str(version))
323+
target = os.path.join(www_root, version)
299324
else:
300325
language_dir = os.path.join(www_root, language)
301326
os.makedirs(language_dir, exist_ok=True)
@@ -304,7 +329,7 @@ def copy_build_to_webroot(
304329
except subprocess.CalledProcessError as err:
305330
logging.warning("Can't change group of %s: %s", language_dir, str(err))
306331
os.chmod(language_dir, 0o775)
307-
target = os.path.join(language_dir, str(version))
332+
target = os.path.join(language_dir, version)
308333

309334
os.makedirs(target, exist_ok=True)
310335
try:
@@ -379,9 +404,7 @@ def copy_build_to_webroot(
379404
shell_out(
380405
["curl", "-XPURGE", "https://docs.python.org/{%s}" % ",".join(to_purge)]
381406
)
382-
logging.info(
383-
"Publishing done for version: %s, language: %s", str(version), language
384-
)
407+
logging.info("Publishing done for version: %s, language: %s", version, language)
385408

386409

387410
def head(lines, n=10):
@@ -551,7 +574,7 @@ def main():
551574
for version, language, future in futures:
552575
if sentry_sdk:
553576
with sentry_sdk.configure_scope() as scope:
554-
scope.set_tag("version", repr(version))
577+
scope.set_tag("version", version)
555578
scope.set_tag("language", language if language else "en")
556579
if future.exception():
557580
logging.error(

0 commit comments

Comments
 (0)