From 3e31a77a16ca88e822a997ca66622ba6dce7e2ee Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 3 Feb 2025 13:30:09 -0500 Subject: [PATCH 1/6] update several pre-commit hooks and add CI workflows, drop Python3.9, synchronize dependencies, use commit hashes in CI --- .github/dependabot.yml | 9 +- .readthedocs.yml | 7 +- tests/test_bake_project.py | 1 - tox.ini | 4 +- .../.github/dependabot.yml | 27 ++ .../.github/labeler.yml | 34 ++ .../.github/workflows/bump-version.yml | 93 ++++ .../.github/workflows/docker-testing.yml | 58 +++ .../.github/workflows/label.yml | 41 ++ .../.github/workflows/main.yml | 105 ++-- .../.github/workflows/publish-pypi.yml | 40 ++ .../.github/workflows/tag-testpypi.yml | 44 ++ .../.pre-commit-config.yaml | 51 +- .../.readthedocs.yml | 6 +- .../CI/requirements_ci.in | 5 + .../CI/requirements_ci.txt | 455 ++++++++++++++++++ {{cookiecutter.project_slug}}/Makefile | 13 +- .../docker-compose.yml | 1 - .../docs/source/conf.py | 5 +- .../environment-dev.yml | 15 +- .../environment-docs.yml | 2 +- {{cookiecutter.project_slug}}/environment.yml | 2 +- {{cookiecutter.project_slug}}/pyproject.toml | 31 +- {{cookiecutter.project_slug}}/tox.ini | 17 +- 24 files changed, 968 insertions(+), 98 deletions(-) create mode 100644 {{cookiecutter.project_slug}}/.github/dependabot.yml create mode 100644 {{cookiecutter.project_slug}}/.github/labeler.yml create mode 100644 {{cookiecutter.project_slug}}/.github/workflows/bump-version.yml create mode 100644 {{cookiecutter.project_slug}}/.github/workflows/docker-testing.yml create mode 100644 {{cookiecutter.project_slug}}/.github/workflows/label.yml create mode 100644 {{cookiecutter.project_slug}}/.github/workflows/publish-pypi.yml create mode 100644 {{cookiecutter.project_slug}}/.github/workflows/tag-testpypi.yml create mode 100644 {{cookiecutter.project_slug}}/CI/requirements_ci.in create mode 100644 {{cookiecutter.project_slug}}/CI/requirements_ci.txt diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 69d01fae0..b2eaf504a 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,7 +6,7 @@ version: 2 updates: - package-ecosystem: "github-actions" - directory: "/" + directory: "/.github/workflows" schedule: interval: "monthly" groups: @@ -15,10 +15,13 @@ updates: - "*" - package-ecosystem: "pip" - directory: "/CI" + directory: "/" schedule: interval: "monthly" groups: + ci: + patterns: + - "CI/*" python: patterns: - - "*" + - "pyproject.toml" diff --git a/.readthedocs.yml b/.readthedocs.yml index c6f7d4afd..1b2be517b 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -7,9 +7,12 @@ version: 2 # Set the version of Python and other tools you might need build: - os: ubuntu-22.04 + os: "ubuntu-24.04" tools: - python: mambaforge-22.9 + python: "mambaforge-23.11" + +# Optionally build your docs in additional formats such as PDF and ePub +formats: [ ] # Build documentation in the docs/ directory with Sphinx sphinx: diff --git a/tests/test_bake_project.py b/tests/test_bake_project.py index dd21dbce6..7077f5273 100644 --- a/tests/test_bake_project.py +++ b/tests/test_bake_project.py @@ -212,7 +212,6 @@ def test_bake_selecting_license(cookies): ) - def test_bake_not_open_source(cookies): with bake_in_temp_dir( cookies, diff --git a/tox.ini b/tox.ini index 3880a21dc..288a03d75 100644 --- a/tox.ini +++ b/tox.ini @@ -1,10 +1,10 @@ [tox] -min_version = 4.18.0 +min_version = 4.23.2 envlist = py{39,310,311,312}, pypy{39,310,311,312}, docs -requires = pip >= 24.2.0 +requires = pip >= 25.0 opts = --verbose [testenv:docs] diff --git a/{{cookiecutter.project_slug}}/.github/dependabot.yml b/{{cookiecutter.project_slug}}/.github/dependabot.yml new file mode 100644 index 000000000..b2eaf504a --- /dev/null +++ b/{{cookiecutter.project_slug}}/.github/dependabot.yml @@ -0,0 +1,27 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/.github/workflows" + schedule: + interval: "monthly" + groups: + actions: + patterns: + - "*" + + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "monthly" + groups: + ci: + patterns: + - "CI/*" + python: + patterns: + - "pyproject.toml" diff --git a/{{cookiecutter.project_slug}}/.github/labeler.yml b/{{cookiecutter.project_slug}}/.github/labeler.yml new file mode 100644 index 000000000..ca5b76d72 --- /dev/null +++ b/{{cookiecutter.project_slug}}/.github/labeler.yml @@ -0,0 +1,34 @@ +# label rules used by .github/workflows/label.yml + +'CI': + - changed-files: + - any-glob-to-any-file: + - '.editorconfig' + - '.flake8' + - '.github/workflows/*' + - '.pre-commit-config.yaml' + - '.pylintrc.toml' + - '.readthedocs.yml' + - '.yamllint.yml' + - 'Makefile' + - 'docs/Makefile' + - 'tox.ini' + +'dependencies': + - changes-files: + - any-glob-to-any-file: + - 'requirements*.txt' + - 'environment*.yml' + +'docs': + - changed-files: + - any-glob-to-any-file: + - '.readthedocs.yml' + - '.zenodo.json' + - 'docs/**/*' + - 'AUTHORS.rst' + - 'CHANGELOG.rst' + - 'CONTRIBUTING.md' + - 'ISSUE_TEMPLATE.md' + - 'PULL_REQUEST_TEMPLATE.md' + - 'README.rst' diff --git a/{{cookiecutter.project_slug}}/.github/workflows/bump-version.yml b/{{cookiecutter.project_slug}}/.github/workflows/bump-version.yml new file mode 100644 index 000000000..9e969627b --- /dev/null +++ b/{{cookiecutter.project_slug}}/.github/workflows/bump-version.yml @@ -0,0 +1,93 @@ +name: Conditional Bump Version + +on: + push: + branches: + - master + paths-ignore: + - .* + - .github/*/*.md + - .github/*/*.yml + - AUTHORS.rst + - CHANGELOG.rst + - CI/*.in + - CI/*.txt + - Dockerfile + - Makefile + - docker-compose.yml + - docs/*/*.ipynb + - docs/*/*.py + - docs/*/*.rst + - docs/Makefile + - docs/_static/* + - environment-dev.yml + - environment-docs.yml + - environment.yml + - pyproject.toml + - src/${{ cookiecutter.project_slug }}/__version__.py + +permissions: + contents: read + +{% raw -%} +jobs: + bump_patch_version: + name: Bumpversion Patch + runs-on: ubuntu-latest + permissions: + actions: read + steps: + - name: Harden Runner + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 + with: + disable-sudo: true + egress-policy: block + allowed-endpoints: > + api.github.com:443 + files.pythonhosted.org:443 + github.com:443 + pypi.org:443 + - name: Generate App Token + id: token_generator + uses: actions/create-github-app-token@136412a57a7081aa63c935a2cc2918f76c34f514 # v1.11.2 + with: + app-id: ${{ secrets.BIRDHOUSE_HELPER_BOT_ID }} + private-key: ${{ secrets.BIRDHOUSE_HELPER_BOT_KEY }} + - name: Checkout Repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + token: ${{ steps.token_generator.outputs.token }} + persist-credentials: false + - name: Set up Python3 + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 + with: + python-version: "3.x" + - name: Import GPG Key + uses: crazy-max/ghaction-import-gpg@cb9bde2e2525e640591a934b1fd28eef1dcaf5e5 # v6.2.0 + with: + gpg_private_key: ${{ secrets.BIRDHOUSE_HELPER_BOT_GPG_PRIVATE_KEY }} + passphrase: ${{ secrets.BIRDHOUSE_HELPER_BOT_GPG_PRIVATE_KEY_PASSWORD }} + git_user_signingkey: true + git_commit_gpgsign: true + trust_level: 5 + - name: Install CI libraries + run: | + python -m pip install --require-hashes -r CI/requirements_ci.txt + - name: Conditional Bump + run: | + CURRENT_VERSION=$(bump-my-version show current_version) + if [[ ${CURRENT_VERSION} =~ -dev(\.\d+)? ]]; then + echo "Development version (ends in 'dev(\.\d+)?'), bumping 'build' version" + bump-my-version bump build + else + echo "Version is stable, bumping 'patch' version" + bump-my-version bump patch + fi + echo "new_version=$(bump-my-version show current_version)" + - name: Push Changes + uses: ad-m/github-push-action@d91a481090679876dfc4178fef17f286781251df # v0.8.0 + with: + force: false + branch: ${{ github.ref }} + github_token: ${{ steps.token_generator.outputs.token }} +{%- endraw %} diff --git a/{{cookiecutter.project_slug}}/.github/workflows/docker-testing.yml b/{{cookiecutter.project_slug}}/.github/workflows/docker-testing.yml new file mode 100644 index 000000000..cc5eb267d --- /dev/null +++ b/{{cookiecutter.project_slug}}/.github/workflows/docker-testing.yml @@ -0,0 +1,58 @@ +name: Docker-based Testing Suite + +on: + push: + branches: + - main + pull_request: + +concurrency: + # For a given workflow, if we push to the same branch, cancel all previous builds on that branch except on master. + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/master' }} + +permissions: + contents: read + +jobs: + build: + name: Build and Test Docker image + runs-on: ubuntu-latest + steps: + - name: Harden Runner + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 + with: + disable-sudo: true + egress-policy: block + allowed-endpoints: > + auth.docker.io:443 + conda.anaconda.org:443 + files.pythonhosted.org:443 + github.com:443 + production.cloudflare.docker.com:443 + pypi.org:443 + registry-1.docker.io:443 + - name: Checkout Repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3.8.0 + - name: Build Docker image (no push) + uses: docker/build-push-action@ca877d9245402d1537745e0e356eab47c3520991 # v6.13.0 + with: + context: . + file: "Dockerfile" + tags: local${{ cookiecutter }}:latest + load: true + cache-from: type=gha + cache-to: type=gha,mode=max + push: false + - name: Run Docker image + uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 # v3.0.0 + with: + image: localfinch:latest + options: -p 5000:5000 + run: | + finch start -d + sleep 2s + finch status + finch stop diff --git a/{{cookiecutter.project_slug}}/.github/workflows/label.yml b/{{cookiecutter.project_slug}}/.github/workflows/label.yml new file mode 100644 index 000000000..a85140e7d --- /dev/null +++ b/{{cookiecutter.project_slug}}/.github/workflows/label.yml @@ -0,0 +1,41 @@ +# This workflow will triage pull requests and apply a label based on the +# paths that are modified in the pull request. +# +# To use this workflow, you will need to set up a .github/labeler.yml +# file with configuration. For more information, see: +# https://github.com/actions/labeler/blob/master/README.md + +name: Labeler +on: + # Note: potential security risk from this action using pull_request_target. + # Do not add actions in here which need a checkout of the repo, and do not use any caching in here. + # See: https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target + pull_request_target: + types: + - opened + - reopened + - synchronize + +permissions: + contents: read + +{% raw -%} +jobs: + label: + name: Label + runs-on: ubuntu-latest + permissions: + pull-requests: write + steps: + - name: Harden Runner + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 + with: + disable-sudo: true + egress-policy: block + allowed-endpoints: > + api.github.com:443 + - name: Labeler + uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0 + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" +{%- endraw %} diff --git a/{{cookiecutter.project_slug}}/.github/workflows/main.yml b/{{cookiecutter.project_slug}}/.github/workflows/main.yml index ce27d1860..fdbad3812 100644 --- a/{{cookiecutter.project_slug}}/.github/workflows/main.yml +++ b/{{cookiecutter.project_slug}}/.github/workflows/main.yml @@ -1,39 +1,84 @@ name: {{ cookiecutter.project_name }} Testing Suite ⚙️ -on: [ push, pull_request ] +on: + push: + branches: + - main + pull_request: -{% raw %} +concurrency: + # For a given workflow, if we push to the same branch, cancel all previous builds on that branch except on main. + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} + +permissions: + contents: read + +{% raw -%} jobs: - build: - name: Build ⚙️ + lint: + name: Code linting + runs-on: ubuntu-latest + steps: + - name: Harden Runner + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 + with: + egress-policy: audit + - name: Checkout Repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: false + - name: Set up Python${{ matrix.python-version }} + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 + with: + python-version: "3.x" + cache: pip + - name: Install CI libraries + run: | + python -m pip install --require-hashes -r CI/requirements_ci.txt + - name: Run pylint + run: | + python -m pylint --rcfile=.pylintrc.toml --disable=import-error --exit-zero src/finch + - name: Run pre-commit + uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # v3.0.1 + + conda: + name: Build ⚙️ and test 🧪 + needs: lint runs-on: ubuntu-latest + defaults: + run: + shell: bash -l {0} strategy: matrix: - python-version: [ "3.9", "3.10", "3.11", "3.12" ] + python-version: [ "3.10", "3.11", "3.12", "3.13" ] steps: - - name: Checkout repository and submodules - uses: actions/checkout@v4 - with: - submodules: recursive - - name: Install packages - run: | - sudo apt-get -y install pandoc - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - name: Install requirements 📦 - run: | - python -m pip install --upgrade pip - pip install -e . - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - if [ -f requirements_dev.txt ]; then pip install -r requirements_dev.txt; fi - - name: Test with pytest ⚙️ - run: make test - - name: Lint with flake8 ⚙️ - run: make lint - if: matrix.python-version == 3.7 - - name: Build docs 🏗️ - run: make docs - if: matrix.python-version == 3.7 + - name: Harden Runner + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 + with: + egress-policy: audit + - name: Checkout Repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: false + - name: Setup Conda (Micromamba) with Python${{ matrix.python-version }} + uses: mamba-org/setup-micromamba@0dea6379afdaffa5d528b3d1dabc45da37f443fc # v2.0.4 + with: + cache-downloads: true + cache-environment: true + environment-file: environment.yml + create-args: >- + python=${{ matrix.python-version }} + - name: Install + run: | + make develop + - name: Check versions + run: | + python -m pip check + - name: Run tests + run: | + make start + sleep 2 + make test-notebooks + make test {%- endraw %} diff --git a/{{cookiecutter.project_slug}}/.github/workflows/publish-pypi.yml b/{{cookiecutter.project_slug}}/.github/workflows/publish-pypi.yml new file mode 100644 index 000000000..c638df1b9 --- /dev/null +++ b/{{cookiecutter.project_slug}}/.github/workflows/publish-pypi.yml @@ -0,0 +1,40 @@ +name: Publish Python 🐍 distributions 📦 to PyPI + +on: + release: + types: + - published + +permissions: + contents: read + +jobs: + build-n-publish-pypi: + name: Build and publish Python 🐍 distributions 📦 to PyPI + environment: production + permissions: + # IMPORTANT: this permission is mandatory for trusted publishing + id-token: write + runs-on: ubuntu-latest + steps: + - name: Harden Runner + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 + with: + disable-sudo: true + egress-policy: audit + - name: Checkout Repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: false + - name: Set up Python3 + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 + with: + python-version: "3.x" + - name: Install CI libraries + run: | + python -m pip install --require-hashes -r CI/requirements_ci.txt + - name: Build a binary wheel and a source tarball + run: | + python -m flit build + - name: Publish distribution 📦 to PyPI + uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4 diff --git a/{{cookiecutter.project_slug}}/.github/workflows/tag-testpypi.yml b/{{cookiecutter.project_slug}}/.github/workflows/tag-testpypi.yml new file mode 100644 index 000000000..5c0138738 --- /dev/null +++ b/{{cookiecutter.project_slug}}/.github/workflows/tag-testpypi.yml @@ -0,0 +1,44 @@ + +name: Publish Python 🐍 distributions 📦 to TestPyPI + +on: + push: + tags: + - 'v*' + +permissions: + contents: read + +jobs: + build-n-publish-testpypi: + name: Build and publish Python 🐍 distributions 📦 to TestPyPI + environment: staging + permissions: + # IMPORTANT: this permission is mandatory for trusted publishing + id-token: write + runs-on: ubuntu-latest + steps: + - name: Harden Runner + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 + with: + disable-sudo: true + egress-policy: audit + - name: Checkout Repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: false + - name: Set up Python3 + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 + with: + python-version: "3.x" + - name: Install CI libraries + run: | + python -m pip install --require-hashes -r CI/requirements_ci.txt + - name: Build a binary wheel and a source tarball + run: | + python -m flit build + - name: Publish distribution 📦 to Test PyPI + uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4 + with: + repository-url: https://test.pypi.org/legacy/ + skip-existing: true diff --git a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml index 3a2c08c4e..fb407affc 100644 --- a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml +++ b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml @@ -3,7 +3,7 @@ default_language_version: repos: - repo: https://github.com/asottile/pyupgrade - rev: v3.17.0 + rev: v3.19.1 hooks: - id: pyupgrade args: [ '--py39-plus' ] @@ -25,6 +25,22 @@ repos: rev: v0.23.1 hooks: - id: toml-sort-fix + - repo: https://github.com/adrienverge/yamllint.git + rev: v1.35.1 + hooks: + - id: yamllint + args: [ '--config-file=.yamllint.yaml' ] + - repo: https://github.com/pre-commit/pygrep-hooks + rev: v1.10.0 + hooks: + # - id: python-check-blanket-noqa + - id: python-check-blanket-type-ignore + - id: python-no-eval + - id: python-no-log-warn + - id: python-use-type-annotations + - id: rst-directive-colons + - id: rst-inline-touching-normal + - id: text-unicode-replacement-char - repo: https://github.com/pre-commit/pygrep-hooks rev: v1.10.0 hooks: @@ -33,42 +49,41 @@ repos: - id: python-no-log-warn - id: python-use-type-annotations - id: rst-inline-touching-normal - {%- if cookiecutter.use_black == 'y' %} +{%- if cookiecutter.use_black == 'y' %} - repo: https://github.com/psf/black-pre-commit-mirror - rev: 24.8.0 + rev: 25.1.0 hooks: - id: black exclude: ^docs/ - repo: https://github.com/PyCQA/isort - rev: 5.13.2 + rev: 6.0.0 hooks: - id: isort exclude: ^docs/ - {%- endif %} +{%- endif %} - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.5.7 + rev: v0.9.0 hooks: - id: ruff args: [ '--fix' ] - id: ruff-format - {%- if cookiecutter.use_black == 'y' %} + - repo: https://github.com/jendrikseipp/vulture + rev: 'v2.14' + hooks: + - id: vulture +{%- if cookiecutter.use_black == 'y' %} - repo: https://github.com/keewis/blackdoc rev: v0.3.9 hooks: - id: blackdoc - additional_dependencies: [ 'black==24.8.0' ] + additional_dependencies: [ 'black==25.1.0' ] - id: blackdoc-autoupdate-black - {%- endif %} - - repo: https://github.com/adrienverge/yamllint.git - rev: v1.35.1 +{%- endif %} + - repo: https://github.com/numpy/numpydoc + rev: v1.8.0 hooks: - - id: yamllint - args: [ '--config-file=.yamllint.yaml' ] -# - repo: https://github.com/numpy/numpydoc -# rev: v1.8.0 -# hooks: -# - id: numpydoc-validation -# exclude: ^docs/|^tests/ + - id: numpydoc-validation + exclude: ^docs/|^tests/ - repo: https://github.com/python-jsonschema/check-jsonschema rev: 0.29.1 hooks: diff --git a/{{cookiecutter.project_slug}}/.readthedocs.yml b/{{cookiecutter.project_slug}}/.readthedocs.yml index c9d8b6998..ecbd26e10 100644 --- a/{{cookiecutter.project_slug}}/.readthedocs.yml +++ b/{{cookiecutter.project_slug}}/.readthedocs.yml @@ -13,13 +13,13 @@ sphinx: fail_on_warning: true # Optionally build your docs in additional formats such as PDF and ePub -formats: all +formats: [ ] # Optionally set the version of Python and requirements required to build your docs build: - os: ubuntu-22.04 + os: "ubuntu-24.04" tools: - python: mambaforge-22.9 + python: "mambaforge-23.11" conda: environment: environment-docs.yml diff --git a/{{cookiecutter.project_slug}}/CI/requirements_ci.in b/{{cookiecutter.project_slug}}/CI/requirements_ci.in new file mode 100644 index 000000000..acb37f48f --- /dev/null +++ b/{{cookiecutter.project_slug}}/CI/requirements_ci.in @@ -0,0 +1,5 @@ +bump-my-version==0.31.1 +flit==3.10.1 +pip==24.3.1 +pre-commit==4.0.1 +pylint==3.3.3 diff --git a/{{cookiecutter.project_slug}}/CI/requirements_ci.txt b/{{cookiecutter.project_slug}}/CI/requirements_ci.txt new file mode 100644 index 000000000..0f2781e99 --- /dev/null +++ b/{{cookiecutter.project_slug}}/CI/requirements_ci.txt @@ -0,0 +1,455 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --generate-hashes --output-file=CI/requirements_ci.txt CI/requirements_ci.in +# +annotated-types==0.7.0 \ + --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 \ + --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89 + # via pydantic +astroid==3.3.8 \ + --hash=sha256:187ccc0c248bfbba564826c26f070494f7bc964fd286b6d9fff4420e55de828c \ + --hash=sha256:a88c7994f914a4ea8572fac479459f4955eeccc877be3f2d959a33273b0cf40b + # via pylint +bracex==2.4 \ + --hash=sha256:a27eaf1df42cf561fed58b7a8f3fdf129d1ea16a81e1fadd1d17989bc6384beb \ + --hash=sha256:efdc71eff95eaff5e0f8cfebe7d01adf2c8637c8c92edaf63ef348c241a82418 + # via wcmatch +bump-my-version==0.31.1 \ + --hash=sha256:3b9f496eb5554208d91f84fcb781628bdd4549e055fd3282804959453ebd1857 \ + --hash=sha256:83962dbd593b3edb426661a4c2276a0842a7eaa5dee896543b771c358ac78915 + # via -r CI/requirements_ci.in +certifi==2024.12.14 \ + --hash=sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56 \ + --hash=sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db + # via requests +cfgv==3.4.0 \ + --hash=sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9 \ + --hash=sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560 + # via pre-commit +charset-normalizer==3.4.1 \ + --hash=sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537 \ + --hash=sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa \ + --hash=sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a \ + --hash=sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294 \ + --hash=sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b \ + --hash=sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd \ + --hash=sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601 \ + --hash=sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd \ + --hash=sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4 \ + --hash=sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d \ + --hash=sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2 \ + --hash=sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313 \ + --hash=sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd \ + --hash=sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa \ + --hash=sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8 \ + --hash=sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1 \ + --hash=sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2 \ + --hash=sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496 \ + --hash=sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d \ + --hash=sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b \ + --hash=sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e \ + --hash=sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a \ + --hash=sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4 \ + --hash=sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca \ + --hash=sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78 \ + --hash=sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408 \ + --hash=sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5 \ + --hash=sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3 \ + --hash=sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f \ + --hash=sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a \ + --hash=sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765 \ + --hash=sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6 \ + --hash=sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146 \ + --hash=sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6 \ + --hash=sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9 \ + --hash=sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd \ + --hash=sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c \ + --hash=sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f \ + --hash=sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545 \ + --hash=sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176 \ + --hash=sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770 \ + --hash=sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824 \ + --hash=sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f \ + --hash=sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf \ + --hash=sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487 \ + --hash=sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d \ + --hash=sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd \ + --hash=sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b \ + --hash=sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534 \ + --hash=sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f \ + --hash=sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b \ + --hash=sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9 \ + --hash=sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd \ + --hash=sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125 \ + --hash=sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9 \ + --hash=sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de \ + --hash=sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11 \ + --hash=sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d \ + --hash=sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35 \ + --hash=sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f \ + --hash=sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda \ + --hash=sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7 \ + --hash=sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a \ + --hash=sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971 \ + --hash=sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8 \ + --hash=sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41 \ + --hash=sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d \ + --hash=sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f \ + --hash=sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757 \ + --hash=sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a \ + --hash=sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886 \ + --hash=sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77 \ + --hash=sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76 \ + --hash=sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247 \ + --hash=sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85 \ + --hash=sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb \ + --hash=sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7 \ + --hash=sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e \ + --hash=sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6 \ + --hash=sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037 \ + --hash=sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1 \ + --hash=sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e \ + --hash=sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807 \ + --hash=sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407 \ + --hash=sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c \ + --hash=sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12 \ + --hash=sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3 \ + --hash=sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089 \ + --hash=sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd \ + --hash=sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e \ + --hash=sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00 \ + --hash=sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616 + # via requests +click==8.1.8 \ + --hash=sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2 \ + --hash=sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a + # via + # bump-my-version + # rich-click +dill==0.3.9 \ + --hash=sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a \ + --hash=sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c + # via pylint +distlib==0.3.9 \ + --hash=sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87 \ + --hash=sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403 + # via virtualenv +docutils==0.21.2 \ + --hash=sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f \ + --hash=sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2 + # via flit +filelock==3.16.1 \ + --hash=sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0 \ + --hash=sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435 + # via virtualenv +flit==3.10.1 \ + --hash=sha256:9c6258ae76d218ce60f9e39a43ca42006a3abcc5c44ea6bb2a1daa13857a8f1a \ + --hash=sha256:d79c19c2caae73cc486d3d827af6a11c1a84b9efdfab8d9683b714ec8d1dc1f1 + # via -r CI/requirements_ci.in +flit-core==3.10.1 \ + --hash=sha256:66e5b87874a0d6e39691f0e22f09306736b633548670ad3c09ec9db03c5662f7 \ + --hash=sha256:cb31a76e8b31ad3351bb89e531f64ef2b05d1e65bd939183250bf81ddf4922a8 + # via flit +identify==2.6.5 \ + --hash=sha256:14181a47091eb75b337af4c23078c9d09225cd4c48929f521f3bf16b09d02566 \ + --hash=sha256:c10b33f250e5bba374fae86fb57f3adcebf1161bce7cdf92031915fd480c13bc + # via pre-commit +idna==3.10 \ + --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \ + --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 + # via requests +isort==5.13.2 \ + --hash=sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109 \ + --hash=sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6 + # via pylint +markdown-it-py==3.0.0 \ + --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ + --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb + # via rich +mccabe==0.7.0 \ + --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ + --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e + # via pylint +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba + # via markdown-it-py +nodeenv==1.9.1 \ + --hash=sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f \ + --hash=sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9 + # via pre-commit +platformdirs==4.3.6 \ + --hash=sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907 \ + --hash=sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb + # via + # pylint + # virtualenv +pre-commit==4.0.1 \ + --hash=sha256:80905ac375958c0444c65e9cebebd948b3cdb518f335a091a670a89d652139d2 \ + --hash=sha256:efde913840816312445dc98787724647c65473daefe420785f885e8ed9a06878 + # via -r CI/requirements_ci.in +prompt-toolkit==3.0.36 \ + --hash=sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63 \ + --hash=sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305 + # via questionary +pydantic==2.8.2 \ + --hash=sha256:6f62c13d067b0755ad1c21a34bdd06c0c12625a22b0fc09c6b149816604f7c2a \ + --hash=sha256:73ee9fddd406dc318b885c7a2eab8a6472b68b8fb5ba8150949fc3db939f23c8 + # via + # bump-my-version + # pydantic-settings +pydantic-core==2.20.1 \ + --hash=sha256:035ede2e16da7281041f0e626459bcae33ed998cca6a0a007a5ebb73414ac72d \ + --hash=sha256:04024d270cf63f586ad41fff13fde4311c4fc13ea74676962c876d9577bcc78f \ + --hash=sha256:0827505a5c87e8aa285dc31e9ec7f4a17c81a813d45f70b1d9164e03a813a686 \ + --hash=sha256:084659fac3c83fd674596612aeff6041a18402f1e1bc19ca39e417d554468482 \ + --hash=sha256:10d4204d8ca33146e761c79f83cc861df20e7ae9f6487ca290a97702daf56006 \ + --hash=sha256:11b71d67b4725e7e2a9f6e9c0ac1239bbc0c48cce3dc59f98635efc57d6dac83 \ + --hash=sha256:150906b40ff188a3260cbee25380e7494ee85048584998c1e66df0c7a11c17a6 \ + --hash=sha256:175873691124f3d0da55aeea1d90660a6ea7a3cfea137c38afa0a5ffabe37b88 \ + --hash=sha256:177f55a886d74f1808763976ac4efd29b7ed15c69f4d838bbd74d9d09cf6fa86 \ + --hash=sha256:19c0fa39fa154e7e0b7f82f88ef85faa2a4c23cc65aae2f5aea625e3c13c735a \ + --hash=sha256:1eedfeb6089ed3fad42e81a67755846ad4dcc14d73698c120a82e4ccf0f1f9f6 \ + --hash=sha256:225b67a1f6d602de0ce7f6c1c3ae89a4aa25d3de9be857999e9124f15dab486a \ + --hash=sha256:242b8feb3c493ab78be289c034a1f659e8826e2233786e36f2893a950a719bb6 \ + --hash=sha256:254ec27fdb5b1ee60684f91683be95e5133c994cc54e86a0b0963afa25c8f8a6 \ + --hash=sha256:25e9185e2d06c16ee438ed39bf62935ec436474a6ac4f9358524220f1b236e43 \ + --hash=sha256:26ab812fa0c845df815e506be30337e2df27e88399b985d0bb4e3ecfe72df31c \ + --hash=sha256:26ca695eeee5f9f1aeeb211ffc12f10bcb6f71e2989988fda61dabd65db878d4 \ + --hash=sha256:26dc97754b57d2fd00ac2b24dfa341abffc380b823211994c4efac7f13b9e90e \ + --hash=sha256:270755f15174fb983890c49881e93f8f1b80f0b5e3a3cc1394a255706cabd203 \ + --hash=sha256:2aafc5a503855ea5885559eae883978c9b6d8c8993d67766ee73d82e841300dd \ + --hash=sha256:2d036c7187b9422ae5b262badb87a20a49eb6c5238b2004e96d4da1231badef1 \ + --hash=sha256:33499e85e739a4b60c9dac710c20a08dc73cb3240c9a0e22325e671b27b70d24 \ + --hash=sha256:37eee5b638f0e0dcd18d21f59b679686bbd18917b87db0193ae36f9c23c355fc \ + --hash=sha256:38cf1c40a921d05c5edc61a785c0ddb4bed67827069f535d794ce6bcded919fc \ + --hash=sha256:3acae97ffd19bf091c72df4d726d552c473f3576409b2a7ca36b2f535ffff4a3 \ + --hash=sha256:3c5ebac750d9d5f2706654c638c041635c385596caf68f81342011ddfa1e5598 \ + --hash=sha256:3d482efec8b7dc6bfaedc0f166b2ce349df0011f5d2f1f25537ced4cfc34fd98 \ + --hash=sha256:407653af5617f0757261ae249d3fba09504d7a71ab36ac057c938572d1bc9331 \ + --hash=sha256:40a783fb7ee353c50bd3853e626f15677ea527ae556429453685ae32280c19c2 \ + --hash=sha256:41e81317dd6a0127cabce83c0c9c3fbecceae981c8391e6f1dec88a77c8a569a \ + --hash=sha256:41f4c96227a67a013e7de5ff8f20fb496ce573893b7f4f2707d065907bffdbd6 \ + --hash=sha256:469f29f9093c9d834432034d33f5fe45699e664f12a13bf38c04967ce233d688 \ + --hash=sha256:4745f4ac52cc6686390c40eaa01d48b18997cb130833154801a442323cc78f91 \ + --hash=sha256:4868f6bd7c9d98904b748a2653031fc9c2f85b6237009d475b1008bfaeb0a5aa \ + --hash=sha256:4aa223cd1e36b642092c326d694d8bf59b71ddddc94cdb752bbbb1c5c91d833b \ + --hash=sha256:4dd484681c15e6b9a977c785a345d3e378d72678fd5f1f3c0509608da24f2ac0 \ + --hash=sha256:4f2790949cf385d985a31984907fecb3896999329103df4e4983a4a41e13e840 \ + --hash=sha256:512ecfbefef6dac7bc5eaaf46177b2de58cdf7acac8793fe033b24ece0b9566c \ + --hash=sha256:516d9227919612425c8ef1c9b869bbbee249bc91912c8aaffb66116c0b447ebd \ + --hash=sha256:53e431da3fc53360db73eedf6f7124d1076e1b4ee4276b36fb25514544ceb4a3 \ + --hash=sha256:595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231 \ + --hash=sha256:5b5ff4911aea936a47d9376fd3ab17e970cc543d1b68921886e7f64bd28308d1 \ + --hash=sha256:5d41e6daee2813ecceea8eda38062d69e280b39df793f5a942fa515b8ed67953 \ + --hash=sha256:5e999ba8dd90e93d57410c5e67ebb67ffcaadcea0ad973240fdfd3a135506250 \ + --hash=sha256:5f239eb799a2081495ea659d8d4a43a8f42cd1fe9ff2e7e436295c38a10c286a \ + --hash=sha256:635fee4e041ab9c479e31edda27fcf966ea9614fff1317e280d99eb3e5ab6fe2 \ + --hash=sha256:65db0f2eefcaad1a3950f498aabb4875c8890438bc80b19362cf633b87a8ab20 \ + --hash=sha256:6b507132dcfc0dea440cce23ee2182c0ce7aba7054576efc65634f080dbe9434 \ + --hash=sha256:6b9d9bb600328a1ce523ab4f454859e9d439150abb0906c5a1983c146580ebab \ + --hash=sha256:70c8daf4faca8da5a6d655f9af86faf6ec2e1768f4b8b9d0226c02f3d6209703 \ + --hash=sha256:77bf3ac639c1ff567ae3b47f8d4cc3dc20f9966a2a6dd2311dcc055d3d04fb8a \ + --hash=sha256:784c1214cb6dd1e3b15dd8b91b9a53852aed16671cc3fbe4786f4f1db07089e2 \ + --hash=sha256:7eb6a0587eded33aeefea9f916899d42b1799b7b14b8f8ff2753c0ac1741edac \ + --hash=sha256:7ed1b0132f24beeec5a78b67d9388656d03e6a7c837394f99257e2d55b461611 \ + --hash=sha256:8ad4aeb3e9a97286573c03df758fc7627aecdd02f1da04516a86dc159bf70121 \ + --hash=sha256:964faa8a861d2664f0c7ab0c181af0bea66098b1919439815ca8803ef136fc4e \ + --hash=sha256:9dc1b507c12eb0481d071f3c1808f0529ad41dc415d0ca11f7ebfc666e66a18b \ + --hash=sha256:9ebfef07dbe1d93efb94b4700f2d278494e9162565a54f124c404a5656d7ff09 \ + --hash=sha256:a45f84b09ac9c3d35dfcf6a27fd0634d30d183205230a0ebe8373a0e8cfa0906 \ + --hash=sha256:a4f55095ad087474999ee28d3398bae183a66be4823f753cd7d67dd0153427c9 \ + --hash=sha256:a6d511cc297ff0883bc3708b465ff82d7560193169a8b93260f74ecb0a5e08a7 \ + --hash=sha256:a8ad4c766d3f33ba8fd692f9aa297c9058970530a32c728a2c4bfd2616d3358b \ + --hash=sha256:aa2f457b4af386254372dfa78a2eda2563680d982422641a85f271c859df1987 \ + --hash=sha256:b03f7941783b4c4a26051846dea594628b38f6940a2fdc0df00b221aed39314c \ + --hash=sha256:b0dae11d8f5ded51699c74d9548dcc5938e0804cc8298ec0aa0da95c21fff57b \ + --hash=sha256:b91ced227c41aa29c672814f50dbb05ec93536abf8f43cd14ec9521ea09afe4e \ + --hash=sha256:bc633a9fe1eb87e250b5c57d389cf28998e4292336926b0b6cdaee353f89a237 \ + --hash=sha256:bebb4d6715c814597f85297c332297c6ce81e29436125ca59d1159b07f423eb1 \ + --hash=sha256:c336a6d235522a62fef872c6295a42ecb0c4e1d0f1a3e500fe949415761b8a19 \ + --hash=sha256:c6514f963b023aeee506678a1cf821fe31159b925c4b76fe2afa94cc70b3222b \ + --hash=sha256:c693e916709c2465b02ca0ad7b387c4f8423d1db7b4649c551f27a529181c5ad \ + --hash=sha256:c81131869240e3e568916ef4c307f8b99583efaa60a8112ef27a366eefba8ef0 \ + --hash=sha256:d02a72df14dfdbaf228424573a07af10637bd490f0901cee872c4f434a735b94 \ + --hash=sha256:d2a8fa9d6d6f891f3deec72f5cc668e6f66b188ab14bb1ab52422fe8e644f312 \ + --hash=sha256:d2b27e6af28f07e2f195552b37d7d66b150adbaa39a6d327766ffd695799780f \ + --hash=sha256:d2fe69c5434391727efa54b47a1e7986bb0186e72a41b203df8f5b0a19a4f669 \ + --hash=sha256:d3f3ed29cd9f978c604708511a1f9c2fdcb6c38b9aae36a51905b8811ee5cbf1 \ + --hash=sha256:d573faf8eb7e6b1cbbcb4f5b247c60ca8be39fe2c674495df0eb4318303137fe \ + --hash=sha256:e0bbdd76ce9aa5d4209d65f2b27fc6e5ef1312ae6c5333c26db3f5ade53a1e99 \ + --hash=sha256:e7c4ea22b6739b162c9ecaaa41d718dfad48a244909fe7ef4b54c0b530effc5a \ + --hash=sha256:e93e1a4b4b33daed65d781a57a522ff153dcf748dee70b40c7258c5861e1768a \ + --hash=sha256:e97fdf088d4b31ff4ba35db26d9cc472ac7ef4a2ff2badeabf8d727b3377fc52 \ + --hash=sha256:e9fa4c9bf273ca41f940bceb86922a7667cd5bf90e95dbb157cbb8441008482c \ + --hash=sha256:eaad4ff2de1c3823fddf82f41121bdf453d922e9a238642b1dedb33c4e4f98ad \ + --hash=sha256:f1f62b2413c3a0e846c3b838b2ecd6c7a19ec6793b2a522745b0869e37ab5bc1 \ + --hash=sha256:f6d6cff3538391e8486a431569b77921adfcdef14eb18fbf19b7c0a5294d4e6a \ + --hash=sha256:f9aa05d09ecf4c75157197f27cdc9cfaeb7c5f15021c6373932bf3e124af029f \ + --hash=sha256:fa2fddcb7107e0d1808086ca306dcade7df60a13a6c347a7acf1ec139aa6789a \ + --hash=sha256:faa6b09ee09433b87992fb5a2859efd1c264ddc37280d2dd5db502126d0e7f27 + # via pydantic +pydantic-settings==2.3.4 \ + --hash=sha256:11ad8bacb68a045f00e4f862c7a718c8a9ec766aa8fd4c32e39a0594b207b53a \ + --hash=sha256:c5802e3d62b78e82522319bbc9b8f8ffb28ad1c988a99311d04f2a6051fca0a7 + # via bump-my-version +pygments==2.18.0 \ + --hash=sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199 \ + --hash=sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a + # via rich +pylint==3.3.3 \ + --hash=sha256:07c607523b17e6d16e2ae0d7ef59602e332caa762af64203c24b41c27139f36a \ + --hash=sha256:26e271a2bc8bce0fc23833805a9076dd9b4d5194e2a02164942cb3cdc37b4183 + # via -r CI/requirements_ci.in +python-dotenv==1.0.1 \ + --hash=sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca \ + --hash=sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a + # via pydantic-settings +pyyaml==6.0.2 \ + --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ + --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ + --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ + --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ + --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ + --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ + --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ + --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ + --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ + --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ + --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ + --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ + --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ + --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ + --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ + --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ + --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ + --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ + --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ + --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ + --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ + --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ + --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ + --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ + --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ + --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ + --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ + --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ + --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ + --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ + --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ + --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ + --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ + --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ + --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ + --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ + --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ + --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ + --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ + --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ + --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ + --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ + --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ + --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ + --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ + --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ + --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ + --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ + --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ + --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ + --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ + --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ + --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 + # via pre-commit +questionary==2.0.1 \ + --hash=sha256:8ab9a01d0b91b68444dff7f6652c1e754105533f083cbe27597c8110ecc230a2 \ + --hash=sha256:bcce898bf3dbb446ff62830c86c5c6fb9a22a54146f0f5597d3da43b10d8fc8b + # via bump-my-version +requests==2.32.3 \ + --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ + --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 + # via flit +rich==13.7.1 \ + --hash=sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222 \ + --hash=sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432 + # via + # bump-my-version + # rich-click +rich-click==1.8.3 \ + --hash=sha256:636d9c040d31c5eee242201b5bf4f2d358bfae4db14bb22ec1cafa717cfd02cd \ + --hash=sha256:6d75bdfa7aa9ed2c467789a0688bc6da23fbe3a143e19aa6ad3f8bac113d2ab3 + # via bump-my-version +tomli==2.2.1 \ + --hash=sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6 \ + --hash=sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd \ + --hash=sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c \ + --hash=sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b \ + --hash=sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8 \ + --hash=sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6 \ + --hash=sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77 \ + --hash=sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff \ + --hash=sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea \ + --hash=sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192 \ + --hash=sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249 \ + --hash=sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee \ + --hash=sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4 \ + --hash=sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98 \ + --hash=sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8 \ + --hash=sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4 \ + --hash=sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281 \ + --hash=sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744 \ + --hash=sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69 \ + --hash=sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13 \ + --hash=sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140 \ + --hash=sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e \ + --hash=sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e \ + --hash=sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc \ + --hash=sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff \ + --hash=sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec \ + --hash=sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2 \ + --hash=sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222 \ + --hash=sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106 \ + --hash=sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272 \ + --hash=sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a \ + --hash=sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7 + # via pylint +tomli-w==1.2.0 \ + --hash=sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90 \ + --hash=sha256:2dd14fac5a47c27be9cd4c976af5a12d87fb1f0b4512f81d69cce3b35ae25021 + # via flit +tomlkit==0.13.0 \ + --hash=sha256:08ad192699734149f5b97b45f1f18dad7eb1b6d16bc72ad0c2335772650d7b72 \ + --hash=sha256:7075d3042d03b80f603482d69bf0c8f345c2b30e41699fd8883227f89972b264 + # via + # bump-my-version + # pylint +typing-extensions==4.12.2 \ + --hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \ + --hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8 + # via + # astroid + # pydantic + # pydantic-core + # rich-click +urllib3==2.3.0 \ + --hash=sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df \ + --hash=sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d + # via requests +virtualenv==20.29.1 \ + --hash=sha256:4e4cb403c0b0da39e13b46b1b2476e505cb0046b25f242bee80f62bf990b2779 \ + --hash=sha256:b8b8970138d32fb606192cb97f6cd4bb644fa486be9308fb9b63f81091b5dc35 + # via pre-commit +wcmatch==8.5.2 \ + --hash=sha256:17d3ad3758f9d0b5b4dedc770b65420d4dac62e680229c287bf24c9db856a478 \ + --hash=sha256:a70222b86dea82fb382dd87b73278c10756c138bd6f8f714e2183128887b9eb2 + # via bump-my-version +wcwidth==0.2.13 \ + --hash=sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859 \ + --hash=sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5 + # via prompt-toolkit + +# WARNING: The following packages were not pinned, but pip requires them to be +# pinned when the requirements file includes hashes and the requirement is not +# satisfied by a package already installed. Consider using the --allow-unsafe flag. +# pip diff --git a/{{cookiecutter.project_slug}}/Makefile b/{{cookiecutter.project_slug}}/Makefile index 61f4a5fb7..262b50806 100644 --- a/{{cookiecutter.project_slug}}/Makefile +++ b/{{cookiecutter.project_slug}}/Makefile @@ -7,7 +7,7 @@ WPS_URL = http://localhost:{{ cookiecutter.http_port }} # Used in target refresh-notebooks to make it looks like the notebooks have # been refreshed from the production server below instead of from the local dev # instance so the notebooks can also be used as tutorial notebooks. -OUTPUT_URL = https://pavics.ouranos.ca/wpsoutputs +OUTPUT_URL = https://pavics.ouranos.ca/wpsoutputs/{{ cookiecutter.project_slug }} SANITIZE_FILE := https://github.com/Ouranosinc/PAVICS-e2e-workflow-tests/raw/master/notebooks/output-sanitize.cfg @@ -44,17 +44,14 @@ install: ## install {{ cookiecutter.project_slug }} application @-bash -c 'pip install -e .' @echo "\nStart service with \`make start\` and stop with \`make stop\`." -.PHONY: develop develop: ## install {{ cookiecutter.project_slug }} application with development libraries @echo "Installing development requirements for tests and docs ..." @-bash -c 'pip install -e ".[dev]"' -.PHONY: start start: ## start {{ cookiecutter.project_slug }} service as daemon (background process) @echo "Starting application ..." @-bash -c "$(APP_NAME) start -d" -.PHONY: stop stop: ## stop {{ cookiecutter.project_slug }} service @echo "Stopping application ..." @-bash -c "$(APP_NAME) stop" @@ -103,7 +100,7 @@ clean-docs: ## remove documentation artifacts @-rm -f docs/modules.rst $(MAKE) -C docs clean -lint/flake8: ## check style with flake8 +lint/ruff: ## check style with ruff @echo "Running flake8 code style checks ..." @bash -c 'ruff check {{ cookiecutter.project_slug }} tests' @@ -113,7 +110,7 @@ lint/black: ## check style with black @bash -c 'black --check {{ cookiecutter.project_slug }} tests' {%- endif %} -lint: lint/flake8{%- if cookiecutter.use_black == 'y' %} lint/black{%- endif %} ## check style +lint: lint/ruff{%- if cookiecutter.use_black == 'y' %} lint/black{%- endif %} ## check style ## Testing targets: @@ -128,11 +125,11 @@ test: ## run tests quickly with the default Python test-tox: ## run tests on every available Python version with tox @bash -c 'tox' -test-notebooks: notebook-sanitizer ## run notebook-based tests +test-notebooks: notebook-sanitizer ## run notebook-based tests @echo "Running notebook-based tests" @bash -c "env WPS_URL=$(WPS_URL) pytest --nbval --rootdir tests/ --verbose $(CURDIR)/docs/source/notebooks/ --sanitize-with $(CURDIR)/docs/source/output-sanitize.cfg --ignore $(CURDIR)/docs/source/notebooks/.ipynb_checkpoints" -test-notebooks-lax: notebook-sanitizer ## run tests on notebooks but don't be so strict about outputs +test-notebooks-lax: notebook-sanitizer ## run tests on notebooks but don't be so strict about outputs @echo "Running notebook-based tests" @bash -c "env WPS_URL=$(WPS_URL) pytest --nbval-lax --rootdir tests/ --verbose $(CURDIR)/docs/source/notebooks/ --ignore $(CURDIR)/docs/source/notebooks/.ipynb_checkpoints" diff --git a/{{cookiecutter.project_slug}}/docker-compose.yml b/{{cookiecutter.project_slug}}/docker-compose.yml index 5a856ecb1..95ef42aae 100644 --- a/{{cookiecutter.project_slug}}/docker-compose.yml +++ b/{{cookiecutter.project_slug}}/docker-compose.yml @@ -6,7 +6,6 @@ services: ports: - "{{ cookiecutter.http_port }}:{{ cookiecutter.http_port }}" - # docker-compose build # docker-compose up # docker-compose down diff --git a/{{cookiecutter.project_slug}}/docs/source/conf.py b/{{cookiecutter.project_slug}}/docs/source/conf.py index d1059b263..9ef032d62 100755 --- a/{{cookiecutter.project_slug}}/docs/source/conf.py +++ b/{{cookiecutter.project_slug}}/docs/source/conf.py @@ -99,10 +99,7 @@ templates_path = ["_templates"] # The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -# source_suffix = ['.rst', '.md'] -source_suffix = ".rst" +source_suffix = {".rst": "restructuredtext"} # The master toctree document. master_doc = "index" diff --git a/{{cookiecutter.project_slug}}/environment-dev.yml b/{{cookiecutter.project_slug}}/environment-dev.yml index 34c9b20a4..a124933d8 100644 --- a/{{cookiecutter.project_slug}}/environment-dev.yml +++ b/{{cookiecutter.project_slug}}/environment-dev.yml @@ -3,27 +3,30 @@ channels: - conda-forge - defaults dependencies: - - python >=3.9,<3.13 + - python >=3.10,<3.14 - pywps >=4.6 - jinja2 >=3.1.4 - click >=8.1.7 - psutil >=6.0.0 # development {%- if cookiecutter.use_black == 'y' %} - - black ==24.8.0 - - isort ==5.13.2 + - black ==25.1.0 {%- endif %} - bump-my-version >=0.26.0 - coverage >=7.5.0 - cruft >=2.15.0 - flit >=3.9.0,<4.0 + - ipython >=8.5.0 +{%- if cookiecutter.use_black == 'y' %} + - isort ==6.0.0 +{%- endif %} - nbsphinx >=0.9.5 - nbval >=0.10.0 {%- if cookiecutter.use_pytest == 'y' %} - pytest >=8.0.0 - pytest-cov >=5.0.0 {%- endif %} - - ruff >=0.5.7 - - sphinx >=7.0.0 - - tox >=4.18.0 + - ruff >=0.9.0 + - sphinx >=7.1.0 + - tox >=4.24.1 - watchdog >=4.0.0 diff --git a/{{cookiecutter.project_slug}}/environment-docs.yml b/{{cookiecutter.project_slug}}/environment-docs.yml index 9c4ed4f23..e256ad524 100644 --- a/{{cookiecutter.project_slug}}/environment-docs.yml +++ b/{{cookiecutter.project_slug}}/environment-docs.yml @@ -6,6 +6,6 @@ channels: dependencies: - python >=3.9,<3.13 - pywps >=4.6 - - sphinx >=7.0.0 + - sphinx >=7.1.0 - nbsphinx >=0.9.5 - ipython >=8.5.0 diff --git a/{{cookiecutter.project_slug}}/environment.yml b/{{cookiecutter.project_slug}}/environment.yml index ab75e0d7d..ce42e5b7d 100644 --- a/{{cookiecutter.project_slug}}/environment.yml +++ b/{{cookiecutter.project_slug}}/environment.yml @@ -3,7 +3,7 @@ channels: - conda-forge - defaults dependencies: - - python >=3.9,<3.13 + - python >=3.10,<3.14 - pywps >=4.6 - jinja2 >=3.1.4 - click >=8.1.7 diff --git a/{{cookiecutter.project_slug}}/pyproject.toml b/{{cookiecutter.project_slug}}/pyproject.toml index b5e6f60e9..d0bc8dd31 100644 --- a/{{cookiecutter.project_slug}}/pyproject.toml +++ b/{{cookiecutter.project_slug}}/pyproject.toml @@ -18,7 +18,7 @@ maintainers = [ {name = "{{ cookiecutter.full_name.replace('\"', '\\\"') }}", email = "{{ cookiecutter.email }}"} ] readme = {file = "README.rst", content-type = "text/x-rst"} -requires-python = ">=3.9.0" +requires-python = ">=3.10.0" keywords = ["wps", "pywps", "birdhouse", "{{ cookiecutter.project_slug }}"] {%- if cookiecutter.open_source_license in license_classifiers %} license = {file = "LICENSE"} @@ -35,10 +35,10 @@ classifiers = [ "Programming Language :: Python", "Natural Language :: English", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Topic :: Scientific/Engineering :: Atmospheric Science" ] dynamic = ["description", "version"] @@ -46,29 +46,31 @@ dependencies = [ "click >=8.1.7", "jinja2 >=3.1.4", "psutil >=6.0.0", - "pywps >=4.5.1,<4.6" + "pywps >=4.6" ] [project.optional-dependencies] dev = [ - "pip >=24.2.0", {%- if cookiecutter.use_black == 'y' %} - "black ==24.8.0", - "isort == 5.13.2", + "black ==24.10.0", {%- endif %} "bump-my-version >=0.26.0", "coverage >=7.5.0", "cruft >=2.15.0", "flit >=3.9.0,<4.0", + {%- if cookiecutter.use_black == 'y' %} + "isort == 6.0.0", + {%- endif %} "nbsphinx >=0.9.5", "nbval >=0.10.0", + "pip >=25.0", {%- if cookiecutter.use_pytest == 'y' %} "pytest >=8.0.0", "pytest-cov >=5.0.0", {%- endif %} - "ruff >=0.5.7", - "sphinx >=7.0.0", - "tox >=4.18.0", + "ruff >=0.9.0", + "sphinx >=7.1.0", + "tox >=4.24.1", "watchdog >=4.0.0" ] @@ -85,7 +87,6 @@ dev = [ [tool.black] target-version = [ - "py39", "py310", "py311", "py312", @@ -176,7 +177,7 @@ exclude = [ [tool.isort] profile = "black" -py_version = 39 +py_version = 310 {%- endif %} @@ -279,3 +280,11 @@ max-doc-length = 180 [tool.ruff.lint.pydocstyle] convention = "numpy" + +[tool.vulture] +exclude = [] +ignore_decorators = ["@pytest.fixture"] +ignore_names = [] +min_confidence = 90 +paths = ["src/{{ cookiecutter.project_slug }}", "tests"] +sort_by_size = true diff --git a/{{cookiecutter.project_slug}}/tox.ini b/{{cookiecutter.project_slug}}/tox.ini index 75d312d21..f7977bbe3 100644 --- a/{{cookiecutter.project_slug}}/tox.ini +++ b/{{cookiecutter.project_slug}}/tox.ini @@ -1,19 +1,22 @@ [tox] -min_version = 4.18.0 +min_version = 4.24.1 envlist = - py{39,310,311,312}, + py{310,311,312} lint -requires = pip >= 24.2.0 -opts = -v +requires = + flit >=3.9,<4.0 + pip >= 25.0 +opts = + --verbose [testenv:lint] basepython = python deps = {%- if cookiecutter.use_black == 'y' %} - black >=24.8.0 - isort >=5.13.2 + black >=25.1.0 + isort >=6.0.0 {%- endif %} - ruff >=0.5.7 + ruff >=0.9.0 commands = make lint allowlist_externals = From 824bdb12ec9ade3d19675f3691fb9d6d2e7d096a Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 3 Feb 2025 16:06:43 -0500 Subject: [PATCH 2/6] Update template readme, vulture configuration, dependency sync, docstrings --- .github/workflows/main.yml | 7 +- CI/requirements_ci.txt | 4 +- README.rst | 16 ++-- docs/source/index.rst | 1 + docs/source/troubleshooting.rst | 44 +++++++++ environment.yml | 16 ++-- pyproject.toml | 34 ++++--- tox.ini | 6 +- .../.github/workflows/docker-testing.yml | 12 ++- .../.github/workflows/main.yml | 2 +- .../.pre-commit-config.yaml | 1 + {{cookiecutter.project_slug}}/README.rst | 95 +++++++++++++++---- .../environment-dev.yml | 2 +- .../environment-docs.yml | 1 + {{cookiecutter.project_slug}}/pyproject.toml | 29 +++++- .../src/{{cookiecutter.project_slug}}/cli.py | 70 ++++++++++++-- .../src/{{cookiecutter.project_slug}}/wsgi.py | 16 +++- {{cookiecutter.project_slug}}/tests/common.py | 2 +- .../test_{{cookiecutter.project_slug}}.py | 4 +- 19 files changed, 281 insertions(+), 81 deletions(-) create mode 100644 docs/source/troubleshooting.rst diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b7c2c119e..5026cc17c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -17,8 +17,6 @@ jobs: strategy: matrix: include: - - tox-env: py39 - python-version: "3.9" - tox-env: py310 python-version: "3.10" - tox-env: py311 @@ -33,10 +31,7 @@ jobs: - name: Checkout repository and submodules uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: - submodules: recursive - - name: Install packages - run: | - sudo apt-get -y install pandoc + persist-credentials: false - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: diff --git a/CI/requirements_ci.txt b/CI/requirements_ci.txt index 098582bda..e90b10b54 100644 --- a/CI/requirements_ci.txt +++ b/CI/requirements_ci.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.10 # by the following command: # # pip-compile --generate-hashes --output-file=CI/requirements_ci.txt CI/requirements_ci.in @@ -85,7 +85,7 @@ tomli==2.2.1 \ tox==4.24.1 \ --hash=sha256:083a720adbc6166fff0b7d1df9d154f9d00bfccb9403b8abf6bc0ee435d6a62e \ --hash=sha256:57ba7df7d199002c6df8c2db9e6484f3de6ca8f42013c083ea2d4d1e5c6bdc75 - # via -r requirements_ci.in + # via -r CI/requirements_ci.in typing-extensions==4.12.2 \ --hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \ --hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8 diff --git a/README.rst b/README.rst index 79a3bd5c1..cbd3abf91 100644 --- a/README.rst +++ b/README.rst @@ -197,16 +197,16 @@ Make a new version of this Cookiecutter in the following steps: See the bump-my-version_ documentation for details. +.. _0.2.x: https://github.com/bird-house/cookiecutter-birdhouse/tree/0.2.x .. _Cookiecutter: https://github.com/audreyr/cookiecutter .. _Cruft: https://cruft.github.io/cruft/ -.. _`cookiecutter-pypackage tutorial`: https://cookiecutter-pypackage.readthedocs.io/en/latest/tutorial.html -.. _cruft_skip: https://github.com/bird-house/emu/commit/fb1ff9ffdf9e7f0282b36ff0727996cba3bf081a -.. _cruft_link: https://github.com/bird-house/finch/pull/128/commits/0b0d7f37966cbb5bf345dfd4b4ac7953f38f4867 .. _GitHub_Workflows: https://docs.github.com/en/actions/using-workflows -.. _Tox: http://testrun.org/tox/ -.. _Sphinx: http://sphinx-doc.org/ +.. _Mkdocs: https://pypi.org/project/mkdocs/ +.. _PyPI: https://pypi.python.org/pypi .. _ReadTheDocs: https://readthedocs.io/ +.. _Sphinx: http://sphinx-doc.org/ +.. _Tox: http://testrun.org/tox/ +.. _`cookiecutter-pypackage tutorial`: https://cookiecutter-pypackage.readthedocs.io/en/latest/tutorial.html .. _bump-my-version: https://github.com/callowayproject/bump-my-version -.. _0.2.x: https://github.com/bird-house/cookiecutter-birdhouse/tree/0.2.x -.. _PyPI: https://pypi.python.org/pypi -.. _Mkdocs: https://pypi.org/project/mkdocs/ +.. _cruft_link: https://github.com/bird-house/finch/pull/128/commits/0b0d7f37966cbb5bf345dfd4b4ac7953f38f4867 +.. _cruft_skip: https://github.com/bird-house/emu/commit/fb1ff9ffdf9e7f0282b36ff0727996cba3bf081a diff --git a/docs/source/index.rst b/docs/source/index.rst index 7f33e91c4..50074b1b7 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -15,6 +15,7 @@ Getting Started readme tutorial pypi_release_checklist + troubleshooting Basics ------ diff --git a/docs/source/troubleshooting.rst b/docs/source/troubleshooting.rst new file mode 100644 index 000000000..79d30c08c --- /dev/null +++ b/docs/source/troubleshooting.rst @@ -0,0 +1,44 @@ +.. _troubleshooting: + +=============== +Troubleshooting +=============== + +I created a cookiecutter, but it doesn't work, and I can't figure out why +------------------------------------------------------------------------- + +* Try upgrading to Cookiecutter 0.8.0, which prints better error + messages and has fixes for several common bugs. + +I'm having trouble generating Jinja templates from Jinja templates +------------------------------------------------------------------ + +Make sure you escape things properly, like this:: + + {{ "{{" }} + +Or this:: + + {% raw %} +

Go Home

+ {% endraw %} + +Or this:: + + {{ {{ url_for('home') }} }} + +See https://jinja.palletsprojects.com/en/latest/templates/#escaping for more info. + +You can also use the `_copy_without_render`_ key in your `cookiecutter.json` +file to escape entire files and directories. + +.. _`_copy_without_render`: http://cookiecutter.readthedocs.io/en/latest/advanced/copy_without_render.html + + +Other common issues +------------------- + +TODO: add a bunch of common new user issues here. + +This document is incomplete. If you have knowledge that could help other users, +adding a section or filing an issue with details would be greatly appreciated. diff --git a/environment.yml b/environment.yml index 4b3642776..5bf1776ad 100644 --- a/environment.yml +++ b/environment.yml @@ -2,19 +2,21 @@ name: cookiecutter-birdhouse channels: - conda-forge dependencies: - - python>=3.9,<3.13 - - alabaster >=0.7.16 - - bump-my-version >=0.26.0 + - python>=3.10,<3.14 + - alabaster >=1.0.0 + - build >=1.2.2 + - bump-my-version >=0.30.1 - cookiecutter >=2.6.0 - cruft >=2.15.0 - cryptography - - pip >=24.2.0 + - pip >=25.0 + - pre-commit >=4.0.0 - psutil >=6.0.0 - pytest >=8.0.0 - pytest-cookies >=0.7.0 - pywps >=4.6 - pyyaml >=6.0.2 - - ruff >=0.5.7 - - sphinx >=7.0.0 - - tox >=4.18.0 + - ruff >=0.9.0 + - sphinx >=7.1.0 + - tox >=4.24.1 - watchdog >=4.0.0 diff --git a/pyproject.toml b/pyproject.toml index d7b55787b..24a412090 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,7 +17,7 @@ maintainers = [ ] license = {file = "LICENSE"} keywords = ["cookiecutter", "template", "package", "wps", "pywps", "birdhouse"] -requires-python = ">=3.9" +requires-python = ">=3.10" classifiers = [ "Development Status :: 4 - Beta", "Environment :: Console", @@ -26,31 +26,35 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development" ] +dependencies = [ + "cookiecutter >=2.6.0", +] [project.optional-dependencies] dev = [ - "alabaster>=0.7.16", - "build>=1.2.1", - "cookiecutter>=2.6.0", - "coverage>=7.5.1", - "flit>=3.9.0,<4.0", - "pre-commit>=3.8.0", - "pytest>=8.2.0", - "pytest-cookies>=0.7.0", + "alabaster >=1.0", + "build >=1.2.2", + "bump-my-version >=0.30.1", + "coverage >=7.5.1", + "cruft >=2.15.0", + "flit >=3.9.0,<4.0", + "pre-commit >=4.0.0", + "pytest >=8.2.0", + "pytest-cookies >=0.7.0", "pyyaml >=6.0.0", - "ruff>=0.5.7", - "sphinx>=7.0.0", - "tox>=4.18.0", - "twine>=5.1.1", - "watchdog>=4.0.0" + "ruff >=0.5.7", + "sphinx >=7.1.0", + "tox >=4.24.1", + "twine >=5.1.1", + "watchdog >=4.0.0" ] [project.urls] diff --git a/tox.ini b/tox.ini index 288a03d75..13933c46e 100644 --- a/tox.ini +++ b/tox.ini @@ -1,8 +1,8 @@ [tox] -min_version = 4.23.2 +min_version = 4.24.1 envlist = - py{39,310,311,312}, - pypy{39,310,311,312}, + py{310,311,312,313} + pypy{39,310} docs requires = pip >= 25.0 opts = --verbose diff --git a/{{cookiecutter.project_slug}}/.github/workflows/docker-testing.yml b/{{cookiecutter.project_slug}}/.github/workflows/docker-testing.yml index cc5eb267d..fb2f6e59d 100644 --- a/{{cookiecutter.project_slug}}/.github/workflows/docker-testing.yml +++ b/{{cookiecutter.project_slug}}/.github/workflows/docker-testing.yml @@ -6,10 +6,12 @@ on: - main pull_request: +{% raw -%} concurrency: # For a given workflow, if we push to the same branch, cancel all previous builds on that branch except on master. group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ github.ref != 'refs/heads/master' }} +{%- endraw %} permissions: contents: read @@ -41,7 +43,7 @@ jobs: with: context: . file: "Dockerfile" - tags: local${{ cookiecutter }}:latest + tags: local${{ cookiecutter.project_slug }}:latest load: true cache-from: type=gha cache-to: type=gha,mode=max @@ -49,10 +51,10 @@ jobs: - name: Run Docker image uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 # v3.0.0 with: - image: localfinch:latest + image: local${{ cookiecutter.project_slug }}:latest options: -p 5000:5000 run: | - finch start -d + ${{ cookiecutter.project_slug }} start -d sleep 2s - finch status - finch stop + ${{ cookiecutter.project_slug }} status + ${{ cookiecutter.project_slug }} stop diff --git a/{{cookiecutter.project_slug}}/.github/workflows/main.yml b/{{cookiecutter.project_slug}}/.github/workflows/main.yml index fdbad3812..6190d65ff 100644 --- a/{{cookiecutter.project_slug}}/.github/workflows/main.yml +++ b/{{cookiecutter.project_slug}}/.github/workflows/main.yml @@ -6,6 +6,7 @@ on: - main pull_request: +{% raw -%} concurrency: # For a given workflow, if we push to the same branch, cancel all previous builds on that branch except on main. group: ${{ github.workflow }}-${{ github.ref }} @@ -14,7 +15,6 @@ concurrency: permissions: contents: read -{% raw -%} jobs: lint: name: Code linting diff --git a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml index fb407affc..babe6d156 100644 --- a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml +++ b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml @@ -67,6 +67,7 @@ repos: - id: ruff args: [ '--fix' ] - id: ruff-format + exclude: ^tests/ - repo: https://github.com/jendrikseipp/vulture rev: 'v2.14' hooks: diff --git a/{{cookiecutter.project_slug}}/README.rst b/{{cookiecutter.project_slug}}/README.rst index 24d36762a..e92452128 100644 --- a/{{cookiecutter.project_slug}}/README.rst +++ b/{{cookiecutter.project_slug}}/README.rst @@ -4,24 +4,25 @@ {% for _ in cookiecutter.project_name %}={% endfor %} {% if is_open_source %} -.. image:: https://img.shields.io/pypi/v/{{ cookiecutter.project_slug }}.svg - :target: https://pypi.python.org/pypi/{{ cookiecutter.project_slug }} - -.. image:: https://github.com/{{ cookiecutter.github_username }}/{{ cookiecutter.project_slug }}/actions/workflows/main.yml/badge.svg - :target: https://github.com/{{ cookiecutter.github_username }}/{{ cookiecutter.project_slug }}/actions/workflows/main.yml - -.. image:: https://readthedocs.org/projects/{{ cookiecutter.project_slug | replace("_", "-") }}/badge/?version=latest - :target: https://{{ cookiecutter.project_slug | replace("_", "-") }}.readthedocs.io/en/latest/?version=latest - :alt: Documentation Status ++----------------------------+-----------------------------------------------------+ +| Versions | |pypi| |conda| |versions| | {%- endif %} - -.. image:: https://img.shields.io/github/license/{{ cookiecutter.github_username }}/{{ cookiecutter.project_repo_name }}.svg - :target: https://github.com/{{ cookiecutter.github_username }}/{{ cookiecutter.project_repo_name }}/blob/master/LICENSE.txt - :alt: GitHub license - -.. image:: https://badges.gitter.im/bird-house/birdhouse.svg - :target: https://gitter.im/bird-house/birdhouse?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge - :alt: Join the chat at https://gitter.im/bird-house/birdhouse ++----------------------------+-----------------------------------------------------+ +| Documentation and Support | |docs| |gitter| | +{%- if is_open_source %} ++----------------------------+-----------------------------------------------------+ +| Open Source | |license| | +{%- endif %} +{%- if cookiecutter.use_black == 'y' %} ++----------------------------+-----------------------------------------------------+ +| Coding Standards | |black| |isort| |pre-commit| |ruff| | +{%- else %} ++----------------------------+-----------------------------------------------------+ +| Coding Standards | |pre-commit| |ruff| | +{%- endif %} ++----------------------------+-----------------------------------------------------+ +| Development Status | |status| |build| | ++----------------------------+-----------------------------------------------------+ {{ cookiecutter.project_name }} (the bird) *{{ cookiecutter.project_name }} is a bird ...* @@ -40,7 +41,7 @@ Contributing You can find information about contributing in our `Developer Guide`_. -Please use bump2version_ to release a new version. +Please use bump-my-version_ to release a new version. {% if is_open_source %} License @@ -58,4 +59,60 @@ This package was created with Cookiecutter_ and the `bird-house/cookiecutter-bir .. _Cookiecutter: https://github.com/audreyr/cookiecutter .. _`bird-house/cookiecutter-birdhouse`: https://github.com/bird-house/cookiecutter-birdhouse .. _`Developer Guide`: https://{{ cookiecutter.project_readthedocs_name }}.readthedocs.io/en/latest/dev_guide.html -.. _bump2version: https://{{ cookiecutter.project_readthedocs_name }}.readthedocs.io/en/latest/dev_guide.html#bump-a-new-version +.. _bump-my-version: https://{{ cookiecutter.project_readthedocs_name }}.readthedocs.io/en/latest/dev_guide.html#bump-a-new-version + +{% if cookiecutter.use_black == 'y' -%} +.. |black| image:: https://img.shields.io/badge/code%20style-black-000000.svg + :target: https://github.com/psf/black + :alt: Python Black + +{% endif -%} +.. |build| image:: https://github.com/{{ cookiecutter.github_username }}/{{ cookiecutter.project_slug }}/actions/workflows/main.yml/badge.svg + :target: https://github.com/{{ cookiecutter.github_username }}/{{ cookiecutter.project_slug }}/actions/workflows/main.yml + :alt: Build Status + +.. |conda| image:: https://img.shields.io/conda/vn/conda-forge/{{ cookiecutter.project_slug }}.svg + :target: https://anaconda.org/conda-forge/{{ cookiecutter.project_slug }} + :alt: Conda-forge Build Version + +.. |docs| image:: https://readthedocs.org/projects/{{ cookiecutter.project_slug | replace("_", "-") }}/badge/?version=latest + :target: https://{{ cookiecutter.project_slug | replace("_", "-") }}.readthedocs.io/en/latest/?version=latest + :alt: Documentation Status + +.. |gitter| image:: https://badges.gitter.im/bird-house/birdhouse.svg + :target: https://gitter.im/bird-house/birdhouse + :alt: Bird-house Gitter Chat + +{%- if cookiecutter.use_black == 'y' %} + +.. |isort| image:: https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336 + :target: https://pycqa.github.io/isort/ + :alt: Isort +{%- endif -%} + +{%- if is_open_source %} + +.. |license| image:: https://img.shields.io/github/license/{{ cookiecutter.github_username }}/{{ cookiecutter.project_repo_name }}.svg + :target: https://github.com/{{ cookiecutter.github_username }}/{{ cookiecutter.project_repo_name }}/blob/main/LICENSE.txt + :alt: License + +.. |pypi| image:: https://img.shields.io/pypi/v/{{ cookiecutter.project_slug }}.svg + :target: https://pypi.python.org/pypi/{{ cookiecutter.project_slug }} + :alt: Python Package Index Build +{%- endif %} + +.. |pre-commit| image:: https://results.pre-commit.ci/badge/github/{{ cookiecutter.github_username }}/{{ cookiecutter.project_repo_name }}/main.svg + :target: https://results.pre-commit.ci/latest/github/{{ cookiecutter.github_username }}/{{ cookiecutter.project_repo_name }}/main + :alt: pre-commit.ci status + +.. |ruff| image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json + :target: https://github.com/astral-sh/ruff + :alt: Ruff + +.. |status| image:: https://www.repostatus.org/badges/latest/wip.svg + :alt: Project Status: WIP – Initial development is in progress, but there has not yet been a stable, usable release suitable for the public. + :target: https://www.repostatus.org/#wip + +.. |versions| image:: https://img.shields.io/pypi/pyversions/{{ cookiecutter.project_slug }}.svg + :target: https://pypi.python.org/pypi/{{ cookiecutter.project_slug }} + :alt: Supported Python Versions diff --git a/{{cookiecutter.project_slug}}/environment-dev.yml b/{{cookiecutter.project_slug}}/environment-dev.yml index a124933d8..308ba69ee 100644 --- a/{{cookiecutter.project_slug}}/environment-dev.yml +++ b/{{cookiecutter.project_slug}}/environment-dev.yml @@ -12,7 +12,7 @@ dependencies: {%- if cookiecutter.use_black == 'y' %} - black ==25.1.0 {%- endif %} - - bump-my-version >=0.26.0 + - bump-my-version >=0.30.1 - coverage >=7.5.0 - cruft >=2.15.0 - flit >=3.9.0,<4.0 diff --git a/{{cookiecutter.project_slug}}/environment-docs.yml b/{{cookiecutter.project_slug}}/environment-docs.yml index e256ad524..e22bcd061 100644 --- a/{{cookiecutter.project_slug}}/environment-docs.yml +++ b/{{cookiecutter.project_slug}}/environment-docs.yml @@ -6,6 +6,7 @@ channels: dependencies: - python >=3.9,<3.13 - pywps >=4.6 + - alabaster >=1.0.0 - sphinx >=7.1.0 - nbsphinx >=0.9.5 - ipython >=8.5.0 diff --git a/{{cookiecutter.project_slug}}/pyproject.toml b/{{cookiecutter.project_slug}}/pyproject.toml index d0bc8dd31..6e1d17713 100644 --- a/{{cookiecutter.project_slug}}/pyproject.toml +++ b/{{cookiecutter.project_slug}}/pyproject.toml @@ -51,10 +51,11 @@ dependencies = [ [project.optional-dependencies] dev = [ + "alabaster >=1.0.0", {%- if cookiecutter.use_black == 'y' %} - "black ==24.10.0", + "black ==25.1.0", {%- endif %} - "bump-my-version >=0.26.0", + "bump-my-version >=0.30.1", "coverage >=7.5.0", "cruft >=2.15.0", "flit >=3.9.0,<4.0", @@ -194,6 +195,30 @@ module = "tests.*" allow_untyped_defs = true disable_error_code = "attr-defined" +[tool.numpydoc_validation] +checks = [ + "all", # report on all checks, except the below + "ES01", # "No extended summary found" + "EX01", # "No examples section found" + "GL06", # "Found unknown section \"{section}\"" + "SA01", # "See Also section not found", + "SS01" # "No summary found" +] +# remember to use single quotes for regex in TOML +exclude = [ + # don't report on objects that match any of these regex + '\.undocumented_method$', + '\.__repr__$', + # any object starting with an underscore is a private object + '\._\w+' +] +override_SS05 = [ + # override SS05 to allow docstrings starting with these words + '^Access ', + '^Assess ', + '^Process ' +] + {%- if cookiecutter.use_pytest == 'y' %} [tool.pytest.ini_options] diff --git a/{{cookiecutter.project_slug}}/src/{{cookiecutter.project_slug}}/cli.py b/{{cookiecutter.project_slug}}/src/{{cookiecutter.project_slug}}/cli.py index 327e355ca..211b2cbb7 100644 --- a/{{cookiecutter.project_slug}}/src/{{cookiecutter.project_slug}}/cli.py +++ b/{{cookiecutter.project_slug}}/src/{{cookiecutter.project_slug}}/cli.py @@ -25,8 +25,20 @@ ) -def write_user_config(**kwargs): - """Write a custom configuration file.""" +def write_user_config(**kwargs) -> Path: + r""" + Write a custom configuration file. + + Parameters + ---------- + **kwargs : dict + Configuration parameters. + + Returns + ------- + Path + The path to the written configuration file. + """ config_templ = template_env.get_template("pywps.cfg") rendered_config = config_templ.render(**kwargs) config_file = Path(__file__).parent.joinpath(".custom.cfg").resolve() @@ -35,8 +47,15 @@ def write_user_config(**kwargs): return config_file -def get_host(): - """Gather host information.""" +def get_host() -> tuple[str, int]: + """ + Gather host information. + + Returns + ------- + tuple[str, int] + The host and port. + """ url = configuration.get_config_value("server", "url") url = url or "http://localhost:{{ cookiecutter.http_port }}/wps" @@ -52,8 +71,15 @@ def get_host(): return host, port -def run_process_action(action=None): - """Run an action with psutil on current process and return a status message.""" +def run_process_action(action: str | None = None): + """ + Run an action with psutil on current process and return a status message. + + Parameters + ---------- + action : str, optional + The action to perform, by default "status". + """ action = action or "status" try: with PID_FILE.open() as fp: @@ -154,6 +180,35 @@ def start( Start PyWPS service. This service is by default available at http://localhost:{{ cookiecutter.http_port }}/wps + + Parameters + ---------- + config : str + Path to pywps configuration file. + bind_host : str + IP address used to bind service. + daemon : bool + Run in daemon mode. + hostname : str + Hostname in PyWPS configuration. + port : str + Port in PyWPS configuration. + maxsingleinputsize : str + Maxsingleinputsize in PyWPS configuration. + maxprocesses : int + Maxprocesses in PyWPS configuration. + parallelprocesses : int + Parallelprocesses in PyWPS configuration. + log_level : str + Log level in PyWPS configuration. + log_file : str + Log file in PyWPS configuration. + database : str + Database in PyWPS configuration. + outputurl : str + Base URL for file downloads. + outputpath : str + Base directory where outputs are written. """ if PID_FILE.exists(): click.echo(f'PID file exists: "{PID_FILE}". Service still running?') @@ -189,7 +244,8 @@ def start( with PID_FILE.open("w") as fp: fp.write(f"{pid}") except OSError as e: - raise Exception("%s [%d]" % (e.strerror, e.errno)) + msg = f"{e.strerror} [{e.errno}]" + raise Exception(msg) if pid == 0: os.setsid() diff --git a/{{cookiecutter.project_slug}}/src/{{cookiecutter.project_slug}}/wsgi.py b/{{cookiecutter.project_slug}}/src/{{cookiecutter.project_slug}}/wsgi.py index 442f852ba..7799ef452 100644 --- a/{{cookiecutter.project_slug}}/src/{{cookiecutter.project_slug}}/wsgi.py +++ b/{{cookiecutter.project_slug}}/src/{{cookiecutter.project_slug}}/wsgi.py @@ -8,8 +8,20 @@ from .processes import processes -def create_app(cfgfiles=None): - """Create PyWPS application.""" +def create_app(cfgfiles: list[str] | None = None) -> Service: + """ + Create PyWPS application. + + Parameters + ---------- + cfgfiles : list of str, optional + Configuration files to use. + + Returns + ------- + pywps.app.Service.Service + PyWPS application. + """ config_files = [Path(__file__).parent.joinpath("default.cfg")] if cfgfiles: config_files.extend(cfgfiles) diff --git a/{{cookiecutter.project_slug}}/tests/common.py b/{{cookiecutter.project_slug}}/tests/common.py index 527d81429..789815180 100644 --- a/{{cookiecutter.project_slug}}/tests/common.py +++ b/{{cookiecutter.project_slug}}/tests/common.py @@ -8,7 +8,7 @@ class WpsTestClient(WpsClient): - def get(self, *args, **kwargs): + def get(self, *args, **kwargs): # noqa: F841 query = "?" for key, value in kwargs.items(): query += f"{key}={value}&" diff --git a/{{cookiecutter.project_slug}}/tests/test_{{cookiecutter.project_slug}}.py b/{{cookiecutter.project_slug}}/tests/test_{{cookiecutter.project_slug}}.py index 2dce31513..76dfa7408 100644 --- a/{{cookiecutter.project_slug}}/tests/test_{{cookiecutter.project_slug}}.py +++ b/{{cookiecutter.project_slug}}/tests/test_{{cookiecutter.project_slug}}.py @@ -7,9 +7,9 @@ {% else %} import unittest {%- endif %} -from click.testing import CliRunner +from click.testing import CliRunner # noqa: F401 -import {{ cookiecutter.project_slug }} +import {{ cookiecutter.project_slug }} # noqa: F401 from {{ cookiecutter.project_slug }} import cli {%- if cookiecutter.use_pytest == 'y' %} From 695bdb25d6d2e53ae22f6319daa43a196222cd48 Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 3 Feb 2025 16:33:23 -0500 Subject: [PATCH 3/6] update readme badges --- README.rst | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/README.rst b/README.rst index cbd3abf91..f3a96ed6e 100644 --- a/README.rst +++ b/README.rst @@ -2,25 +2,7 @@ Cookiecutter for Birdhouse ========================== -.. image:: https://img.shields.io/badge/docs-latest-brightgreen.svg - :target: http://cookiecutter-birdhouse.readthedocs.org/en/latest/?badge=latest - :alt: Documentation Status - -.. image:: https://github.com/bird-house/cookiecutter-birdhouse/actions/workflows/main.yml/badge.svg - :target: https://github.com/bird-house/cookiecutter-birdhouse/actions/workflows/main.yml - :alt: GitHub Workflows - -.. image:: https://readthedocs.org/projects/cookiecutter-pypackage/badge/?version=latest - :target: https://cookiecutter-pypackage.readthedocs.io/en/latest/?badge=latest - :alt: Documentation Status - -.. image:: https://img.shields.io/github/license/bird-house/cookiecutter-birdhouse.svg - :target: https://github.com/bird-house/cookiecutter-birdhouse/blob/master/LICENSE - :alt: GitHub license - -.. image:: https://badges.gitter.im/bird-house/birdhouse.svg - :target: https://gitter.im/bird-house/birdhouse?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge - :alt: Join the chat at https://gitter.im/bird-house/birdhouse +|build| |docs| |license| |gitter| Cookiecutter_ template for a Python package. @@ -210,3 +192,20 @@ See the bump-my-version_ documentation for details. .. _bump-my-version: https://github.com/callowayproject/bump-my-version .. _cruft_link: https://github.com/bird-house/finch/pull/128/commits/0b0d7f37966cbb5bf345dfd4b4ac7953f38f4867 .. _cruft_skip: https://github.com/bird-house/emu/commit/fb1ff9ffdf9e7f0282b36ff0727996cba3bf081a + + +.. |docs| image:: https://img.shields.io/badge/docs-latest-brightgreen.svg + :target: http://cookiecutter-birdhouse.readthedocs.org/en/latest/?badge=latest + :alt: Documentation Status + +.. |build| image:: https://github.com/bird-house/cookiecutter-birdhouse/actions/workflows/main.yml/badge.svg + :target: https://github.com/bird-house/cookiecutter-birdhouse/actions/workflows/main.yml + :alt: GitHub Workflows + +.. |license| image:: https://img.shields.io/github/license/bird-house/cookiecutter-birdhouse.svg + :target: https://github.com/bird-house/cookiecutter-birdhouse/blob/master/LICENSE + :alt: License + +.. |gitter| image:: https://badges.gitter.im/bird-house/birdhouse.svg + :target: https://gitter.im/bird-house/birdhouse?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge + :alt: Bird-house Gitter chat From ddc2f7e766ca37bc3f4c8b245b0e0815a32bb489 Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 3 Feb 2025 18:24:16 -0500 Subject: [PATCH 4/6] drop support for PyPy3.9, update flit --- .github/workflows/main.yml | 11 ++++++++--- {{cookiecutter.project_slug}}/environment-dev.yml | 2 +- {{cookiecutter.project_slug}}/pyproject.toml | 4 ++-- {{cookiecutter.project_slug}}/tox.ini | 2 +- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5026cc17c..983143c95 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -23,12 +23,17 @@ jobs: python-version: "3.11" - tox-env: py312 python-version: "3.12" - - tox-env: pypy39 - python-version: "pypy-3.9" + - tox-env: py313 + python-version: "3.13" - tox-env: pypy310 python-version: "pypy-3.10" steps: - - name: Checkout repository and submodules + - name: Harden Runner + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 + with: + disable-sudo: true + egress-policy: audit + - name: Checkout Repository uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false diff --git a/{{cookiecutter.project_slug}}/environment-dev.yml b/{{cookiecutter.project_slug}}/environment-dev.yml index 308ba69ee..64f580d2a 100644 --- a/{{cookiecutter.project_slug}}/environment-dev.yml +++ b/{{cookiecutter.project_slug}}/environment-dev.yml @@ -15,7 +15,7 @@ dependencies: - bump-my-version >=0.30.1 - coverage >=7.5.0 - cruft >=2.15.0 - - flit >=3.9.0,<4.0 + - flit >=3.10.1,<4.0 - ipython >=8.5.0 {%- if cookiecutter.use_black == 'y' %} - isort ==6.0.0 diff --git a/{{cookiecutter.project_slug}}/pyproject.toml b/{{cookiecutter.project_slug}}/pyproject.toml index 6e1d17713..469e53d88 100644 --- a/{{cookiecutter.project_slug}}/pyproject.toml +++ b/{{cookiecutter.project_slug}}/pyproject.toml @@ -6,7 +6,7 @@ 'GNU General Public License v3': 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)' } -%} [build-system] -requires = ["flit_core >=3.9,<4"] +requires = ["flit_core >=3.10.1,<4"] build-backend = "flit_core.buildapi" [project] @@ -58,7 +58,7 @@ dev = [ "bump-my-version >=0.30.1", "coverage >=7.5.0", "cruft >=2.15.0", - "flit >=3.9.0,<4.0", + "flit >=3.10.1,<4.0", {%- if cookiecutter.use_black == 'y' %} "isort == 6.0.0", {%- endif %} diff --git a/{{cookiecutter.project_slug}}/tox.ini b/{{cookiecutter.project_slug}}/tox.ini index f7977bbe3..31f9564eb 100644 --- a/{{cookiecutter.project_slug}}/tox.ini +++ b/{{cookiecutter.project_slug}}/tox.ini @@ -4,7 +4,7 @@ envlist = py{310,311,312} lint requires = - flit >=3.9,<4.0 + flit >=3.10.1,<4.0 pip >= 25.0 opts = --verbose From 41f8c6d33c197dd909402beed4f05247c7e6c8bc Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 3 Feb 2025 18:29:12 -0500 Subject: [PATCH 5/6] conda package is called python-build --- environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/environment.yml b/environment.yml index 5bf1776ad..dbbde8b29 100644 --- a/environment.yml +++ b/environment.yml @@ -4,7 +4,7 @@ channels: dependencies: - python>=3.10,<3.14 - alabaster >=1.0.0 - - build >=1.2.2 + - python-build >=1.2.2 - bump-my-version >=0.30.1 - cookiecutter >=2.6.0 - cruft >=2.15.0 From 3f04c0b568417e9ccce988546f4179b6d3616a9a Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Tue, 4 Feb 2025 13:53:28 -0500 Subject: [PATCH 6/6] update CHANGELOG.rst --- CHANGELOG.rst | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 1b3d02767..c4b5c72f6 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,20 @@ CHANGES ******** +1.1.0 (2025-02-04) +================== + +Changes: + +* Fixed a bug the Dockerfile configuration. (hotfix) +* Added several workflows to help with testing, docker images, and version bumping. (#129). +* Reorganized README files to organize badges better. (#129). +* Added several pre-commit hooks to help with code organization, docstrings, finding dead code blocks, etc. (#129). +* Dropped support for Python3.9, extended support for Python3.13. (#129). +* Now using a CI folder for managing CI-specific Python dependencies.(#129). +* Updated several development dependencies. (#129). +* Now using a Dependabot configuration for managing Python and GitHub Actions updates. (#129). + 1.0.0 (2024-10-03) ==================