Skip to content

Commit 6290315

Browse files
committedApr 11, 2025
Move parse_args() and setup_logging() after main()
1 parent 667cd01 commit 6290315

File tree

1 file changed

+103
-103
lines changed

1 file changed

+103
-103
lines changed
 

‎build_docs.py

Lines changed: 103 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -506,109 +506,6 @@ def version_info():
506506
)
507507

508508

509-
def parse_args():
510-
"""Parse command-line arguments."""
511-
512-
parser = ArgumentParser(
513-
description="Runs a build of the Python docs for various branches."
514-
)
515-
parser.add_argument(
516-
"--select-output",
517-
choices=("no-html", "only-html", "only-html-en"),
518-
help="Choose what outputs to build.",
519-
)
520-
parser.add_argument(
521-
"-q",
522-
"--quick",
523-
action="store_true",
524-
help="Run a quick build (only HTML files).",
525-
)
526-
parser.add_argument(
527-
"-b",
528-
"--branch",
529-
metavar="3.12",
530-
help="Version to build (defaults to all maintained branches).",
531-
)
532-
parser.add_argument(
533-
"-r",
534-
"--build-root",
535-
type=Path,
536-
help="Path to a directory containing a checkout per branch.",
537-
default=Path("/srv/docsbuild"),
538-
)
539-
parser.add_argument(
540-
"-w",
541-
"--www-root",
542-
type=Path,
543-
help="Path where generated files will be copied.",
544-
default=Path("/srv/docs.python.org"),
545-
)
546-
parser.add_argument(
547-
"--skip-cache-invalidation",
548-
help="Skip Fastly cache invalidation.",
549-
action="store_true",
550-
)
551-
parser.add_argument(
552-
"--group",
553-
help="Group files on targets and www-root file should get.",
554-
default="docs",
555-
)
556-
parser.add_argument(
557-
"--log-directory",
558-
type=Path,
559-
help="Directory used to store logs.",
560-
default=Path("/var/log/docsbuild/"),
561-
)
562-
parser.add_argument(
563-
"--languages",
564-
nargs="*",
565-
help="Language translation, as a PEP 545 language tag like"
566-
" 'fr' or 'pt-br'. "
567-
"Builds all available languages by default.",
568-
metavar="fr",
569-
)
570-
parser.add_argument(
571-
"--version",
572-
action="store_true",
573-
help="Get build_docs and dependencies version info",
574-
)
575-
parser.add_argument(
576-
"--theme",
577-
default="python-docs-theme",
578-
help="Python package to use for python-docs-theme: Useful to test branches:"
579-
" --theme git+https://github.com/obulat/python-docs-theme@master",
580-
)
581-
args = parser.parse_args()
582-
if args.version:
583-
version_info()
584-
sys.exit(0)
585-
del args.version
586-
if args.log_directory:
587-
args.log_directory = args.log_directory.resolve()
588-
if args.build_root:
589-
args.build_root = args.build_root.resolve()
590-
if args.www_root:
591-
args.www_root = args.www_root.resolve()
592-
return args
593-
594-
595-
def setup_logging(log_directory: Path, select_output: str | None):
596-
"""Setup logging to stderr if run by a human, or to a file if run from a cron."""
597-
log_format = "%(asctime)s %(levelname)s: %(message)s"
598-
if sys.stderr.isatty():
599-
logging.basicConfig(format=log_format, stream=sys.stderr)
600-
else:
601-
log_directory.mkdir(parents=True, exist_ok=True)
602-
if select_output is None:
603-
filename = log_directory / "docsbuild.log"
604-
else:
605-
filename = log_directory / f"docsbuild-{select_output}.log"
606-
handler = logging.handlers.WatchedFileHandler(filename)
607-
handler.setFormatter(logging.Formatter(log_format))
608-
logging.getLogger().addHandler(handler)
609-
logging.getLogger().setLevel(logging.DEBUG)
610-
611-
612509
@dataclass
613510
class DocBuilder:
614511
"""Builder for a CPython version and a language."""
@@ -1288,6 +1185,109 @@ def main():
12881185
build_docs_with_lock(args, "build_docs_html_en.lock")
12891186

12901187

1188+
def parse_args():
1189+
"""Parse command-line arguments."""
1190+
1191+
parser = ArgumentParser(
1192+
description="Runs a build of the Python docs for various branches."
1193+
)
1194+
parser.add_argument(
1195+
"--select-output",
1196+
choices=("no-html", "only-html", "only-html-en"),
1197+
help="Choose what outputs to build.",
1198+
)
1199+
parser.add_argument(
1200+
"-q",
1201+
"--quick",
1202+
action="store_true",
1203+
help="Run a quick build (only HTML files).",
1204+
)
1205+
parser.add_argument(
1206+
"-b",
1207+
"--branch",
1208+
metavar="3.12",
1209+
help="Version to build (defaults to all maintained branches).",
1210+
)
1211+
parser.add_argument(
1212+
"-r",
1213+
"--build-root",
1214+
type=Path,
1215+
help="Path to a directory containing a checkout per branch.",
1216+
default=Path("/srv/docsbuild"),
1217+
)
1218+
parser.add_argument(
1219+
"-w",
1220+
"--www-root",
1221+
type=Path,
1222+
help="Path where generated files will be copied.",
1223+
default=Path("/srv/docs.python.org"),
1224+
)
1225+
parser.add_argument(
1226+
"--skip-cache-invalidation",
1227+
help="Skip Fastly cache invalidation.",
1228+
action="store_true",
1229+
)
1230+
parser.add_argument(
1231+
"--group",
1232+
help="Group files on targets and www-root file should get.",
1233+
default="docs",
1234+
)
1235+
parser.add_argument(
1236+
"--log-directory",
1237+
type=Path,
1238+
help="Directory used to store logs.",
1239+
default=Path("/var/log/docsbuild/"),
1240+
)
1241+
parser.add_argument(
1242+
"--languages",
1243+
nargs="*",
1244+
help="Language translation, as a PEP 545 language tag like"
1245+
" 'fr' or 'pt-br'. "
1246+
"Builds all available languages by default.",
1247+
metavar="fr",
1248+
)
1249+
parser.add_argument(
1250+
"--version",
1251+
action="store_true",
1252+
help="Get build_docs and dependencies version info",
1253+
)
1254+
parser.add_argument(
1255+
"--theme",
1256+
default="python-docs-theme",
1257+
help="Python package to use for python-docs-theme: Useful to test branches:"
1258+
" --theme git+https://github.com/obulat/python-docs-theme@master",
1259+
)
1260+
args = parser.parse_args()
1261+
if args.version:
1262+
version_info()
1263+
sys.exit(0)
1264+
del args.version
1265+
if args.log_directory:
1266+
args.log_directory = args.log_directory.resolve()
1267+
if args.build_root:
1268+
args.build_root = args.build_root.resolve()
1269+
if args.www_root:
1270+
args.www_root = args.www_root.resolve()
1271+
return args
1272+
1273+
1274+
def setup_logging(log_directory: Path, select_output: str | None):
1275+
"""Setup logging to stderr if run by a human, or to a file if run from a cron."""
1276+
log_format = "%(asctime)s %(levelname)s: %(message)s"
1277+
if sys.stderr.isatty():
1278+
logging.basicConfig(format=log_format, stream=sys.stderr)
1279+
else:
1280+
log_directory.mkdir(parents=True, exist_ok=True)
1281+
if select_output is None:
1282+
filename = log_directory / "docsbuild.log"
1283+
else:
1284+
filename = log_directory / f"docsbuild-{select_output}.log"
1285+
handler = logging.handlers.WatchedFileHandler(filename)
1286+
handler.setFormatter(logging.Formatter(log_format))
1287+
logging.getLogger().addHandler(handler)
1288+
logging.getLogger().setLevel(logging.DEBUG)
1289+
1290+
12911291
def build_docs_with_lock(args: Namespace, lockfile_name: str) -> int:
12921292
try:
12931293
lock = zc.lockfile.LockFile(HERE / lockfile_name)

0 commit comments

Comments
 (0)
Please sign in to comment.