Main
Copier Template Tester.
Based on: https://github.com/copier-org/copier/blob/ccfbc9a923f4228af7ca2bf067493665aa15d07c/tests/helpers.py#L20-L81
Attributes⚓︎
Classes⚓︎
Functions⚓︎
run ⚓︎
run(*, base_dir=None, check_untracked=False, continue_on_error=False)
Entry point.
Source code in copier_template_tester/main.py
def run(*, base_dir: Path | None = None, check_untracked: bool = False, continue_on_error: bool = False) -> None:
"""Entry point."""
base_dir = base_dir or Path.cwd()
try:
read_copier_template(base_dir=base_dir)
except FileNotFoundError:
message = f"Please add a '{DEFAULT_TEMPLATE_FILE_NAME}' file to '{base_dir}'"
logger.warning(message)
return
logger.text(f'Starting Copier Template Tester for {base_dir}')
logger.text('\tNote: If files were modified, pre-commit will report a failure.')
logger.text('')
config = load_config(base_dir)
defaults = config.get('defaults', {})
input_path = base_dir
paths = set()
reporter = RunReporter()
for key, data in config['output'].items():
output_path = base_dir / key
paths.add(output_path)
with group_context(key):
logger.text(f'Using `copier` to create: {key}')
data_with_defaults = defaults | data
post_tasks = _resolve_post_tasks(data_with_defaults)
pre_tasks = data_with_defaults.pop('_pre_tasks', [])
skip_tasks = data_with_defaults.pop('_skip_tasks', False)
try:
write_output(
src_path=input_path,
dst_path=base_dir / output_path,
data=data_with_defaults,
post_tasks=post_tasks,
pre_tasks=pre_tasks,
skip_tasks=skip_tasks,
)
if continue_on_error:
reporter.record_pass(key)
except Exception as err:
if not continue_on_error:
raise
reporter.record_failure(key, err)
if continue_on_error:
reporter.summary()
reporter.raise_if_any_failures()
if check_untracked: # pragma: no cover
check_for_untracked(base_dir)
run_cli ⚓︎
run_cli()
Accept CLI configuration for running ctt.
Source code in copier_template_tester/main.py
def run_cli() -> None: # pragma: no cover
"""Accept CLI configuration for running ctt."""
def dir_path(pth: str | None) -> Path:
if pth and Path(pth).is_dir():
return Path(pth).resolve()
msg = f'Expected a path to a directory. Received: `{pth}`'
raise ArgumentTypeError(msg)
cli = ArgumentParser()
cli.add_argument(
'-b',
'--base-dir',
help='Specify the path to the directory that contains the configuration file',
type=dir_path)
cli.add_argument('--check-untracked', help='Only used for pre-commit', action='store_true')
cli.add_argument('--continue-on-error', help='Run all test cases and print a summary', action='store_true')
args = cli.parse_args()
continue_on_error = args.continue_on_error or os.environ.get('CTT_CONTINUE_ON_ERROR') == '1'
run(base_dir=args.base_dir, check_untracked=args.check_untracked, continue_on_error=continue_on_error)