Skip to content

Commit

Permalink
Split _parse_arguments into parts
Browse files Browse the repository at this point in the history
  • Loading branch information
AA-Turner committed Sep 20, 2023
1 parent cb0c6a3 commit 04a1ee0
Showing 1 changed file with 62 additions and 28 deletions.
90 changes: 62 additions & 28 deletions sphinx/cmd/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -213,78 +213,112 @@ def make_main(argv: Sequence[str]) -> int:
return make_mode.run_make_mode(argv[1:])


def _parse_arguments(argv: Sequence[str]) -> argparse.Namespace:
parser = get_parser()
def _parse_arguments(parser: argparse.ArgumentParser,
argv: Sequence[str]) -> argparse.Namespace:
args = parser.parse_args(argv)
return args


if args.noconfig:
args.confdir = None
elif not args.confdir:
args.confdir = args.sourcedir
def _parse_confdir(noconfig: bool, confdir: str, sourcedir: str) -> str | None:
if noconfig:
return None
elif not confdir:
return sourcedir
return confdir

if not args.doctreedir:
args.doctreedir = os.path.join(args.outputdir, '.doctrees')

if args.force_all and args.filenames:
def _parse_doctreedir(doctreedir: str, outputdir: str) -> str:
if doctreedir:
return doctreedir
return os.path.join(outputdir, '.doctrees')


def _validate_filenames(
parser: argparse.ArgumentParser, force_all: bool, filenames: list[str],
) -> None:
if force_all and filenames:
parser.error(__('cannot combine -a option and filenames'))

if args.color == 'no' or (args.color == 'auto' and not color_terminal()):

def _validate_colour_support(colour: str) -> None:
if colour == 'no' or (colour == 'auto' and not color_terminal()):
nocolor()


def _parse_logging(
parser: argparse.ArgumentParser,
quiet: bool,
really_quiet: bool,
warnfile: str | None,
) -> tuple[TextIO | None, TextIO | None, TextIO, TextIO | None]:
status: TextIO | None = sys.stdout
warning: TextIO | None = sys.stderr
error = sys.stderr

if args.quiet:
if quiet:
status = None

if args.really_quiet:
if really_quiet:
status = warning = None

if warning and args.warnfile:
warnfp = None
if warning and warnfile:
try:
warnfile = path.abspath(args.warnfile)
warnfile = path.abspath(warnfile)
ensuredir(path.dirname(warnfile))
warnfp = open(args.warnfile, 'w', encoding="utf-8") # NoQA: SIM115
warnfp = open(warnfile, 'w', encoding="utf-8") # NoQA: SIM115
except Exception as exc:
parser.error(__('cannot open warning file %r: %s') % (
args.warnfile, exc))
warnfile, exc))
warning = Tee(warning, warnfp) # type: ignore[assignment]
error = warning

args.status = status
args.warning = warning
args.error = error
return status, warning, error, warnfp


confoverrides = {}
for val in args.define:
def _parse_confoverrides(
parser: argparse.ArgumentParser,
define: list[str],
htmldefine: list[str],
nitpicky: bool,
) -> dict[str, Any]:
confoverrides: dict[str, Any] = {}
val: Any
for val in define:
try:
key, val = val.split('=', 1)
except ValueError:
parser.error(__('-D option argument must be in the form name=value'))
confoverrides[key] = val

for val in args.htmldefine:
for val in htmldefine:
try:
key, val = val.split('=')
except ValueError:
parser.error(__('-A option argument must be in the form name=value'))
with contextlib.suppress(ValueError):
val = int(val)

confoverrides['html_context.%s' % key] = val
confoverrides[f'html_context.{key}'] = val

if args.nitpicky:
if nitpicky:
confoverrides['nitpicky'] = True

args.confoverrides = confoverrides

return args
return confoverrides


def build_main(argv: Sequence[str]) -> int:
"""Sphinx build "main" command-line entry."""
args = _parse_arguments(argv)
parser = get_parser()
args = _parse_arguments(parser, argv)
args.confdir = _parse_confdir(args.noconfig, args.confdir, args.sourcedir)
args.doctreedir = _parse_doctreedir(args.doctreedir, args.outputdir)
_validate_filenames(parser, args.force_all, args.filenames)
_validate_colour_support(args.color)
args.status, args.warning, args.error, warnfp = _parse_logging(
parser, args.quiet, args.really_quiet, args.warnfile)
args.confoverrides = _parse_confoverrides(
parser, args.define, args.htmldefine, args.nitpicky)

app = None
try:
Expand Down

0 comments on commit 04a1ee0

Please sign in to comment.