diff --git a/copier.yaml b/copier.yaml index c5125d5..1b88027 100644 --- a/copier.yaml +++ b/copier.yaml @@ -137,6 +137,16 @@ enable_docs: help: Enable documentation site (Zensical{% if project_visibility == 'public' %} with deployment to GitHub Pages{% endif %})? default: yes +enable_features: + type: str + qmark: 🧩 + help: Enable miscellaneous features? + multiselect: true + choices: + pytest-syrupy for snapshots: syrupy + pytest-xdist for multiprocessing: xdist + default: '["syrupy", "xdist"]' + user_name: type: str qmark: 🧑 diff --git a/includes/docs.jinja b/includes/docs.jinja index 98561a0..6e5392e 100644 --- a/includes/docs.jinja +++ b/includes/docs.jinja @@ -57,6 +57,17 @@ The `lint` and `test` tasks can also be run as a single combined command with: ```sh poe lt ``` +{%- if "syrupy" in enable_features %} + +### Test snapshots + +Some tests compare test results with saved snapshots. Test snapshots can be +updated by running: + +```sh +poe snapup +``` +{%- endif %} {%- if enable_docs %} {{h}}## Documentation server diff --git a/pyproject.toml b/pyproject.toml index 1d4a277..637d731 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,8 +47,8 @@ dev = [ "pytest-cov>=7", "pytest-sugar>=1", "pytest-xdist>=3", - "syrupy>=5", "ruff>=0.15", + "syrupy>=5", "ty>=0.0.37", ] docs = [ @@ -132,7 +132,7 @@ sequence = [ help = "Install project dependencies and git hooks" [tool.poe.tasks.snapup] -cmd = "pytest --snapshot-update" +cmd = "pytest --snapshot-update --numprocesses 0" help = "Update test snapshots" [tool.poe.tasks.test] @@ -169,7 +169,7 @@ executor = {isolated = true, python = "3.14"} help = "Run tests using Python 3.14" [tool.poe.tasks.ti] -cmd = "pytest -n 0 --no-cov -v" +cmd = "pytest --numprocesses 0 --no-cov -v" help = "Run tests with debug friendly options" [tool.pytest] @@ -178,7 +178,7 @@ addopts = [ "--cov=copier_python", "--strict-config", "--strict-markers", - "-n", + "--numprocesses", "auto", ] testpaths = ["tests"] diff --git a/template/pyproject.toml.jinja b/template/pyproject.toml.jinja index 4bc209a..0210cfe 100644 --- a/template/pyproject.toml.jinja +++ b/template/pyproject.toml.jinja @@ -52,8 +52,13 @@ dev = [ "pytest>=9", "pytest-cov>=7", "pytest-sugar>=1", +{%- if "xdist" in enable_features %} "pytest-xdist>=3", +{%- endif %} "ruff>=0.15", +{%- if "syrupy" in enable_features %} + "syrupy>=5", +{%- endif %} "ty>=0.0.37", ] {%- if enable_docs %} @@ -144,6 +149,12 @@ sequence = [ {cmd = "prek install"}, ] help = "Install project dependencies and git hooks" +{%- if "syrupy" in enable_features %} + +[tool.poe.tasks.snapup] +cmd = "pytest --snapshot-update{% if "xdist" in enable_features %} --numprocesses 0{% endif %}" +help = "Update test snapshots" +{%- endif %} [tool.poe.tasks.test] cmd = "pytest" @@ -163,7 +174,7 @@ executor = {isolated = true, python = "{{ v }}"} help = "Run tests using Python {{ v }}" {% endcall %} [tool.poe.tasks.ti] -cmd = "pytest -n 0 --no-cov -v" +cmd = "pytest --numprocesses 0 --no-cov -v" help = "Run tests with debug friendly options" [tool.pytest] @@ -172,8 +183,10 @@ addopts = [ "--cov={{ project_slug }}", "--strict-config", "--strict-markers", - "-n", +{%- if "xdist" in enable_features %} + "--numprocesses", "auto", +{%- endif %} ] testpaths = ["tests"] diff --git a/tests/__snapshots__/test_contributing.ambr b/tests/__snapshots__/test_contributing.ambr index fdaf94a..98f7c86 100644 --- a/tests/__snapshots__/test_contributing.ambr +++ b/tests/__snapshots__/test_contributing.ambr @@ -83,6 +83,15 @@ poe lt ``` + ### Test snapshots + + Some tests compare test results with saved snapshots. Test snapshots can be + updated by running: + + ```sh + poe snapup + ``` + ### Applying copier-python template updates Copier can update your project with template changes that have occurred since diff --git a/tests/__snapshots__/test_docs.ambr b/tests/__snapshots__/test_docs.ambr index 4a34821..6c962c8 100644 --- a/tests/__snapshots__/test_docs.ambr +++ b/tests/__snapshots__/test_docs.ambr @@ -1,5 +1,5 @@ # serializer version: 1 -# name: test_docs_development_features[no_pypi-private] +# name: test_docs_development_features[no_syrupy-no_pypi-private] ''' --- title: Required software @@ -28,7 +28,7 @@ ''' # --- -# name: test_docs_development_features[no_pypi-private].1 +# name: test_docs_development_features[no_syrupy-no_pypi-private].1 ''' --- title: Development workflow @@ -70,7 +70,7 @@ ''' # --- -# name: test_docs_development_features[no_pypi-private].2 +# name: test_docs_development_features[no_syrupy-no_pypi-private].2 ''' --- title: Template updates @@ -108,7 +108,7 @@ ''' # --- -# name: test_docs_development_features[no_pypi-public] +# name: test_docs_development_features[no_syrupy-no_pypi-public] ''' --- title: Required software @@ -137,7 +137,7 @@ ''' # --- -# name: test_docs_development_features[no_pypi-public].1 +# name: test_docs_development_features[no_syrupy-no_pypi-public].1 ''' --- title: Development workflow @@ -184,7 +184,7 @@ ''' # --- -# name: test_docs_development_features[no_pypi-public].2 +# name: test_docs_development_features[no_syrupy-no_pypi-public].2 ''' --- title: Template updates @@ -222,7 +222,7 @@ ''' # --- -# name: test_docs_development_features[pypi-private] +# name: test_docs_development_features[no_syrupy-pypi-private] ''' --- title: Required software @@ -251,7 +251,7 @@ ''' # --- -# name: test_docs_development_features[pypi-private].1 +# name: test_docs_development_features[no_syrupy-pypi-private].1 ''' --- title: Development workflow @@ -293,7 +293,7 @@ ''' # --- -# name: test_docs_development_features[pypi-private].2 +# name: test_docs_development_features[no_syrupy-pypi-private].2 ''' --- title: Template updates @@ -331,7 +331,7 @@ ''' # --- -# name: test_docs_development_features[pypi-public] +# name: test_docs_development_features[no_syrupy-pypi-public] ''' --- title: Required software @@ -360,7 +360,7 @@ ''' # --- -# name: test_docs_development_features[pypi-public].1 +# name: test_docs_development_features[no_syrupy-pypi-public].1 ''' --- title: Development workflow @@ -407,7 +407,489 @@ ''' # --- -# name: test_docs_development_features[pypi-public].2 +# name: test_docs_development_features[no_syrupy-pypi-public].2 + ''' + --- + title: Template updates + icon: lucide/git-merge + --- + + # Applying copier-python template updates + + Copier can update your project with template changes that have occurred since + the project was created. + + To apply updates, simply run in your project directory: + + ```sh + copier update + ``` + + This will repeat the setup prompts, in case any prompts have been added or + changed. + + !!! tip + To change template-provided features in your project, simply change your + answers in the update prompts. + + To apply updates without being prompted (reusing all previous answers), run: + + ```sh + copier update -l + ``` + + When [`copier update`][copier-update] is finished, view changes with + `git status` and `git diff`. Resolve any conflicts, and then commit the result. + + [copier-update]: https://copier.readthedocs.io/en/stable/updating/ + + ''' +# --- +# name: test_docs_development_features[syrupy-no_pypi-private] + ''' + --- + title: Required software + icon: lucide/bookmark-check + --- + + # Prerequisites + + - [x] A [supported version][python-versions] of [**Python**][python] + - [x] [**git** for verson control][git] + - [x] [Astral's **uv** Python project manager][uv]: `pip install uv` or + [other supported method][uv-installation] + - [x] [**Copier**][copier]: `uv tool install copier` + - [x] [Poe the Poet][poethepoet] (recommended): `uv tool install poethepoet` + + This provides `poe` without the `uv run` prefix, + e.g. `poe test` instead of `uv run poe test` + + [copier]: https://copier.readthedocs.io + [git]: https://git-scm.com + [poethepoet]: https://poethepoet.natn.io/ + [python-versions]: https://devguide.python.org/versions/ + [python]: https://python.org + [uv-installation]: https://docs.astral.sh/uv/getting-started/installation/ + [uv]: https://docs.astral.sh/uv/ + + ''' +# --- +# name: test_docs_development_features[syrupy-no_pypi-private].1 + ''' + --- + title: Development workflow + icon: lucide/braces + --- + + # Project development workflow + + ## Cloning the repository + + Run `poe setup` in new repository clones to enable git hooks: + + ```sh + poe setup # Enables git hooks + ``` + + ## Development tools + + * `poe lint`: Run formatters and static checks + * `poe test`: Run tests + + The `lint` and `test` tasks can also be run as a single combined command with: + + ```sh + poe lt + ``` + + ### Test snapshots + + Some tests compare test results with saved snapshots. Test snapshots can be + updated by running: + + ```sh + poe snapup + ``` + + ## Documentation server + + Start the development server with: + + ```sh + poe docs + ``` + + The documentation site will be served at ****. + + To use a different bind host/port, run `poe --help docs` for arguments info. + + ''' +# --- +# name: test_docs_development_features[syrupy-no_pypi-private].2 + ''' + --- + title: Template updates + icon: lucide/git-merge + --- + + # Applying copier-python template updates + + Copier can update your project with template changes that have occurred since + the project was created. + + To apply updates, simply run in your project directory: + + ```sh + copier update + ``` + + This will repeat the setup prompts, in case any prompts have been added or + changed. + + !!! tip + To change template-provided features in your project, simply change your + answers in the update prompts. + + To apply updates without being prompted (reusing all previous answers), run: + + ```sh + copier update -l + ``` + + When [`copier update`][copier-update] is finished, view changes with + `git status` and `git diff`. Resolve any conflicts, and then commit the result. + + [copier-update]: https://copier.readthedocs.io/en/stable/updating/ + + ''' +# --- +# name: test_docs_development_features[syrupy-no_pypi-public] + ''' + --- + title: Required software + icon: lucide/bookmark-check + --- + + # Prerequisites + + - [x] A [supported version][python-versions] of [**Python**][python] + - [x] [**git** for verson control][git] + - [x] [Astral's **uv** Python project manager][uv]: `pip install uv` or + [other supported method][uv-installation] + - [x] [**Copier**][copier]: `uv tool install copier` + - [x] [Poe the Poet][poethepoet] (recommended): `uv tool install poethepoet` + + This provides `poe` without the `uv run` prefix, + e.g. `poe test` instead of `uv run poe test` + + [copier]: https://copier.readthedocs.io + [git]: https://git-scm.com + [poethepoet]: https://poethepoet.natn.io/ + [python-versions]: https://devguide.python.org/versions/ + [python]: https://python.org + [uv-installation]: https://docs.astral.sh/uv/getting-started/installation/ + [uv]: https://docs.astral.sh/uv/ + + ''' +# --- +# name: test_docs_development_features[syrupy-no_pypi-public].1 + ''' + --- + title: Development workflow + icon: lucide/braces + --- + + # Project development workflow + + ## Cloning the repository + + ```sh + git clone https://github.com/ness/PKFire + cd PKFire + ``` + + Run `poe setup` in new repository clones to enable git hooks: + + ```sh + poe setup # Enables git hooks + ``` + + ## Development tools + + * `poe lint`: Run formatters and static checks + * `poe test`: Run tests + + The `lint` and `test` tasks can also be run as a single combined command with: + + ```sh + poe lt + ``` + + ### Test snapshots + + Some tests compare test results with saved snapshots. Test snapshots can be + updated by running: + + ```sh + poe snapup + ``` + + ## Documentation server + + Start the development server with: + + ```sh + poe docs + ``` + + The documentation site will be served at ****. + + To use a different bind host/port, run `poe --help docs` for arguments info. + + ''' +# --- +# name: test_docs_development_features[syrupy-no_pypi-public].2 + ''' + --- + title: Template updates + icon: lucide/git-merge + --- + + # Applying copier-python template updates + + Copier can update your project with template changes that have occurred since + the project was created. + + To apply updates, simply run in your project directory: + + ```sh + copier update + ``` + + This will repeat the setup prompts, in case any prompts have been added or + changed. + + !!! tip + To change template-provided features in your project, simply change your + answers in the update prompts. + + To apply updates without being prompted (reusing all previous answers), run: + + ```sh + copier update -l + ``` + + When [`copier update`][copier-update] is finished, view changes with + `git status` and `git diff`. Resolve any conflicts, and then commit the result. + + [copier-update]: https://copier.readthedocs.io/en/stable/updating/ + + ''' +# --- +# name: test_docs_development_features[syrupy-pypi-private] + ''' + --- + title: Required software + icon: lucide/bookmark-check + --- + + # Prerequisites + + - [x] A [supported version][python-versions] of [**Python**][python] + - [x] [**git** for verson control][git] + - [x] [Astral's **uv** Python project manager][uv]: `pip install uv` or + [other supported method][uv-installation] + - [x] [**Copier**][copier]: `uv tool install copier` + - [x] [Poe the Poet][poethepoet] (recommended): `uv tool install poethepoet` + + This provides `poe` without the `uv run` prefix, + e.g. `poe test` instead of `uv run poe test` + + [copier]: https://copier.readthedocs.io + [git]: https://git-scm.com + [poethepoet]: https://poethepoet.natn.io/ + [python-versions]: https://devguide.python.org/versions/ + [python]: https://python.org + [uv-installation]: https://docs.astral.sh/uv/getting-started/installation/ + [uv]: https://docs.astral.sh/uv/ + + ''' +# --- +# name: test_docs_development_features[syrupy-pypi-private].1 + ''' + --- + title: Development workflow + icon: lucide/braces + --- + + # Project development workflow + + ## Cloning the repository + + Run `poe setup` in new repository clones to enable git hooks: + + ```sh + poe setup # Enables git hooks + ``` + + ## Development tools + + * `poe lint`: Run formatters and static checks + * `poe test`: Run tests + + The `lint` and `test` tasks can also be run as a single combined command with: + + ```sh + poe lt + ``` + + ### Test snapshots + + Some tests compare test results with saved snapshots. Test snapshots can be + updated by running: + + ```sh + poe snapup + ``` + + ## Documentation server + + Start the development server with: + + ```sh + poe docs + ``` + + The documentation site will be served at ****. + + To use a different bind host/port, run `poe --help docs` for arguments info. + + ''' +# --- +# name: test_docs_development_features[syrupy-pypi-private].2 + ''' + --- + title: Template updates + icon: lucide/git-merge + --- + + # Applying copier-python template updates + + Copier can update your project with template changes that have occurred since + the project was created. + + To apply updates, simply run in your project directory: + + ```sh + copier update + ``` + + This will repeat the setup prompts, in case any prompts have been added or + changed. + + !!! tip + To change template-provided features in your project, simply change your + answers in the update prompts. + + To apply updates without being prompted (reusing all previous answers), run: + + ```sh + copier update -l + ``` + + When [`copier update`][copier-update] is finished, view changes with + `git status` and `git diff`. Resolve any conflicts, and then commit the result. + + [copier-update]: https://copier.readthedocs.io/en/stable/updating/ + + ''' +# --- +# name: test_docs_development_features[syrupy-pypi-public] + ''' + --- + title: Required software + icon: lucide/bookmark-check + --- + + # Prerequisites + + - [x] A [supported version][python-versions] of [**Python**][python] + - [x] [**git** for verson control][git] + - [x] [Astral's **uv** Python project manager][uv]: `pip install uv` or + [other supported method][uv-installation] + - [x] [**Copier**][copier]: `uv tool install copier` + - [x] [Poe the Poet][poethepoet] (recommended): `uv tool install poethepoet` + + This provides `poe` without the `uv run` prefix, + e.g. `poe test` instead of `uv run poe test` + + [copier]: https://copier.readthedocs.io + [git]: https://git-scm.com + [poethepoet]: https://poethepoet.natn.io/ + [python-versions]: https://devguide.python.org/versions/ + [python]: https://python.org + [uv-installation]: https://docs.astral.sh/uv/getting-started/installation/ + [uv]: https://docs.astral.sh/uv/ + + ''' +# --- +# name: test_docs_development_features[syrupy-pypi-public].1 + ''' + --- + title: Development workflow + icon: lucide/braces + --- + + # Project development workflow + + ## Cloning the repository + + ```sh + git clone https://github.com/ness/PKFire + cd PKFire + ``` + + Run `poe setup` in new repository clones to enable git hooks: + + ```sh + poe setup # Enables git hooks + ``` + + ## Development tools + + * `poe lint`: Run formatters and static checks + * `poe test`: Run tests + + The `lint` and `test` tasks can also be run as a single combined command with: + + ```sh + poe lt + ``` + + ### Test snapshots + + Some tests compare test results with saved snapshots. Test snapshots can be + updated by running: + + ```sh + poe snapup + ``` + + ## Documentation server + + Start the development server with: + + ```sh + poe docs + ``` + + The documentation site will be served at ****. + + To use a different bind host/port, run `poe --help docs` for arguments info. + + ''' +# --- +# name: test_docs_development_features[syrupy-pypi-public].2 ''' --- title: Template updates diff --git a/tests/__snapshots__/test_pyproject.ambr b/tests/__snapshots__/test_pyproject.ambr index 345575b..dffe5dc 100644 --- a/tests/__snapshots__/test_pyproject.ambr +++ b/tests/__snapshots__/test_pyproject.ambr @@ -1,5 +1,5001 @@ # serializer version: 1 -# name: test_pyproject_features[docs-3.10-private] +# name: test_pyproject_features[no_xdist-no_syrupy-docs-3.10-private] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.10" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "ruff>=0.15", + "ty>=0.0.37", + ] + docs = [ + "mkdocstrings[python]>=1", + "zensical>=0.0.42", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.docs-build] + cmd = "zensical build -c" + help = "Build documentation site" + + [tool.poe.tasks.docs] + sequence = [ + {ref = "docs-build"}, + {cmd = "zensical serve -a \"${host}:${port}\""}, + ] + help = "Run documentation site locally" + + [tool.poe.tasks.docs.args.host] + options = ['--host', '-h'] + help = "Bind IP" + default = "localhost" + + [tool.poe.tasks.docs.args.port] + positional = true + help = "Bind Port" + default = "8000" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py310", "test-py311", "test-py312", "test-py313", "test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py310] + cmd = "pytest" + executor = {isolated = true, python = "3.10"} + help = "Run tests using Python 3.10" + + [tool.poe.tasks.test-py311] + cmd = "pytest" + executor = {isolated = true, python = "3.11"} + help = "Run tests using Python 3.11" + + [tool.poe.tasks.test-py312] + cmd = "pytest" + executor = {isolated = true, python = "3.12"} + help = "Run tests using Python 3.12" + + [tool.poe.tasks.test-py313] + cmd = "pytest" + executor = {isolated = true, python = "3.13"} + help = "Run tests using Python 3.13" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py310" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev", "docs"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[no_xdist-no_syrupy-docs-3.10-public] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.10" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [project.urls] + Homepage = "https://ness.github.io/PKFire" + Repository = "https://github.com/ness/PKFire" + Issues = "https://github.com/ness/PKFire/issues" + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pysentry-rs>=0.4", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "ruff>=0.15", + "ty>=0.0.37", + ] + docs = [ + "mkdocstrings[python]>=1", + "zensical>=0.0.42", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.audit] + cmd = "pysentry-rs" + help = "Run dependencies security audit" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.docs-build] + cmd = "zensical build -c" + help = "Build documentation site" + + [tool.poe.tasks.docs] + sequence = [ + {ref = "docs-build"}, + {cmd = "zensical serve -a \"${host}:${port}\""}, + ] + help = "Run documentation site locally" + + [tool.poe.tasks.docs.args.host] + options = ['--host', '-h'] + help = "Bind IP" + default = "localhost" + + [tool.poe.tasks.docs.args.port] + positional = true + help = "Bind Port" + default = "8000" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git remote add origin https://github.com/ness/PKFire"}, + {cmd = "git config --local remote.origin.pushurl git@github.com:ness/PKFire.git"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py310", "test-py311", "test-py312", "test-py313", "test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py310] + cmd = "pytest" + executor = {isolated = true, python = "3.10"} + help = "Run tests using Python 3.10" + + [tool.poe.tasks.test-py311] + cmd = "pytest" + executor = {isolated = true, python = "3.11"} + help = "Run tests using Python 3.11" + + [tool.poe.tasks.test-py312] + cmd = "pytest" + executor = {isolated = true, python = "3.12"} + help = "Run tests using Python 3.12" + + [tool.poe.tasks.test-py313] + cmd = "pytest" + executor = {isolated = true, python = "3.13"} + help = "Run tests using Python 3.13" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py310" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev", "docs"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[no_xdist-no_syrupy-docs-3.14-private] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.14" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "ruff>=0.15", + "ty>=0.0.37", + ] + docs = [ + "mkdocstrings[python]>=1", + "zensical>=0.0.42", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.docs-build] + cmd = "zensical build -c" + help = "Build documentation site" + + [tool.poe.tasks.docs] + sequence = [ + {ref = "docs-build"}, + {cmd = "zensical serve -a \"${host}:${port}\""}, + ] + help = "Run documentation site locally" + + [tool.poe.tasks.docs.args.host] + options = ['--host', '-h'] + help = "Bind IP" + default = "localhost" + + [tool.poe.tasks.docs.args.port] + positional = true + help = "Bind Port" + default = "8000" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py314" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev", "docs"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[no_xdist-no_syrupy-docs-3.14-public] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.14" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [project.urls] + Homepage = "https://ness.github.io/PKFire" + Repository = "https://github.com/ness/PKFire" + Issues = "https://github.com/ness/PKFire/issues" + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pysentry-rs>=0.4", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "ruff>=0.15", + "ty>=0.0.37", + ] + docs = [ + "mkdocstrings[python]>=1", + "zensical>=0.0.42", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.audit] + cmd = "pysentry-rs" + help = "Run dependencies security audit" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.docs-build] + cmd = "zensical build -c" + help = "Build documentation site" + + [tool.poe.tasks.docs] + sequence = [ + {ref = "docs-build"}, + {cmd = "zensical serve -a \"${host}:${port}\""}, + ] + help = "Run documentation site locally" + + [tool.poe.tasks.docs.args.host] + options = ['--host', '-h'] + help = "Bind IP" + default = "localhost" + + [tool.poe.tasks.docs.args.port] + positional = true + help = "Bind Port" + default = "8000" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git remote add origin https://github.com/ness/PKFire"}, + {cmd = "git config --local remote.origin.pushurl git@github.com:ness/PKFire.git"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py314" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev", "docs"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[no_xdist-no_syrupy-no_docs-3.10-private] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.10" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "ruff>=0.15", + "ty>=0.0.37", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py310", "test-py311", "test-py312", "test-py313", "test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py310] + cmd = "pytest" + executor = {isolated = true, python = "3.10"} + help = "Run tests using Python 3.10" + + [tool.poe.tasks.test-py311] + cmd = "pytest" + executor = {isolated = true, python = "3.11"} + help = "Run tests using Python 3.11" + + [tool.poe.tasks.test-py312] + cmd = "pytest" + executor = {isolated = true, python = "3.12"} + help = "Run tests using Python 3.12" + + [tool.poe.tasks.test-py313] + cmd = "pytest" + executor = {isolated = true, python = "3.13"} + help = "Run tests using Python 3.13" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py310" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[no_xdist-no_syrupy-no_docs-3.10-public] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.10" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [project.urls] + Homepage = "https://github.com/ness/PKFire" + Repository = "https://github.com/ness/PKFire" + Issues = "https://github.com/ness/PKFire/issues" + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pysentry-rs>=0.4", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "ruff>=0.15", + "ty>=0.0.37", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.audit] + cmd = "pysentry-rs" + help = "Run dependencies security audit" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git remote add origin https://github.com/ness/PKFire"}, + {cmd = "git config --local remote.origin.pushurl git@github.com:ness/PKFire.git"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py310", "test-py311", "test-py312", "test-py313", "test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py310] + cmd = "pytest" + executor = {isolated = true, python = "3.10"} + help = "Run tests using Python 3.10" + + [tool.poe.tasks.test-py311] + cmd = "pytest" + executor = {isolated = true, python = "3.11"} + help = "Run tests using Python 3.11" + + [tool.poe.tasks.test-py312] + cmd = "pytest" + executor = {isolated = true, python = "3.12"} + help = "Run tests using Python 3.12" + + [tool.poe.tasks.test-py313] + cmd = "pytest" + executor = {isolated = true, python = "3.13"} + help = "Run tests using Python 3.13" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py310" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[no_xdist-no_syrupy-no_docs-3.14-private] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.14" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "ruff>=0.15", + "ty>=0.0.37", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py314" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[no_xdist-no_syrupy-no_docs-3.14-public] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.14" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [project.urls] + Homepage = "https://github.com/ness/PKFire" + Repository = "https://github.com/ness/PKFire" + Issues = "https://github.com/ness/PKFire/issues" + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pysentry-rs>=0.4", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "ruff>=0.15", + "ty>=0.0.37", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.audit] + cmd = "pysentry-rs" + help = "Run dependencies security audit" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git remote add origin https://github.com/ness/PKFire"}, + {cmd = "git config --local remote.origin.pushurl git@github.com:ness/PKFire.git"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py314" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[no_xdist-syrupy-docs-3.10-private] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.10" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "ruff>=0.15", + "syrupy>=5", + "ty>=0.0.37", + ] + docs = [ + "mkdocstrings[python]>=1", + "zensical>=0.0.42", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.docs-build] + cmd = "zensical build -c" + help = "Build documentation site" + + [tool.poe.tasks.docs] + sequence = [ + {ref = "docs-build"}, + {cmd = "zensical serve -a \"${host}:${port}\""}, + ] + help = "Run documentation site locally" + + [tool.poe.tasks.docs.args.host] + options = ['--host', '-h'] + help = "Bind IP" + default = "localhost" + + [tool.poe.tasks.docs.args.port] + positional = true + help = "Bind Port" + default = "8000" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update" + help = "Update test snapshots" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py310", "test-py311", "test-py312", "test-py313", "test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py310] + cmd = "pytest" + executor = {isolated = true, python = "3.10"} + help = "Run tests using Python 3.10" + + [tool.poe.tasks.test-py311] + cmd = "pytest" + executor = {isolated = true, python = "3.11"} + help = "Run tests using Python 3.11" + + [tool.poe.tasks.test-py312] + cmd = "pytest" + executor = {isolated = true, python = "3.12"} + help = "Run tests using Python 3.12" + + [tool.poe.tasks.test-py313] + cmd = "pytest" + executor = {isolated = true, python = "3.13"} + help = "Run tests using Python 3.13" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py310" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev", "docs"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[no_xdist-syrupy-docs-3.10-public] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.10" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [project.urls] + Homepage = "https://ness.github.io/PKFire" + Repository = "https://github.com/ness/PKFire" + Issues = "https://github.com/ness/PKFire/issues" + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pysentry-rs>=0.4", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "ruff>=0.15", + "syrupy>=5", + "ty>=0.0.37", + ] + docs = [ + "mkdocstrings[python]>=1", + "zensical>=0.0.42", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.audit] + cmd = "pysentry-rs" + help = "Run dependencies security audit" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.docs-build] + cmd = "zensical build -c" + help = "Build documentation site" + + [tool.poe.tasks.docs] + sequence = [ + {ref = "docs-build"}, + {cmd = "zensical serve -a \"${host}:${port}\""}, + ] + help = "Run documentation site locally" + + [tool.poe.tasks.docs.args.host] + options = ['--host', '-h'] + help = "Bind IP" + default = "localhost" + + [tool.poe.tasks.docs.args.port] + positional = true + help = "Bind Port" + default = "8000" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git remote add origin https://github.com/ness/PKFire"}, + {cmd = "git config --local remote.origin.pushurl git@github.com:ness/PKFire.git"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update" + help = "Update test snapshots" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py310", "test-py311", "test-py312", "test-py313", "test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py310] + cmd = "pytest" + executor = {isolated = true, python = "3.10"} + help = "Run tests using Python 3.10" + + [tool.poe.tasks.test-py311] + cmd = "pytest" + executor = {isolated = true, python = "3.11"} + help = "Run tests using Python 3.11" + + [tool.poe.tasks.test-py312] + cmd = "pytest" + executor = {isolated = true, python = "3.12"} + help = "Run tests using Python 3.12" + + [tool.poe.tasks.test-py313] + cmd = "pytest" + executor = {isolated = true, python = "3.13"} + help = "Run tests using Python 3.13" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py310" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev", "docs"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[no_xdist-syrupy-docs-3.14-private] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.14" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "ruff>=0.15", + "syrupy>=5", + "ty>=0.0.37", + ] + docs = [ + "mkdocstrings[python]>=1", + "zensical>=0.0.42", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.docs-build] + cmd = "zensical build -c" + help = "Build documentation site" + + [tool.poe.tasks.docs] + sequence = [ + {ref = "docs-build"}, + {cmd = "zensical serve -a \"${host}:${port}\""}, + ] + help = "Run documentation site locally" + + [tool.poe.tasks.docs.args.host] + options = ['--host', '-h'] + help = "Bind IP" + default = "localhost" + + [tool.poe.tasks.docs.args.port] + positional = true + help = "Bind Port" + default = "8000" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update" + help = "Update test snapshots" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py314" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev", "docs"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[no_xdist-syrupy-docs-3.14-public] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.14" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [project.urls] + Homepage = "https://ness.github.io/PKFire" + Repository = "https://github.com/ness/PKFire" + Issues = "https://github.com/ness/PKFire/issues" + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pysentry-rs>=0.4", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "ruff>=0.15", + "syrupy>=5", + "ty>=0.0.37", + ] + docs = [ + "mkdocstrings[python]>=1", + "zensical>=0.0.42", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.audit] + cmd = "pysentry-rs" + help = "Run dependencies security audit" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.docs-build] + cmd = "zensical build -c" + help = "Build documentation site" + + [tool.poe.tasks.docs] + sequence = [ + {ref = "docs-build"}, + {cmd = "zensical serve -a \"${host}:${port}\""}, + ] + help = "Run documentation site locally" + + [tool.poe.tasks.docs.args.host] + options = ['--host', '-h'] + help = "Bind IP" + default = "localhost" + + [tool.poe.tasks.docs.args.port] + positional = true + help = "Bind Port" + default = "8000" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git remote add origin https://github.com/ness/PKFire"}, + {cmd = "git config --local remote.origin.pushurl git@github.com:ness/PKFire.git"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update" + help = "Update test snapshots" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py314" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev", "docs"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[no_xdist-syrupy-no_docs-3.10-private] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.10" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "ruff>=0.15", + "syrupy>=5", + "ty>=0.0.37", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update" + help = "Update test snapshots" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py310", "test-py311", "test-py312", "test-py313", "test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py310] + cmd = "pytest" + executor = {isolated = true, python = "3.10"} + help = "Run tests using Python 3.10" + + [tool.poe.tasks.test-py311] + cmd = "pytest" + executor = {isolated = true, python = "3.11"} + help = "Run tests using Python 3.11" + + [tool.poe.tasks.test-py312] + cmd = "pytest" + executor = {isolated = true, python = "3.12"} + help = "Run tests using Python 3.12" + + [tool.poe.tasks.test-py313] + cmd = "pytest" + executor = {isolated = true, python = "3.13"} + help = "Run tests using Python 3.13" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py310" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[no_xdist-syrupy-no_docs-3.10-public] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.10" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [project.urls] + Homepage = "https://github.com/ness/PKFire" + Repository = "https://github.com/ness/PKFire" + Issues = "https://github.com/ness/PKFire/issues" + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pysentry-rs>=0.4", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "ruff>=0.15", + "syrupy>=5", + "ty>=0.0.37", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.audit] + cmd = "pysentry-rs" + help = "Run dependencies security audit" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git remote add origin https://github.com/ness/PKFire"}, + {cmd = "git config --local remote.origin.pushurl git@github.com:ness/PKFire.git"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update" + help = "Update test snapshots" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py310", "test-py311", "test-py312", "test-py313", "test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py310] + cmd = "pytest" + executor = {isolated = true, python = "3.10"} + help = "Run tests using Python 3.10" + + [tool.poe.tasks.test-py311] + cmd = "pytest" + executor = {isolated = true, python = "3.11"} + help = "Run tests using Python 3.11" + + [tool.poe.tasks.test-py312] + cmd = "pytest" + executor = {isolated = true, python = "3.12"} + help = "Run tests using Python 3.12" + + [tool.poe.tasks.test-py313] + cmd = "pytest" + executor = {isolated = true, python = "3.13"} + help = "Run tests using Python 3.13" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py310" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[no_xdist-syrupy-no_docs-3.14-private] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.14" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "ruff>=0.15", + "syrupy>=5", + "ty>=0.0.37", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update" + help = "Update test snapshots" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py314" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[no_xdist-syrupy-no_docs-3.14-public] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.14" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [project.urls] + Homepage = "https://github.com/ness/PKFire" + Repository = "https://github.com/ness/PKFire" + Issues = "https://github.com/ness/PKFire/issues" + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pysentry-rs>=0.4", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "ruff>=0.15", + "syrupy>=5", + "ty>=0.0.37", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.audit] + cmd = "pysentry-rs" + help = "Run dependencies security audit" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git remote add origin https://github.com/ness/PKFire"}, + {cmd = "git config --local remote.origin.pushurl git@github.com:ness/PKFire.git"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update" + help = "Update test snapshots" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py314" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[xdist-no_syrupy-docs-3.10-private] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.10" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "pytest-xdist>=3", + "ruff>=0.15", + "ty>=0.0.37", + ] + docs = [ + "mkdocstrings[python]>=1", + "zensical>=0.0.42", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.docs-build] + cmd = "zensical build -c" + help = "Build documentation site" + + [tool.poe.tasks.docs] + sequence = [ + {ref = "docs-build"}, + {cmd = "zensical serve -a \"${host}:${port}\""}, + ] + help = "Run documentation site locally" + + [tool.poe.tasks.docs.args.host] + options = ['--host', '-h'] + help = "Bind IP" + default = "localhost" + + [tool.poe.tasks.docs.args.port] + positional = true + help = "Bind Port" + default = "8000" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py310", "test-py311", "test-py312", "test-py313", "test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py310] + cmd = "pytest" + executor = {isolated = true, python = "3.10"} + help = "Run tests using Python 3.10" + + [tool.poe.tasks.test-py311] + cmd = "pytest" + executor = {isolated = true, python = "3.11"} + help = "Run tests using Python 3.11" + + [tool.poe.tasks.test-py312] + cmd = "pytest" + executor = {isolated = true, python = "3.12"} + help = "Run tests using Python 3.12" + + [tool.poe.tasks.test-py313] + cmd = "pytest" + executor = {isolated = true, python = "3.13"} + help = "Run tests using Python 3.13" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + "--numprocesses", + "auto", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py310" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev", "docs"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[xdist-no_syrupy-docs-3.10-public] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.10" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [project.urls] + Homepage = "https://ness.github.io/PKFire" + Repository = "https://github.com/ness/PKFire" + Issues = "https://github.com/ness/PKFire/issues" + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pysentry-rs>=0.4", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "pytest-xdist>=3", + "ruff>=0.15", + "ty>=0.0.37", + ] + docs = [ + "mkdocstrings[python]>=1", + "zensical>=0.0.42", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.audit] + cmd = "pysentry-rs" + help = "Run dependencies security audit" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.docs-build] + cmd = "zensical build -c" + help = "Build documentation site" + + [tool.poe.tasks.docs] + sequence = [ + {ref = "docs-build"}, + {cmd = "zensical serve -a \"${host}:${port}\""}, + ] + help = "Run documentation site locally" + + [tool.poe.tasks.docs.args.host] + options = ['--host', '-h'] + help = "Bind IP" + default = "localhost" + + [tool.poe.tasks.docs.args.port] + positional = true + help = "Bind Port" + default = "8000" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git remote add origin https://github.com/ness/PKFire"}, + {cmd = "git config --local remote.origin.pushurl git@github.com:ness/PKFire.git"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py310", "test-py311", "test-py312", "test-py313", "test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py310] + cmd = "pytest" + executor = {isolated = true, python = "3.10"} + help = "Run tests using Python 3.10" + + [tool.poe.tasks.test-py311] + cmd = "pytest" + executor = {isolated = true, python = "3.11"} + help = "Run tests using Python 3.11" + + [tool.poe.tasks.test-py312] + cmd = "pytest" + executor = {isolated = true, python = "3.12"} + help = "Run tests using Python 3.12" + + [tool.poe.tasks.test-py313] + cmd = "pytest" + executor = {isolated = true, python = "3.13"} + help = "Run tests using Python 3.13" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + "--numprocesses", + "auto", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py310" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev", "docs"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[xdist-no_syrupy-docs-3.14-private] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.14" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "pytest-xdist>=3", + "ruff>=0.15", + "ty>=0.0.37", + ] + docs = [ + "mkdocstrings[python]>=1", + "zensical>=0.0.42", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.docs-build] + cmd = "zensical build -c" + help = "Build documentation site" + + [tool.poe.tasks.docs] + sequence = [ + {ref = "docs-build"}, + {cmd = "zensical serve -a \"${host}:${port}\""}, + ] + help = "Run documentation site locally" + + [tool.poe.tasks.docs.args.host] + options = ['--host', '-h'] + help = "Bind IP" + default = "localhost" + + [tool.poe.tasks.docs.args.port] + positional = true + help = "Bind Port" + default = "8000" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + "--numprocesses", + "auto", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py314" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev", "docs"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[xdist-no_syrupy-docs-3.14-public] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.14" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [project.urls] + Homepage = "https://ness.github.io/PKFire" + Repository = "https://github.com/ness/PKFire" + Issues = "https://github.com/ness/PKFire/issues" + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pysentry-rs>=0.4", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "pytest-xdist>=3", + "ruff>=0.15", + "ty>=0.0.37", + ] + docs = [ + "mkdocstrings[python]>=1", + "zensical>=0.0.42", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.audit] + cmd = "pysentry-rs" + help = "Run dependencies security audit" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.docs-build] + cmd = "zensical build -c" + help = "Build documentation site" + + [tool.poe.tasks.docs] + sequence = [ + {ref = "docs-build"}, + {cmd = "zensical serve -a \"${host}:${port}\""}, + ] + help = "Run documentation site locally" + + [tool.poe.tasks.docs.args.host] + options = ['--host', '-h'] + help = "Bind IP" + default = "localhost" + + [tool.poe.tasks.docs.args.port] + positional = true + help = "Bind Port" + default = "8000" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git remote add origin https://github.com/ness/PKFire"}, + {cmd = "git config --local remote.origin.pushurl git@github.com:ness/PKFire.git"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + "--numprocesses", + "auto", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py314" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev", "docs"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[xdist-no_syrupy-no_docs-3.10-private] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.10" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "pytest-xdist>=3", + "ruff>=0.15", + "ty>=0.0.37", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py310", "test-py311", "test-py312", "test-py313", "test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py310] + cmd = "pytest" + executor = {isolated = true, python = "3.10"} + help = "Run tests using Python 3.10" + + [tool.poe.tasks.test-py311] + cmd = "pytest" + executor = {isolated = true, python = "3.11"} + help = "Run tests using Python 3.11" + + [tool.poe.tasks.test-py312] + cmd = "pytest" + executor = {isolated = true, python = "3.12"} + help = "Run tests using Python 3.12" + + [tool.poe.tasks.test-py313] + cmd = "pytest" + executor = {isolated = true, python = "3.13"} + help = "Run tests using Python 3.13" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + "--numprocesses", + "auto", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py310" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[xdist-no_syrupy-no_docs-3.10-public] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.10" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [project.urls] + Homepage = "https://github.com/ness/PKFire" + Repository = "https://github.com/ness/PKFire" + Issues = "https://github.com/ness/PKFire/issues" + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pysentry-rs>=0.4", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "pytest-xdist>=3", + "ruff>=0.15", + "ty>=0.0.37", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.audit] + cmd = "pysentry-rs" + help = "Run dependencies security audit" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git remote add origin https://github.com/ness/PKFire"}, + {cmd = "git config --local remote.origin.pushurl git@github.com:ness/PKFire.git"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py310", "test-py311", "test-py312", "test-py313", "test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py310] + cmd = "pytest" + executor = {isolated = true, python = "3.10"} + help = "Run tests using Python 3.10" + + [tool.poe.tasks.test-py311] + cmd = "pytest" + executor = {isolated = true, python = "3.11"} + help = "Run tests using Python 3.11" + + [tool.poe.tasks.test-py312] + cmd = "pytest" + executor = {isolated = true, python = "3.12"} + help = "Run tests using Python 3.12" + + [tool.poe.tasks.test-py313] + cmd = "pytest" + executor = {isolated = true, python = "3.13"} + help = "Run tests using Python 3.13" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + "--numprocesses", + "auto", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py310" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[xdist-no_syrupy-no_docs-3.14-private] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.14" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "pytest-xdist>=3", + "ruff>=0.15", + "ty>=0.0.37", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + "--numprocesses", + "auto", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py314" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[xdist-no_syrupy-no_docs-3.14-public] + ''' + [build-system] + requires = ["hatchling", "uv-dynamic-versioning"] + build-backend = "hatchling.build" + + [project] + name = "PKFire" + dynamic = ["version"] + description = "Onett Little League" + readme = "README.md" + license = "MIT" + license-files = ["LICENSE"] + requires-python = ">=3.14" + authors = [ + { name = "Ness", email = "ness@onett.example.com" }, + ] + classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.14", + "Topic :: Documentation", + "Topic :: Software Development", + "Topic :: Utilities", + "Typing :: Typed", + ] + keywords = [] + dependencies = [] + + [project.urls] + Homepage = "https://github.com/ness/PKFire" + Repository = "https://github.com/ness/PKFire" + Issues = "https://github.com/ness/PKFire/issues" + + [dependency-groups] + dev = [ + "bump-my-version>=1.3.0", + "poethepoet>=0.42", + "prek>=0.3", + "pysentry-rs>=0.4", + "pytest>=9", + "pytest-cov>=7", + "pytest-sugar>=1", + "pytest-xdist>=3", + "ruff>=0.15", + "ty>=0.0.37", + ] + + [tool.bumpversion] + commit = false + tag = true + tag_name = "v{new_version}" + tag_message = "" + push = true + + [tool.hatch.build.targets.sdist] + include = ["/pkfire", "/tests", "*.md", "LICENSE"] + + [tool.hatch.version] + source = "uv-dynamic-versioning" + + [tool.poe.executor] + type = "uv" + + [tool.poe.tasks.audit] + cmd = "pysentry-rs" + help = "Run dependencies security audit" + + [tool.poe.tasks.build] + cmd = "uv build" + help = "Build distribution package" + + [tool.poe.tasks.init] + sequence = [ + {shell = "[ ! -d .git ] || { echo \"git repository already exists\"; exit 1; }"}, + {cmd = "git init"}, + {ref = "setup"}, + {cmd = "git remote add origin https://github.com/ness/PKFire"}, + {cmd = "git config --local remote.origin.pushurl git@github.com:ness/PKFire.git"}, + {cmd = "git add ."}, + {cmd = "git commit -m 'Create project from template'"}, + ] + help = "Initialize git repository once on project creation" + + [tool.poe.tasks.lint] + cmd = "prek run --all-files" + help = "Run all formatters and static checks" + + [tool.poe.tasks.lt] + sequence = [{ref = "lint"}, {ref = "test"}] + help = "Run all formatters, static checks and tests" + + [tool.poe.tasks.release] + cmd = "bump-my-version bump -v" + help = "Create and push a release tag (patch/minor/major)" + + [tool.poe.tasks.setup] + sequence = [ + {cmd = "uv sync"}, + {cmd = "prek install"}, + ] + help = "Install project dependencies and git hooks" + + [tool.poe.tasks.test] + cmd = "pytest" + help = "Run tests" + + [tool.poe.tasks.test-versions] + sequence = ["test-py314"] + help = "Run tests across all Python versions" + + [tool.poe.tasks.test-py314] + cmd = "pytest" + executor = {isolated = true, python = "3.14"} + help = "Run tests using Python 3.14" + + [tool.poe.tasks.ti] + cmd = "pytest --numprocesses 0 --no-cov -v" + help = "Run tests with debug friendly options" + + [tool.pytest] + addopts = [ + "-ra", + "--cov=pkfire", + "--strict-config", + "--strict-markers", + "--numprocesses", + "auto", + ] + testpaths = ["tests"] + + [tool.coverage.run] + source = ["pkfire"] + branch = true + + [tool.coverage.report] + show_missing = true + skip_covered = true + exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", + "@abstractmethod", + ] + + [tool.ruff] + line-length = 79 + output-format = "concise" + target-version = "py314" + + [tool.ruff.lint] + select = ["ALL"] + ignore = [ + "ANN401", # Dynamically typed expressions (typing.Any) are disallowed + "COM812", # Trailing comma missing + "D1", # Missing docstring presence rules + "EM", # flake8-errmsg + "G004", # Logging statement uses f-string + "PLR", # pylint Refactor + "S607", # Starting a process with a partial executable path + "TD", # flake8-todos + "TRY003", # Avoid specifying long messages outside the exception class + ] + + [tool.ruff.lint.isort] + known-first-party = ["pkfire"] + + [tool.ruff.lint.per-file-ignores] + "tests/**/*.py" = [ + "ARG", # flake8-unused-arguments + "S101", # Use of assert detected + ] + + [tool.ruff.lint.pydocstyle] + convention = "google" + + [tool.ty.terminal] + error-on-warning = true + output-format = "concise" + + [tool.uv] + default-groups = ["dev"] + + [tool.uv-dynamic-versioning] + pattern = "default-unprefixed" + fallback-version = "0.0.0" + + ''' +# --- +# name: test_pyproject_features[xdist-syrupy-docs-3.10-private] ''' [build-system] requires = ["hatchling", "uv-dynamic-versioning"] @@ -44,6 +5040,7 @@ "pytest-sugar>=1", "pytest-xdist>=3", "ruff>=0.15", + "syrupy>=5", "ty>=0.0.37", ] docs = [ @@ -121,6 +5118,10 @@ ] help = "Install project dependencies and git hooks" + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update --numprocesses 0" + help = "Update test snapshots" + [tool.poe.tasks.test] cmd = "pytest" help = "Run tests" @@ -155,7 +5156,7 @@ help = "Run tests using Python 3.14" [tool.poe.tasks.ti] - cmd = "pytest -n 0 --no-cov -v" + cmd = "pytest --numprocesses 0 --no-cov -v" help = "Run tests with debug friendly options" [tool.pytest] @@ -164,7 +5165,7 @@ "--cov=pkfire", "--strict-config", "--strict-markers", - "-n", + "--numprocesses", "auto", ] testpaths = ["tests"] @@ -226,7 +5227,7 @@ ''' # --- -# name: test_pyproject_features[docs-3.10-public] +# name: test_pyproject_features[xdist-syrupy-docs-3.10-public] ''' [build-system] requires = ["hatchling", "uv-dynamic-versioning"] @@ -277,6 +5278,7 @@ "pytest-sugar>=1", "pytest-xdist>=3", "ruff>=0.15", + "syrupy>=5", "ty>=0.0.37", ] docs = [ @@ -360,6 +5362,10 @@ ] help = "Install project dependencies and git hooks" + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update --numprocesses 0" + help = "Update test snapshots" + [tool.poe.tasks.test] cmd = "pytest" help = "Run tests" @@ -394,7 +5400,7 @@ help = "Run tests using Python 3.14" [tool.poe.tasks.ti] - cmd = "pytest -n 0 --no-cov -v" + cmd = "pytest --numprocesses 0 --no-cov -v" help = "Run tests with debug friendly options" [tool.pytest] @@ -403,7 +5409,7 @@ "--cov=pkfire", "--strict-config", "--strict-markers", - "-n", + "--numprocesses", "auto", ] testpaths = ["tests"] @@ -465,7 +5471,7 @@ ''' # --- -# name: test_pyproject_features[docs-3.14-private] +# name: test_pyproject_features[xdist-syrupy-docs-3.14-private] ''' [build-system] requires = ["hatchling", "uv-dynamic-versioning"] @@ -506,6 +5512,7 @@ "pytest-sugar>=1", "pytest-xdist>=3", "ruff>=0.15", + "syrupy>=5", "ty>=0.0.37", ] docs = [ @@ -583,6 +5590,10 @@ ] help = "Install project dependencies and git hooks" + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update --numprocesses 0" + help = "Update test snapshots" + [tool.poe.tasks.test] cmd = "pytest" help = "Run tests" @@ -597,7 +5608,7 @@ help = "Run tests using Python 3.14" [tool.poe.tasks.ti] - cmd = "pytest -n 0 --no-cov -v" + cmd = "pytest --numprocesses 0 --no-cov -v" help = "Run tests with debug friendly options" [tool.pytest] @@ -606,7 +5617,7 @@ "--cov=pkfire", "--strict-config", "--strict-markers", - "-n", + "--numprocesses", "auto", ] testpaths = ["tests"] @@ -668,7 +5679,7 @@ ''' # --- -# name: test_pyproject_features[docs-3.14-public] +# name: test_pyproject_features[xdist-syrupy-docs-3.14-public] ''' [build-system] requires = ["hatchling", "uv-dynamic-versioning"] @@ -715,6 +5726,7 @@ "pytest-sugar>=1", "pytest-xdist>=3", "ruff>=0.15", + "syrupy>=5", "ty>=0.0.37", ] docs = [ @@ -798,6 +5810,10 @@ ] help = "Install project dependencies and git hooks" + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update --numprocesses 0" + help = "Update test snapshots" + [tool.poe.tasks.test] cmd = "pytest" help = "Run tests" @@ -812,7 +5828,7 @@ help = "Run tests using Python 3.14" [tool.poe.tasks.ti] - cmd = "pytest -n 0 --no-cov -v" + cmd = "pytest --numprocesses 0 --no-cov -v" help = "Run tests with debug friendly options" [tool.pytest] @@ -821,7 +5837,7 @@ "--cov=pkfire", "--strict-config", "--strict-markers", - "-n", + "--numprocesses", "auto", ] testpaths = ["tests"] @@ -883,7 +5899,7 @@ ''' # --- -# name: test_pyproject_features[no_docs-3.10-private] +# name: test_pyproject_features[xdist-syrupy-no_docs-3.10-private] ''' [build-system] requires = ["hatchling", "uv-dynamic-versioning"] @@ -928,6 +5944,7 @@ "pytest-sugar>=1", "pytest-xdist>=3", "ruff>=0.15", + "syrupy>=5", "ty>=0.0.37", ] @@ -980,6 +5997,10 @@ ] help = "Install project dependencies and git hooks" + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update --numprocesses 0" + help = "Update test snapshots" + [tool.poe.tasks.test] cmd = "pytest" help = "Run tests" @@ -1014,7 +6035,7 @@ help = "Run tests using Python 3.14" [tool.poe.tasks.ti] - cmd = "pytest -n 0 --no-cov -v" + cmd = "pytest --numprocesses 0 --no-cov -v" help = "Run tests with debug friendly options" [tool.pytest] @@ -1023,7 +6044,7 @@ "--cov=pkfire", "--strict-config", "--strict-markers", - "-n", + "--numprocesses", "auto", ] testpaths = ["tests"] @@ -1085,7 +6106,7 @@ ''' # --- -# name: test_pyproject_features[no_docs-3.10-public] +# name: test_pyproject_features[xdist-syrupy-no_docs-3.10-public] ''' [build-system] requires = ["hatchling", "uv-dynamic-versioning"] @@ -1136,6 +6157,7 @@ "pytest-sugar>=1", "pytest-xdist>=3", "ruff>=0.15", + "syrupy>=5", "ty>=0.0.37", ] @@ -1194,6 +6216,10 @@ ] help = "Install project dependencies and git hooks" + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update --numprocesses 0" + help = "Update test snapshots" + [tool.poe.tasks.test] cmd = "pytest" help = "Run tests" @@ -1228,7 +6254,7 @@ help = "Run tests using Python 3.14" [tool.poe.tasks.ti] - cmd = "pytest -n 0 --no-cov -v" + cmd = "pytest --numprocesses 0 --no-cov -v" help = "Run tests with debug friendly options" [tool.pytest] @@ -1237,7 +6263,7 @@ "--cov=pkfire", "--strict-config", "--strict-markers", - "-n", + "--numprocesses", "auto", ] testpaths = ["tests"] @@ -1299,7 +6325,7 @@ ''' # --- -# name: test_pyproject_features[no_docs-3.14-private] +# name: test_pyproject_features[xdist-syrupy-no_docs-3.14-private] ''' [build-system] requires = ["hatchling", "uv-dynamic-versioning"] @@ -1340,6 +6366,7 @@ "pytest-sugar>=1", "pytest-xdist>=3", "ruff>=0.15", + "syrupy>=5", "ty>=0.0.37", ] @@ -1392,6 +6419,10 @@ ] help = "Install project dependencies and git hooks" + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update --numprocesses 0" + help = "Update test snapshots" + [tool.poe.tasks.test] cmd = "pytest" help = "Run tests" @@ -1406,7 +6437,7 @@ help = "Run tests using Python 3.14" [tool.poe.tasks.ti] - cmd = "pytest -n 0 --no-cov -v" + cmd = "pytest --numprocesses 0 --no-cov -v" help = "Run tests with debug friendly options" [tool.pytest] @@ -1415,7 +6446,7 @@ "--cov=pkfire", "--strict-config", "--strict-markers", - "-n", + "--numprocesses", "auto", ] testpaths = ["tests"] @@ -1477,7 +6508,7 @@ ''' # --- -# name: test_pyproject_features[no_docs-3.14-public] +# name: test_pyproject_features[xdist-syrupy-no_docs-3.14-public] ''' [build-system] requires = ["hatchling", "uv-dynamic-versioning"] @@ -1524,6 +6555,7 @@ "pytest-sugar>=1", "pytest-xdist>=3", "ruff>=0.15", + "syrupy>=5", "ty>=0.0.37", ] @@ -1582,6 +6614,10 @@ ] help = "Install project dependencies and git hooks" + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update --numprocesses 0" + help = "Update test snapshots" + [tool.poe.tasks.test] cmd = "pytest" help = "Run tests" @@ -1596,7 +6632,7 @@ help = "Run tests using Python 3.14" [tool.poe.tasks.ti] - cmd = "pytest -n 0 --no-cov -v" + cmd = "pytest --numprocesses 0 --no-cov -v" help = "Run tests with debug friendly options" [tool.pytest] @@ -1605,7 +6641,7 @@ "--cov=pkfire", "--strict-config", "--strict-markers", - "-n", + "--numprocesses", "auto", ] testpaths = ["tests"] @@ -1716,6 +6752,7 @@ "pytest-sugar>=1", "pytest-xdist>=3", "ruff>=0.15", + "syrupy>=5", "ty>=0.0.37", ] docs = [ @@ -1799,6 +6836,10 @@ ] help = "Install project dependencies and git hooks" + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update --numprocesses 0" + help = "Update test snapshots" + [tool.poe.tasks.test] cmd = "pytest" help = "Run tests" @@ -1823,7 +6864,7 @@ help = "Run tests using Python 3.12" [tool.poe.tasks.ti] - cmd = "pytest -n 0 --no-cov -v" + cmd = "pytest --numprocesses 0 --no-cov -v" help = "Run tests with debug friendly options" [tool.pytest] @@ -1832,7 +6873,7 @@ "--cov=pkfire", "--strict-config", "--strict-markers", - "-n", + "--numprocesses", "auto", ] testpaths = ["tests"] @@ -1941,6 +6982,7 @@ "pytest-sugar>=1", "pytest-xdist>=3", "ruff>=0.15", + "syrupy>=5", "ty>=0.0.37", ] docs = [ @@ -2024,6 +7066,10 @@ ] help = "Install project dependencies and git hooks" + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update --numprocesses 0" + help = "Update test snapshots" + [tool.poe.tasks.test] cmd = "pytest" help = "Run tests" @@ -2038,7 +7084,7 @@ help = "Run tests using Python 3.12" [tool.poe.tasks.ti] - cmd = "pytest -n 0 --no-cov -v" + cmd = "pytest --numprocesses 0 --no-cov -v" help = "Run tests with debug friendly options" [tool.pytest] @@ -2047,7 +7093,7 @@ "--cov=pkfire", "--strict-config", "--strict-markers", - "-n", + "--numprocesses", "auto", ] testpaths = ["tests"] @@ -2160,6 +7206,7 @@ "pytest-sugar>=1", "pytest-xdist>=3", "ruff>=0.15", + "syrupy>=5", "ty>=0.0.37", ] docs = [ @@ -2243,6 +7290,10 @@ ] help = "Install project dependencies and git hooks" + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update --numprocesses 0" + help = "Update test snapshots" + [tool.poe.tasks.test] cmd = "pytest" help = "Run tests" @@ -2277,7 +7328,7 @@ help = "Run tests using Python 3.14" [tool.poe.tasks.ti] - cmd = "pytest -n 0 --no-cov -v" + cmd = "pytest --numprocesses 0 --no-cov -v" help = "Run tests with debug friendly options" [tool.pytest] @@ -2286,7 +7337,7 @@ "--cov=pkfire", "--strict-config", "--strict-markers", - "-n", + "--numprocesses", "auto", ] testpaths = ["tests"] @@ -2397,6 +7448,7 @@ "pytest-sugar>=1", "pytest-xdist>=3", "ruff>=0.15", + "syrupy>=5", "ty>=0.0.37", ] docs = [ @@ -2480,6 +7532,10 @@ ] help = "Install project dependencies and git hooks" + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update --numprocesses 0" + help = "Update test snapshots" + [tool.poe.tasks.test] cmd = "pytest" help = "Run tests" @@ -2504,7 +7560,7 @@ help = "Run tests using Python 3.14" [tool.poe.tasks.ti] - cmd = "pytest -n 0 --no-cov -v" + cmd = "pytest --numprocesses 0 --no-cov -v" help = "Run tests with debug friendly options" [tool.pytest] @@ -2513,7 +7569,7 @@ "--cov=pkfire", "--strict-config", "--strict-markers", - "-n", + "--numprocesses", "auto", ] testpaths = ["tests"] @@ -2626,6 +7682,7 @@ "pytest-sugar>=1", "pytest-xdist>=3", "ruff>=0.15", + "syrupy>=5", "ty>=0.0.37", ] docs = [ @@ -2709,6 +7766,10 @@ ] help = "Install project dependencies and git hooks" + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update --numprocesses 0" + help = "Update test snapshots" + [tool.poe.tasks.test] cmd = "pytest" help = "Run tests" @@ -2743,7 +7804,7 @@ help = "Run tests using Python 3.14" [tool.poe.tasks.ti] - cmd = "pytest -n 0 --no-cov -v" + cmd = "pytest --numprocesses 0 --no-cov -v" help = "Run tests with debug friendly options" [tool.pytest] @@ -2752,7 +7813,7 @@ "--cov=pkfire", "--strict-config", "--strict-markers", - "-n", + "--numprocesses", "auto", ] testpaths = ["tests"] @@ -2863,6 +7924,7 @@ "pytest-sugar>=1", "pytest-xdist>=3", "ruff>=0.15", + "syrupy>=5", "ty>=0.0.37", ] docs = [ @@ -2946,6 +8008,10 @@ ] help = "Install project dependencies and git hooks" + [tool.poe.tasks.snapup] + cmd = "pytest --snapshot-update --numprocesses 0" + help = "Update test snapshots" + [tool.poe.tasks.test] cmd = "pytest" help = "Run tests" @@ -2970,7 +8036,7 @@ help = "Run tests using Python 3.14" [tool.poe.tasks.ti] - cmd = "pytest -n 0 --no-cov -v" + cmd = "pytest --numprocesses 0 --no-cov -v" help = "Run tests with debug friendly options" [tool.pytest] @@ -2979,7 +8045,7 @@ "--cov=pkfire", "--strict-config", "--strict-markers", - "-n", + "--numprocesses", "auto", ] testpaths = ["tests"] diff --git a/tests/test_docs.py b/tests/test_docs.py index 7e0f673..2bdf4d0 100644 --- a/tests/test_docs.py +++ b/tests/test_docs.py @@ -40,17 +40,23 @@ def test_docs_features( "enable_pypi", [pytest.param(True, id="pypi"), pytest.param(False, id="no_pypi")], ) +@pytest.mark.parametrize( + "enable_syrupy", + [pytest.param(True, id="syrupy"), pytest.param(False, id="no_syrupy")], +) def test_docs_development_features( render_template: Callable[..., Path], snapshot: SnapshotAssertion, *, project_visibility: str, enable_pypi: bool, + enable_syrupy: bool, ) -> None: rendered = render_template( project_visibility=project_visibility, enable_pypi=enable_pypi, enable_docs=True, + enable_features=["syrupy"] if enable_syrupy else [], ) for doc_file in ["requirements.md", "workflow.md", "updates.md"]: assert ( diff --git a/tests/test_pyproject.py b/tests/test_pyproject.py index 1f273aa..66b4c1f 100644 --- a/tests/test_pyproject.py +++ b/tests/test_pyproject.py @@ -13,6 +13,14 @@ "enable_docs", [pytest.param(True, id="docs"), pytest.param(False, id="no_docs")], ) +@pytest.mark.parametrize( + "enable_syrupy", + [pytest.param(True, id="syrupy"), pytest.param(False, id="no_syrupy")], +) +@pytest.mark.parametrize( + "enable_xdist", + [pytest.param(True, id="xdist"), pytest.param(False, id="no_xdist")], +) def test_pyproject_features( render_template: Callable[..., Path], snapshot: SnapshotAssertion, @@ -20,11 +28,17 @@ def test_pyproject_features( project_visibility: bool, python_version_minimum: str, enable_docs: bool, + enable_syrupy: bool, + enable_xdist: bool, ) -> None: rendered = render_template( project_visibility=project_visibility, python_version_minimum=python_version_minimum, enable_docs=enable_docs, + enable_features=[ + *(["syrupy"] if enable_syrupy else []), + *(["xdist"] if enable_xdist else []), + ], ) assert (rendered / "pyproject.toml").read_text() == snapshot