refactor: rename internal modules with a _ prefix

This commit is contained in:
Sigurd Spieckermann 2025-04-03 20:17:52 +02:00 committed by Sigurd Spieckermann
parent b42a032f7b
commit ef5ea4b212
48 changed files with 101 additions and 91 deletions

View File

@ -5,7 +5,7 @@ Docs: https://copier.readthedocs.io/
import importlib.metadata import importlib.metadata
from .main import * # noqa: F401,F403 from ._main import * # noqa: F401,F403
try: try:
__version__ = importlib.metadata.version(__name__) __version__ = importlib.metadata.version(__name__)

View File

@ -1,6 +1,6 @@
"""Copier CLI entrypoint.""" """Copier CLI entrypoint."""
from .cli import CopierApp from ._cli import CopierApp
if __name__ == "__main__": if __name__ == "__main__":
CopierApp.run() CopierApp.run()

View File

@ -58,10 +58,10 @@ from typing import Any, Callable, Optional
import yaml import yaml
from plumbum import cli, colors from plumbum import cli, colors
from ._main import Worker
from ._tools import copier_version
from ._types import AnyByStrDict
from .errors import UnsafeTemplateError, UserMessageError from .errors import UnsafeTemplateError, UserMessageError
from .main import Worker
from .tools import copier_version
from .types import AnyByStrDict
def _handle_exceptions(method: Callable[[], None]) -> int: def _handle_exceptions(method: Callable[[], None]) -> int:

View File

@ -36,20 +36,10 @@ from pydantic.dataclasses import dataclass
from pydantic_core import to_jsonable_python from pydantic_core import to_jsonable_python
from questionary import confirm, unsafe_prompt from questionary import confirm, unsafe_prompt
from .errors import ( from ._jinja_ext import YieldEnvironment, YieldExtension
CopierAnswersInterrupt, from ._subproject import Subproject
ExtensionNotFoundError, from ._template import Task, Template
InteractiveSessionError, from ._tools import (
TaskError,
UnsafeTemplateError,
UserMessageError,
YieldTagInFileError,
)
from .jinja_ext import YieldEnvironment, YieldExtension
from .settings import Settings
from .subproject import Subproject
from .template import Task, Template
from .tools import (
OS, OS,
Style, Style,
cast_to_bool, cast_to_bool,
@ -59,7 +49,7 @@ from .tools import (
scantree, scantree,
set_git_alternates, set_git_alternates,
) )
from .types import ( from ._types import (
MISSING, MISSING,
AnyByStrDict, AnyByStrDict,
AnyByStrMutableMapping, AnyByStrMutableMapping,
@ -71,8 +61,18 @@ from .types import (
RelativePath, RelativePath,
StrOrPath, StrOrPath,
) )
from .user_data import AnswersMap, Question, load_answersfile_data from ._user_data import AnswersMap, Question, load_answersfile_data
from .vcs import get_git from ._vcs import get_git
from .errors import (
CopierAnswersInterrupt,
ExtensionNotFoundError,
InteractiveSessionError,
TaskError,
UnsafeTemplateError,
UserMessageError,
YieldTagInFileError,
)
from .settings import Settings
_T = TypeVar("_T") _T = TypeVar("_T")
_P = ParamSpec("_P") _P = ParamSpec("_P")

View File

@ -13,10 +13,10 @@ from typing import Callable
from plumbum.machines import local from plumbum.machines import local
from pydantic.dataclasses import dataclass from pydantic.dataclasses import dataclass
from .template import Template from ._template import Template
from .types import AbsolutePath, AnyByStrDict, VCSTypes from ._types import AbsolutePath, AnyByStrDict, VCSTypes
from .user_data import load_answersfile_data from ._user_data import load_answersfile_data
from .vcs import get_git, is_in_git_repo from ._vcs import get_git, is_in_git_repo
@dataclass @dataclass

View File

@ -22,6 +22,9 @@ from packaging.version import Version, parse
from plumbum.machines import local from plumbum.machines import local
from pydantic.dataclasses import dataclass from pydantic.dataclasses import dataclass
from ._tools import copier_version, handle_remove_readonly
from ._types import AnyByStrDict, VCSTypes
from ._vcs import checkout_latest_tag, clone, get_git, get_repo
from .errors import ( from .errors import (
InvalidConfigFileError, InvalidConfigFileError,
MultipleConfigFilesError, MultipleConfigFilesError,
@ -29,9 +32,6 @@ from .errors import (
UnknownCopierVersionWarning, UnknownCopierVersionWarning,
UnsupportedVersionError, UnsupportedVersionError,
) )
from .tools import copier_version, handle_remove_readonly
from .types import AnyByStrDict, VCSTypes
from .vcs import checkout_latest_tag, clone, get_git, get_repo
# Default list of files in the template to exclude from the rendered project # Default list of files in the template to exclude from the rendered project
DEFAULT_EXCLUDE: tuple[str, ...] = ( DEFAULT_EXCLUDE: tuple[str, ...] = (

View File

@ -229,7 +229,7 @@ def get_git_objects_dir(path: Path) -> Path:
"""Get the absolute path of a Git repository's objects directory.""" """Get the absolute path of a Git repository's objects directory."""
# FIXME: A lazy import is currently necessary to avoid circular imports with # FIXME: A lazy import is currently necessary to avoid circular imports with
# `errors.py`. # `errors.py`.
from .vcs import get_git from ._vcs import get_git
git = get_git() git = get_git()
return path.joinpath( return path.joinpath(

View File

@ -26,9 +26,8 @@ from questionary.prompts.common import Choice
from copier.settings import Settings from copier.settings import Settings
from .errors import InvalidTypeError, MissingFileWarning, UserMessageError from ._tools import cast_to_bool, cast_to_str, force_str_end
from .tools import cast_to_bool, cast_to_str, force_str_end from ._types import (
from .types import (
MISSING, MISSING,
AnyByStrDict, AnyByStrDict,
AnyByStrMutableMapping, AnyByStrMutableMapping,
@ -36,6 +35,7 @@ from .types import (
MissingType, MissingType,
StrOrPath, StrOrPath,
) )
from .errors import InvalidTypeError, MissingFileWarning, UserMessageError
# TODO Remove these two functions as well as DEFAULT_DATA in a future release # TODO Remove these two functions as well as DEFAULT_DATA in a future release

View File

@ -14,8 +14,8 @@ from packaging.version import InvalidVersion, Version
from plumbum import TF, ProcessExecutionError, colors, local from plumbum import TF, ProcessExecutionError, colors, local
from plumbum.machines import LocalCommand from plumbum.machines import LocalCommand
from ._types import OptBool, OptStrOrPath, StrOrPath
from .errors import DirtyLocalWarning, ShallowCloneWarning from .errors import DirtyLocalWarning, ShallowCloneWarning
from .types import OptBool, OptStrOrPath, StrOrPath
GIT_USER_NAME = "Copier" GIT_USER_NAME = "Copier"
GIT_USER_EMAIL = "copier@copier" GIT_USER_EMAIL = "copier@copier"

View File

@ -9,12 +9,12 @@ from pathlib import Path
from subprocess import CompletedProcess from subprocess import CompletedProcess
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from .tools import printf_exception from ._tools import printf_exception
from .types import PathSeq from ._types import PathSeq
if TYPE_CHECKING: # always false if TYPE_CHECKING: # always false
from .template import Template from ._template import Template
from .user_data import AnswersMap, Question from ._user_data import AnswersMap, Question
if sys.version_info < (3, 11): if sys.version_info < (3, 11):
from typing_extensions import Self from typing_extensions import Self

View File

@ -1 +1 @@
::: copier.cli ::: copier._cli

View File

@ -1 +1 @@
::: copier.jinja_ext ::: copier._jinja_ext

View File

@ -1 +1 @@
::: copier.main ::: copier._main

View File

@ -1 +1 @@
::: copier.subproject ::: copier._subproject

View File

@ -1 +1 @@
::: copier.template ::: copier._template

View File

@ -1 +1 @@
::: copier.tools ::: copier._tools

View File

@ -1 +1 @@
::: copier.types ::: copier._types

View File

@ -1 +1 @@
::: copier.user_data ::: copier._user_data

View File

@ -1 +1 @@
::: copier.vcs ::: copier._vcs

View File

@ -76,6 +76,10 @@
]; ];
prettier.enable = true; prettier.enable = true;
prettier.excludes = [ prettier.excludes = [
# Some API reference identifiers are dotted paths involving
# internal modules prefixed with `_` which are converted by
# Prettier to `\_`, making them invalid.
"^docs/reference/.+\.md$"
# Those files have wrong syntax and would fail # Those files have wrong syntax and would fail
"^tests/demo_invalid/copier.yml$" "^tests/demo_invalid/copier.yml$"
"^tests/demo_transclude_invalid(_multi)?/demo/copier.yml$" "^tests/demo_transclude_invalid(_multi)?/demo/copier.yml$"

View File

@ -135,6 +135,11 @@ ignore_missing_imports = true
[[tool.mypy.overrides]] [[tool.mypy.overrides]]
module = [ module = [
"copier._subproject",
"copier._template",
"copier._tools",
"copier._user_data",
"copier._vcs",
"copier.subproject", "copier.subproject",
"copier.template", "copier.template",
"copier.tools", "copier.tools",

View File

@ -20,7 +20,7 @@ from prompt_toolkit.keys import Keys
from pytest_gitconfig.plugin import DEFAULT_GIT_USER_EMAIL, DEFAULT_GIT_USER_NAME from pytest_gitconfig.plugin import DEFAULT_GIT_USER_EMAIL, DEFAULT_GIT_USER_NAME
import copier import copier
from copier.types import StrOrPath from copier._types import StrOrPath
PROJECT_TEMPLATE = Path(__file__).parent / "demo" PROJECT_TEMPLATE = Path(__file__).parent / "demo"

View File

@ -9,7 +9,7 @@ import pytest
import yaml import yaml
import copier import copier
from copier.user_data import load_answersfile_data from copier._user_data import load_answersfile_data
from .helpers import BRACKET_ENVOPS_JSON, SUFFIX_TMPL, build_file_tree, git_save from .helpers import BRACKET_ENVOPS_JSON, SUFFIX_TMPL, build_file_tree, git_save

View File

@ -5,7 +5,7 @@ from pathlib import Path
import pytest import pytest
import copier import copier
from copier.user_data import load_answersfile_data from copier._user_data import load_answersfile_data
from .helpers import build_file_tree from .helpers import build_file_tree

View File

@ -10,8 +10,8 @@ import pytest
import yaml import yaml
from plumbum import local from plumbum import local
from copier.cli import CopierApp from copier._cli import CopierApp
from copier.user_data import load_answersfile_data from copier._user_data import load_answersfile_data
from .helpers import COPIER_CMD, build_file_tree, git from .helpers import COPIER_CMD, build_file_tree, git

View File

@ -12,7 +12,7 @@ from pexpect.popen_spawn import PopenSpawn
from plumbum import local from plumbum import local
from copier import run_copy, run_update from copier import run_copy, run_update
from copier.user_data import load_answersfile_data from copier._user_data import load_answersfile_data
from .helpers import ( from .helpers import (
BRACKET_ENVOPS, BRACKET_ENVOPS,

View File

@ -10,9 +10,9 @@ from plumbum import local
from pydantic import ValidationError from pydantic import ValidationError
import copier import copier
from copier._template import DEFAULT_EXCLUDE, Task, Template, load_template_config
from copier._types import AnyByStrDict
from copier.errors import InvalidConfigFileError, MultipleConfigFilesError from copier.errors import InvalidConfigFileError, MultipleConfigFilesError
from copier.template import DEFAULT_EXCLUDE, Task, Template, load_template_config
from copier.types import AnyByStrDict
from .helpers import BRACKET_ENVOPS_JSON, SUFFIX_TMPL, build_file_tree, git_init from .helpers import BRACKET_ENVOPS_JSON, SUFFIX_TMPL, build_file_tree, git_init

View File

@ -18,7 +18,7 @@ from plumbum import local
import copier import copier
from copier import run_copy from copier import run_copy
from copier.types import AnyByStrDict from copier._types import AnyByStrDict
from .helpers import ( from .helpers import (
BRACKET_ENVOPS, BRACKET_ENVOPS,

View File

@ -6,8 +6,8 @@ from plumbum import local
from pytest_gitconfig.plugin import GitConfig from pytest_gitconfig.plugin import GitConfig
import copier import copier
from copier._main import run_copy, run_update
from copier.errors import DirtyLocalWarning from copier.errors import DirtyLocalWarning
from copier.main import run_copy, run_update
from .helpers import DATA, PROJECT_TEMPLATE, build_file_tree, git from .helpers import DATA, PROJECT_TEMPLATE, build_file_tree, git

View File

@ -4,9 +4,9 @@ from pathlib import Path
import pytest import pytest
from copier.main import run_copy from copier._main import run_copy
from copier.template import DEFAULT_EXCLUDE from copier._template import DEFAULT_EXCLUDE
from copier.types import StrOrPath from copier._types import StrOrPath
from .helpers import PROJECT_TEMPLATE, build_file_tree from .helpers import PROJECT_TEMPLATE, build_file_tree

View File

@ -2,7 +2,7 @@ import pytest
import yaml import yaml
import copier import copier
from copier.types import AnyByStrDict from copier._types import AnyByStrDict
from .helpers import build_file_tree from .helpers import build_file_tree

View File

@ -34,7 +34,7 @@ def test_keyboard_interrupt(
) )
worker = Worker(str(src), dst, defaults=False) worker = Worker(str(src), dst, defaults=False)
with patch("copier.main.unsafe_prompt", side_effect=side_effect): with patch("copier._main.unsafe_prompt", side_effect=side_effect):
with pytest.raises(KeyboardInterrupt): with pytest.raises(KeyboardInterrupt):
worker.run_copy() worker.run_copy()
@ -58,7 +58,7 @@ def test_multiple_questions_interrupt(tmp_path_factory: pytest.TempPathFactory)
worker = Worker(str(src), dst, defaults=False) worker = Worker(str(src), dst, defaults=False)
with patch( with patch(
"copier.main.unsafe_prompt", "copier._main.unsafe_prompt",
side_effect=[ side_effect=[
{"question1": "foobar"}, {"question1": "foobar"},
{"question2": "yosemite"}, {"question2": "yosemite"},

View File

@ -7,8 +7,8 @@ import pytest
from plumbum import local from plumbum import local
from copier import run_copy, run_update from copier import run_copy, run_update
from copier._user_data import load_answersfile_data
from copier.errors import UserMessageError from copier.errors import UserMessageError
from copier.user_data import load_answersfile_data
from .helpers import BRACKET_ENVOPS_JSON, PROJECT_TEMPLATE, build_file_tree, git from .helpers import BRACKET_ENVOPS_JSON, PROJECT_TEMPLATE, build_file_tree, git

View File

@ -4,8 +4,8 @@ import pytest
from plumbum import local from plumbum import local
from copier import run_copy, run_update from copier import run_copy, run_update
from copier._user_data import load_answersfile_data
from copier.errors import UnsafeTemplateError, UserMessageError from copier.errors import UnsafeTemplateError, UserMessageError
from copier.user_data import load_answersfile_data
from .helpers import ( from .helpers import (
COPIER_ANSWERS_FILE, COPIER_ANSWERS_FILE,

View File

@ -85,7 +85,7 @@ def test_minimum_version_update(
def test_version_0_0_0_ignored( def test_version_0_0_0_ignored(
template_path: str, tmp_path: Path, monkeypatch: pytest.MonkeyPatch template_path: str, tmp_path: Path, monkeypatch: pytest.MonkeyPatch
) -> None: ) -> None:
monkeypatch.setattr("copier.template.copier_version", lambda: Version("0.0.0")) monkeypatch.setattr("copier._template.copier_version", lambda: Version("0.0.0"))
# assert no error # assert no error
with warnings.catch_warnings(): with warnings.catch_warnings():
warnings.simplefilter("error") warnings.simplefilter("error")

View File

@ -5,8 +5,8 @@ import pexpect
import pytest import pytest
from plumbum import local from plumbum import local
from copier._main import run_copy, run_recopy, run_update
from copier.errors import InvalidTypeError from copier.errors import InvalidTypeError
from copier.main import run_copy, run_recopy, run_update
from .helpers import COPIER_PATH, Spawn, build_file_tree, expect_prompt, git, render from .helpers import COPIER_PATH, Spawn, build_file_tree, expect_prompt, git, render

View File

@ -13,8 +13,8 @@ import yaml
from pexpect.popen_spawn import PopenSpawn from pexpect.popen_spawn import PopenSpawn
from plumbum import local from plumbum import local
from copier.types import StrOrPath from copier._types import StrOrPath
from copier.user_data import load_answersfile_data from copier._user_data import load_answersfile_data
from .helpers import ( from .helpers import (
BRACKET_ENVOPS, BRACKET_ENVOPS,

View File

@ -5,9 +5,9 @@ import pytest
from plumbum import local from plumbum import local
from copier import run_copy, run_recopy from copier import run_copy, run_recopy
from copier.cli import CopierApp from copier._cli import CopierApp
from copier.user_data import load_answersfile_data from copier._user_data import load_answersfile_data
from copier.vcs import get_git from copier._vcs import get_git
from .helpers import build_file_tree, git_save from .helpers import build_file_tree, git_save

View File

@ -6,7 +6,7 @@ import pytest
from plumbum import local from plumbum import local
import copier import copier
from copier.user_data import load_answersfile_data from copier._user_data import load_answersfile_data
from .helpers import BRACKET_ENVOPS_JSON, SUFFIX_TMPL, build_file_tree, git, git_init from .helpers import BRACKET_ENVOPS_JSON, SUFFIX_TMPL, build_file_tree, git, git_init

View File

@ -7,7 +7,7 @@ import pytest
import yaml import yaml
import copier import copier
from copier.cli import CopierApp from copier._cli import CopierApp
from .helpers import BRACKET_ENVOPS_JSON, SUFFIX_TMPL, build_file_tree from .helpers import BRACKET_ENVOPS_JSON, SUFFIX_TMPL, build_file_tree
@ -161,7 +161,7 @@ def test_os_specific_tasks(
) )
} }
) )
monkeypatch.setattr("copier.main.OS", os) monkeypatch.setattr("copier._main.OS", os)
copier.run_copy(str(src), dst, unsafe=True) copier.run_copy(str(src), dst, unsafe=True)
assert (dst / filename).exists() assert (dst / filename).exists()

View File

@ -11,9 +11,9 @@ from pexpect.popen_spawn import PopenSpawn
from plumbum import local from plumbum import local
from copier import Worker from copier import Worker
from copier._types import AnyByStrDict
from copier._user_data import load_answersfile_data
from copier.errors import InvalidTypeError from copier.errors import InvalidTypeError
from copier.types import AnyByStrDict
from copier.user_data import load_answersfile_data
from .helpers import ( from .helpers import (
BRACKET_ENVOPS, BRACKET_ENVOPS,

View File

@ -2,8 +2,8 @@ from pathlib import Path
import pytest import pytest
from copier.cli import CopierApp from copier._cli import CopierApp
from copier.main import run_copy, run_recopy, run_update from copier._main import run_copy, run_recopy, run_update
from .helpers import build_file_tree, git from .helpers import build_file_tree, git

View File

@ -5,7 +5,7 @@ from tempfile import TemporaryDirectory
import pytest import pytest
from poethepoet.app import PoeThePoet from poethepoet.app import PoeThePoet
from copier.tools import normalize_git_path from copier._tools import normalize_git_path
from .helpers import git from .helpers import git

View File

@ -8,11 +8,11 @@ import yaml
from jinja2.ext import Extension from jinja2.ext import Extension
from plumbum import local from plumbum import local
from copier.cli import CopierApp from copier._cli import CopierApp
from copier._main import run_copy, run_update
from copier._types import AnyByStrDict
from copier._user_data import load_answersfile_data
from copier.errors import UnsafeTemplateError from copier.errors import UnsafeTemplateError
from copier.main import run_copy, run_update
from copier.types import AnyByStrDict
from copier.user_data import load_answersfile_data
from .helpers import build_file_tree, git from .helpers import build_file_tree, git

View File

@ -10,11 +10,11 @@ import pexpect
import pytest import pytest
from plumbum import local from plumbum import local
from copier.cli import CopierApp from copier._cli import CopierApp
from copier._main import Worker, run_copy, run_update
from copier._tools import normalize_git_path
from copier._user_data import load_answersfile_data
from copier.errors import UserMessageError from copier.errors import UserMessageError
from copier.main import Worker, run_copy, run_update
from copier.tools import normalize_git_path
from copier.user_data import load_answersfile_data
from .helpers import ( from .helpers import (
BRACKET_ENVOPS_JSON, BRACKET_ENVOPS_JSON,

View File

@ -8,10 +8,11 @@ import pytest
from packaging.version import Version from packaging.version import Version
from plumbum import local from plumbum import local
from copier import Worker, run_copy, run_update from copier import run_copy, run_update
from copier._main import Worker
from copier._user_data import load_answersfile_data
from copier._vcs import checkout_latest_tag, clone, get_git_version, get_repo
from copier.errors import ShallowCloneWarning from copier.errors import ShallowCloneWarning
from copier.user_data import load_answersfile_data
from copier.vcs import checkout_latest_tag, clone, get_git_version, get_repo
from .helpers import git from .helpers import git