Use `_StrPath in sphinx.cmd.make_mode`

This commit is contained in:
Adam Turner 2024-10-25 23:06:19 +01:00
parent 2137d0d2eb
commit de24fd0b76
2 changed files with 29 additions and 21 deletions

View File

@ -13,11 +13,11 @@ import os
import subprocess
import sys
from contextlib import chdir
from os import path
from typing import TYPE_CHECKING
import sphinx
from sphinx.cmd.build import build_main
from sphinx.util._pathlib import _StrPath
from sphinx.util.console import blue, bold, color_terminal, nocolor
from sphinx.util.osutil import rmtree
@ -57,30 +57,36 @@ BUILDERS = [
class Make:
def __init__(self, *, source_dir: str, build_dir: str, opts: Sequence[str]) -> None:
self.source_dir = source_dir
self.build_dir = build_dir
def __init__(
self,
*,
source_dir: str | os.PathLike[str],
build_dir: str | os.PathLike[str],
opts: Sequence[str],
) -> None:
self.source_dir = _StrPath(source_dir)
self.build_dir = _StrPath(build_dir)
self.opts = [*opts]
def build_dir_join(self, *comps: str) -> str:
return path.join(self.build_dir, *comps)
def build_dir_join(self, *comps: str | os.PathLike[str]) -> _StrPath:
return self.build_dir.joinpath(*comps)
def build_clean(self) -> int:
source_dir = path.abspath(self.source_dir)
build_dir = path.abspath(self.build_dir)
if not path.exists(self.build_dir):
source_dir = self.source_dir.resolve()
build_dir = self.build_dir.resolve()
if not self.build_dir.exists():
return 0
elif not path.isdir(self.build_dir):
print('Error: %r is not a directory!' % self.build_dir)
elif not self.build_dir.is_dir():
print("Error: '%s' is not a directory!" % self.build_dir)
return 1
elif source_dir == build_dir:
print('Error: %r is same as source directory!' % self.build_dir)
print("Error: '%s' is same as source directory!" % self.build_dir)
return 1
elif path.commonpath([source_dir, build_dir]) == build_dir:
print('Error: %r directory contains source directory!' % self.build_dir)
elif source_dir.is_relative_to(build_dir):
print("Error: '%s' directory contains source directory!" % self.build_dir)
return 1
print('Removing everything under %r...' % self.build_dir)
for item in os.listdir(self.build_dir):
print("Removing everything under '%s'..." % self.build_dir)
for item in self.build_dir.iterdir():
rmtree(self.build_dir_join(item))
return 0
@ -179,7 +185,9 @@ class Make:
return 1
return 0
def run_generic_build(self, builder: str, doctreedir: str | None = None) -> int:
def run_generic_build(
self, builder: str, doctreedir: str | os.PathLike[str] | None = None
) -> int:
# compatibility with old Makefile
paper_size = os.getenv('PAPER', '')
if paper_size in {'a4', 'letter'}:
@ -191,9 +199,9 @@ class Make:
'--builder',
builder,
'--doctree-dir',
doctreedir,
self.source_dir,
self.build_dir_join(builder),
str(doctreedir),
str(self.source_dir),
str(self.build_dir_join(builder)),
]
return build_main(args + self.opts)

View File

@ -236,7 +236,7 @@ class FileAvoidWrite:
return getattr(self._io, name)
def rmtree(path: str) -> None:
def rmtree(path: str | os.PathLike[str], /) -> None:
if os.path.isdir(path):
shutil.rmtree(path)
else: