This is a Copier template that generates Python libraries. It is not a Python library itself.
copier.yml— template config, prompts, and post-generation tasks*.jinja— Jinja2 templates rendered by Copier duringcopier copy. Source templates live insrc/{{ package_name }}/andtests/.pyproject.toml(non-jinja) — only configurespython-semantic-releasefor template version bumps. No dev dependencies or test config — do not runuv sync --all-groupsoruv run pytesthere.pyproject.toml.jinja— the template that becomes the generated project'spyproject.toml.gitignoreexcludesuv.lock(line 345) — intentional for this template repo only
When users run copier copy --trust ..., the output project uses:
| Area | Tool |
|---|---|
| Package mgr | uv |
| Lint/format | ruff (via prek) |
| Type check | mypy + pyright |
| Test | pytest with coverage, xdist, randomly |
| Task runner | poethepoet (commands via uv run poe ...) |
| Pre-commit | prek (not raw pre-commit) |
| Docs | MkDocs Material + mkdocstrings |
| Releases | python-semantic-release (conventional commits) |
uv run poe test # pytest with coverage
uv run poe prek # prek run --all-files --show-diff-on-failure
uv run poe check # sync → prek → test
uv run poe docs-serve # mkdocs serve with live reload
uv run poe update # copier update --trust
uv run mypy src tests
uv run pyright- No tests exist for the template — do not attempt to run pytest
- Template version is bumped automatically via
.github/workflows/template-release.yml(on push tomain, usingpython-semantic-release) - Pre-commit hooks are configured in
.pre-commit-config.yamland run viaprek - Run
prek run --all-filesto lint/format template files - Edit
.jinjafiles to change generated project output - After changing
copier.ymlprompts, test withcopier copy --trust --vcs-ref=HEAD . /tmp/test-output— without--vcs-ref=HEAD, Copier uses the latest tag instead of the working tree
- 4-space indent for Python, 2-space for YAML (
.editorconfig) - Ruff config: line-length 100, double quotes, Google-style docstrings, isort with
combine-as-imports - Pytest in generated projects uses
--import-mode=importlib - Coverage
fail_under = 50in generated projects