[project] name = "copier" dynamic = ["version"] description = "A library for rendering project templates." license = { text = "MIT" } requires-python = ">=3.9" classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", ] authors = [{ name = "Ben Felder", email = "ben@felder.io" }] readme = "README.md" dependencies = [ "colorama>=0.4.6", "dunamai>=1.7.0", "funcy>=1.17", "jinja2>=3.1.5", "jinja2-ansible-filters>=1.3.1", "packaging>=23.0", "pathspec>=0.9.0", "plumbum>=1.6.9", "pydantic>=2.4.2", "pygments>=2.7.1", "pyyaml>=5.3.1", "questionary>=1.8.1", "eval-type-backport>=0.1.3,<0.3.0; python_version < '3.10'", "platformdirs>=4.3.6", "typing-extensions>=4.0.0,<5.0.0; python_version < '3.11'", ] [project.urls] homepage = "https://github.com/copier-org/copier" repository = "https://github.com/copier-org/copier" "Bug Tracker" = "https://github.com/copier-org/copier/issues" [project.scripts] copier = "copier.__main__:CopierApp.run" [dependency-groups] dev = [ "commitizen==4.6.0", "mypy==1.15.0", "pexpect==4.9.0", "poethepoet==0.34.0", "pre-commit==4.2.0", "pytest==8.3.5", "pytest-cov==6.1.1", "pytest-gitconfig==0.7.0", "pytest-xdist==3.6.1", "ruff==0.11.7", "taplo==0.9.3", "types-backports==0.1.3", "types-colorama==0.4.15.20240311", "types-pygments==2.19.0.20250305", "types-pyyaml==6.0.12.20250402", "typing-extensions==4.13.2; python_version < '<3.10'", ] docs = [ "markdown-exec==1.10.3", "mkdocs-material==9.6.12", "mkdocstrings[python]==0.29.1", ] [tool.poe.tasks.coverage] cmd = "pytest --cov-report html --cov copier copier tests" help = "generate an HTML report of the coverage" [tool.poe.tasks.dev-setup] script = "devtasks:dev_setup" help = "set up local development environment" [tool.poe.tasks.docs] cmd = "mkdocs serve" help = "start local docs server" [tool.poe.tasks.lint] script = "devtasks:lint" help = "check (and auto-fix) style with pre-commit" [tool.poe.tasks.test] cmd = "pytest --color=yes" help = "run tests" [tool.poe.tasks.types] cmd = "mypy ." help = "run the type (mypy) checker on the codebase" [tool.ruff.lint] extend-select = [ "ARG", "B", "C90", "D", "E", "F", "FA", "I", "PERF", "PGH", "PTH", "UP", ] extend-ignore = ['B028', "B904", "D105", "D107", "E501"] [tool.ruff.lint.per-file-ignores] "tests/**" = ["D"] [tool.ruff.lint.isort] combine-as-imports = true known-first-party = ["copier"] [tool.ruff.lint.pydocstyle] convention = "google" [tool.ruff.lint.pyupgrade] keep-runtime-typing = true [tool.mypy] strict = true plugins = ["pydantic.mypy"] [[tool.mypy.overrides]] module = [ "coverage.tracer", "funcy", "pexpect.*", "plumbum.*", "poethepoet.app", ] ignore_missing_imports = true [[tool.mypy.overrides]] module = [ "copier._subproject", "copier._template", "copier._tools", "copier._user_data", "copier._vcs", "copier.subproject", "copier.template", "copier.tools", "copier.user_data", "copier.vcs", ] warn_return_any = false [[tool.mypy.overrides]] module = ["tests.test_cli", "tests.test_prompt"] disable_error_code = ["no-untyped-def"] [tool.pytest.ini_options] addopts = "-n auto -ra" markers = ["impure: needs network or is not 100% reproducible"] [tool.coverage.run] omit = [ # Ignore deprecated modules "copier/cli.py", "copier/jinja_ext.py", "copier/main.py", "copier/subproject.py", "copier/template.py", "copier/tools.py", "copier/types.py", "copier/user_data.py", "copier/vcs.py", ] [tool.commitizen] annotated_tag = true changelog_incremental = true tag_format = "v$version" update_changelog_on_bump = true version = "9.7.1" [tool.hatch.version] source = "vcs" [build-system] requires = ["hatchling", "hatch-vcs"] build-backend = "hatchling.build"