mirror of
https://github.com/copier-org/copier.git
synced 2025-05-05 23:42:55 +00:00
This is redundant with pytest's native `tmp_path` fixture, so we use that one instead now.
44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
import filecmp
|
|
import os
|
|
import textwrap
|
|
from hashlib import sha1
|
|
from pathlib import Path
|
|
from typing import Dict
|
|
|
|
import copier
|
|
from copier.types import StrOrPath
|
|
|
|
PROJECT_TEMPLATE = Path(__file__).parent / "demo"
|
|
|
|
DATA = {
|
|
"py3": True,
|
|
"make_secret": lambda: sha1(os.urandom(48)).hexdigest(),
|
|
"myvar": "awesome",
|
|
"what": "world",
|
|
"project_name": "Copier",
|
|
"version": "2.0.0",
|
|
"description": "A library for rendering projects templates",
|
|
}
|
|
|
|
|
|
def render(tmp_path, **kwargs):
|
|
kwargs.setdefault("quiet", True)
|
|
copier.copy(str(PROJECT_TEMPLATE), tmp_path, data=DATA, **kwargs)
|
|
|
|
|
|
def assert_file(tmp_path, *path):
|
|
p1 = os.path.join(str(tmp_path), *path)
|
|
p2 = os.path.join(str(PROJECT_TEMPLATE), *path)
|
|
assert filecmp.cmp(p1, p2)
|
|
|
|
|
|
def build_file_tree(spec: Dict[StrOrPath, str], dedent: bool = True):
|
|
"""Builds a file tree based on the received spec."""
|
|
for path, contents in spec.items():
|
|
path = Path(path)
|
|
if dedent:
|
|
contents = textwrap.dedent(contents)
|
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
with path.open("w") as fd:
|
|
fd.write(contents)
|