From 4ddbee4a7cdf14a7d064ffaea6cbb0c4fdb63f23 Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Thu, 17 Aug 2023 01:25:15 +0100 Subject: [PATCH] Fix ``console_scripts`` entry points --- sphinx/cmd/build.py | 16 +++++++++++----- sphinx/cmd/make_mode.py | 10 +++++++--- sphinx/cmd/quickstart.py | 7 +++++-- sphinx/ext/apidoc.py | 4 ++-- sphinx/ext/autosummary/generate.py | 4 ++-- 5 files changed, 27 insertions(+), 14 deletions(-) diff --git a/sphinx/cmd/build.py b/sphinx/cmd/build.py index 183b4c471ff..40ab40b80a2 100644 --- a/sphinx/cmd/build.py +++ b/sphinx/cmd/build.py @@ -12,7 +12,7 @@ import sys import traceback from os import path -from typing import Any, TextIO +from typing import TYPE_CHECKING, Any, TextIO from docutils.utils import SystemMessage @@ -32,6 +32,9 @@ from sphinx.util.exceptions import format_exception_cut_frames, save_traceback from sphinx.util.osutil import ensuredir +if TYPE_CHECKING: + from collections.abc import Sequence + def handle_exception( app: Sphinx | None, args: Any, exception: BaseException, stderr: TextIO = sys.stderr, @@ -204,13 +207,13 @@ def get_parser() -> argparse.ArgumentParser: return parser -def make_main(argv: list[str]) -> int: +def make_main(argv: Sequence[str]) -> int: """Sphinx build "make mode" entry.""" from sphinx.cmd import make_mode return make_mode.run_make_mode(argv[1:]) -def _parse_arguments(argv: list[str]) -> argparse.Namespace: +def _parse_arguments(argv: Sequence[str]) -> argparse.Namespace: parser = get_parser() args = parser.parse_args(argv) @@ -279,7 +282,7 @@ def _parse_arguments(argv: list[str]) -> argparse.Namespace: return args -def build_main(argv: list[str]) -> int: +def build_main(argv: Sequence[str]) -> int: """Sphinx build "main" command-line entry.""" args = _parse_arguments(argv) @@ -319,10 +322,13 @@ def _bug_report_info() -> int: return 0 -def main(argv: list[str], /) -> int: +def main(argv: Sequence[str] = (), /) -> int: locale.setlocale(locale.LC_ALL, '') sphinx.locale.init_console() + if not argv: + argv = sys.argv[1:] + if argv[:1] == ['--bug-report']: return _bug_report_info() if argv[:1] == ['-M']: diff --git a/sphinx/cmd/make_mode.py b/sphinx/cmd/make_mode.py index 4c1682d781f..959d814f5bb 100644 --- a/sphinx/cmd/make_mode.py +++ b/sphinx/cmd/make_mode.py @@ -13,6 +13,7 @@ import subprocess import sys from os import path +from typing import TYPE_CHECKING import sphinx from sphinx.cmd.build import build_main @@ -29,6 +30,9 @@ except ImportError: from sphinx.util.osutil import _chdir as chdir +if TYPE_CHECKING: + from collections.abc import Sequence + BUILDERS = [ ("", "html", "to make standalone HTML files"), ("", "dirhtml", "to make HTML files named index.html in directories"), @@ -59,10 +63,10 @@ class Make: - def __init__(self, srcdir: str, builddir: str, opts: list[str]) -> None: + def __init__(self, srcdir: str, builddir: str, opts: Sequence[str]) -> None: self.srcdir = srcdir self.builddir = builddir - self.opts = opts + self.opts = [*opts] self.makecmd = os.environ.get('MAKE', 'make') # refer $MAKE to determine make command def builddir_join(self, *comps: str) -> str: @@ -159,7 +163,7 @@ def run_generic_build(self, builder: str, doctreedir: str | None = None) -> int: return build_main(args + opts) -def run_make_mode(args: list[str]) -> int: +def run_make_mode(args: Sequence[str]) -> int: if len(args) < 3: print('Error: at least 3 arguments (builder, source ' 'dir, build dir) are required.', file=sys.stderr) diff --git a/sphinx/cmd/quickstart.py b/sphinx/cmd/quickstart.py index 83f25a88c25..89aec45ce78 100644 --- a/sphinx/cmd/quickstart.py +++ b/sphinx/cmd/quickstart.py @@ -41,6 +41,9 @@ from sphinx.util.osutil import ensuredir from sphinx.util.template import SphinxRenderer +if TYPE_CHECKING: + from collections.abc import Sequence + EXTENSIONS = { 'autodoc': __('automatically insert docstrings from modules'), 'doctest': __('automatically test code snippets in doctest blocks'), @@ -545,7 +548,7 @@ def get_parser() -> argparse.ArgumentParser: return parser -def main(argv: list[str], /) -> int: +def main(argv: Sequence[str] = (), /) -> int: locale.setlocale(locale.LC_ALL, '') sphinx.locale.init_console() @@ -555,7 +558,7 @@ def main(argv: list[str], /) -> int: # parse options parser = get_parser() try: - args = parser.parse_args(argv) + args = parser.parse_args(argv or sys.argv[1:]) except SystemExit as err: return err.code # type: ignore[return-value] diff --git a/sphinx/ext/apidoc.py b/sphinx/ext/apidoc.py index daa9cd35155..42df8482d79 100644 --- a/sphinx/ext/apidoc.py +++ b/sphinx/ext/apidoc.py @@ -409,13 +409,13 @@ def get_parser() -> argparse.ArgumentParser: return parser -def main(argv: list[str], /) -> int: +def main(argv: Sequence[str] = (), /) -> int: """Parse and check the command line arguments.""" locale.setlocale(locale.LC_ALL, '') sphinx.locale.init_console() parser = get_parser() - args = parser.parse_args(argv) + args = parser.parse_args(argv or sys.argv[1:]) rootpath = path.abspath(args.module_path) diff --git a/sphinx/ext/autosummary/generate.py b/sphinx/ext/autosummary/generate.py index b9f56d303d8..06814f9ba96 100644 --- a/sphinx/ext/autosummary/generate.py +++ b/sphinx/ext/autosummary/generate.py @@ -729,14 +729,14 @@ def get_parser() -> argparse.ArgumentParser: return parser -def main(argv: list[str], /) -> None: +def main(argv: Sequence[str] = (), /) -> None: locale.setlocale(locale.LC_ALL, '') sphinx.locale.init_console() app = DummyApplication(sphinx.locale.get_translator()) logging.setup(app, sys.stdout, sys.stderr) # type: ignore[arg-type] setup_documenters(app) - args = get_parser().parse_args(argv) + args = get_parser().parse_args(argv or sys.argv[1:]) if args.templates: app.config.templates_path.append(path.abspath(args.templates))