From a25bd988443f33fd142b5e82f35123374062e2e0 Mon Sep 17 00:00:00 2001 From: Tobias Raabe Date: Mon, 7 Feb 2022 17:40:37 +0100 Subject: [PATCH 1/7] Deprecate Python 3.6. Committed via https://github.com/asottile/all-repos --- .pre-commit-config.yaml | 3 ++- {{cookiecutter.project_slug}}/.pre-commit-config.yaml | 3 ++- {{cookiecutter.project_slug}}/setup.cfg | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f03099d..c3765aa 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -32,11 +32,12 @@ repos: rev: v2.31.0 hooks: - id: pyupgrade - args: [--py36-plus] + args: [--py37-plus] - repo: https://github.com/asottile/reorder_python_imports rev: v2.6.0 hooks: - id: reorder-python-imports + args: [--py37-plus, --add-import, 'from __future__ import annotations'] - repo: https://github.com/psf/black rev: 21.12b0 hooks: diff --git a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml index f685c7e..b507f94 100644 --- a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml +++ b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml @@ -32,11 +32,12 @@ repos: rev: v2.29.1 hooks: - id: pyupgrade - args: [--py36-plus] + args: [--py37-plus] - repo: https://github.com/asottile/reorder_python_imports rev: v2.6.0 hooks: - id: reorder-python-imports + args: [--py37-plus, --add-import, 'from __future__ import annotations'] - repo: https://github.com/asottile/setup-cfg-fmt rev: v1.20.0 hooks: diff --git a/{{cookiecutter.project_slug}}/setup.cfg b/{{cookiecutter.project_slug}}/setup.cfg index 1eb243c..f65bd33 100644 --- a/{{cookiecutter.project_slug}}/setup.cfg +++ b/{{cookiecutter.project_slug}}/setup.cfg @@ -32,7 +32,7 @@ project_urls = packages = find: install_requires = pytask -python_requires = >=3.6.1 +python_requires = >=3.7 include_package_data = True package_dir = =src From ab8a4b0601d74d9acca30a929d316b7a710ac0eb Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 7 Feb 2022 16:41:17 +0000 Subject: [PATCH 2/7] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- docs/source/conf.py | 1 + hooks/post_gen_project.py | 2 ++ hooks/pre_gen_project.py | 2 ++ tests/__init__.py | 1 + tests/test_cookie.py | 2 ++ .../src/{{cookiecutter.project_slug}}/config.py | 2 ++ 6 files changed, 10 insertions(+) diff --git a/docs/source/conf.py b/docs/source/conf.py index 4e6a941..2ceead7 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -5,6 +5,7 @@ """ # -- Project information ----------------------------------------------------- +from __future__ import annotations project = "cookiecutter-pytask-project" author = "Tobias Raabe" diff --git a/hooks/post_gen_project.py b/hooks/post_gen_project.py index 6cf1f89..78f8c82 100644 --- a/hooks/post_gen_project.py +++ b/hooks/post_gen_project.py @@ -1,4 +1,6 @@ """This module contains hooks which are executed after the template is rendered.""" +from __future__ import annotations + import shutil import subprocess import warnings diff --git a/hooks/pre_gen_project.py b/hooks/pre_gen_project.py index 1125117..504b6c9 100644 --- a/hooks/pre_gen_project.py +++ b/hooks/pre_gen_project.py @@ -1,4 +1,6 @@ """This module contains hooks which are executed before the template is rendered.""" +from __future__ import annotations + import re MODULE_REGEX = r"^[-_a-zA-Z0-9]*$" diff --git a/tests/__init__.py b/tests/__init__.py index 6cc8cb4..83a9d18 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1 +1,2 @@ """This file is necessary to apply custom mypy configurations for the tests.""" +from __future__ import annotations diff --git a/tests/test_cookie.py b/tests/test_cookie.py index e4c99c2..1e3c3b6 100644 --- a/tests/test_cookie.py +++ b/tests/test_cookie.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import os import subprocess import sys diff --git a/{{cookiecutter.project_slug}}/src/{{cookiecutter.project_slug}}/config.py b/{{cookiecutter.project_slug}}/src/{{cookiecutter.project_slug}}/config.py index 4ae341a..14ea990 100644 --- a/{{cookiecutter.project_slug}}/src/{{cookiecutter.project_slug}}/config.py +++ b/{{cookiecutter.project_slug}}/src/{{cookiecutter.project_slug}}/config.py @@ -1,4 +1,6 @@ """This module contains the general configuration of the project.""" +from __future__ import annotations + from pathlib import Path From a2c0ef75bfd7065a64e4acf3b1c5525bd69b84e6 Mon Sep 17 00:00:00 2001 From: Tobias Raabe Date: Wed, 9 Feb 2022 01:00:17 +0100 Subject: [PATCH 3/7] bump to 310 and fix regex. --- .github/workflows/main.yml | 4 ++-- hooks/pre_gen_project.py | 4 ++-- {{cookiecutter.project_slug}}/.github/workflows/main.yml | 8 ++++---- {{cookiecutter.project_slug}}/setup.cfg | 1 - 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c1362b4..0796497 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,7 +21,7 @@ jobs: fail-fast: false matrix: os: ['ubuntu-latest', 'macos-latest', 'windows-latest'] - python-version: ['3.7', '3.8', '3.9'] + python-version: ['3.7', '3.8', '3.9', '3.10'] steps: - uses: actions/checkout@v2 @@ -39,7 +39,7 @@ jobs: run: tox -e pytest -- tests -m end_to_end --cov=./ --cov-report=xml -n auto - name: Upload coverage reports of end-to-end tests. - if: runner.os == 'Linux' && matrix.python-version == '3.8' + if: runner.os == 'Linux' && matrix.python-version == '3.9' shell: bash -l {0} run: bash <(curl -s https://codecov.io/bash) -F end_to_end -c diff --git a/hooks/pre_gen_project.py b/hooks/pre_gen_project.py index 504b6c9..69836dd 100644 --- a/hooks/pre_gen_project.py +++ b/hooks/pre_gen_project.py @@ -5,7 +5,7 @@ MODULE_REGEX = r"^[-_a-zA-Z0-9]*$" ENVIRON_REGEX = r"^[-_a-zA-Z0-9]*$" -PYTHONVERSION_REGEX = r"^(3)\.[6-9]$" +PYTHONVERSION_REGEX = r"^(3\.(10|[7-9])(\.[0-9]{1,2})?)$" EXCEPTION_MSG_MODULE_NAME = """ ERROR: The project slug ({module_name}) is not a valid Python module name. @@ -35,7 +35,7 @@ def main(): python_version = "{{ cookiecutter.python_version }}" if not re.match(PYTHONVERSION_REGEX, python_version): - raise ValueError("ERROR: The python version must be >= 3.6") # noqa: TC003 + raise ValueError("ERROR: The python version must be >= 3.7") # noqa: TC003 if __name__ == "__main__": diff --git a/{{cookiecutter.project_slug}}/.github/workflows/main.yml b/{{cookiecutter.project_slug}}/.github/workflows/main.yml index b8df04f..ea94885 100644 --- a/{{cookiecutter.project_slug}}/.github/workflows/main.yml +++ b/{{cookiecutter.project_slug}}/.github/workflows/main.yml @@ -25,7 +25,7 @@ jobs: fail-fast: false matrix: os: ['ubuntu-latest', 'macos-latest', 'windows-latest'] - python-version: ['3.7', '3.8', '3.9'] + python-version: ['3.7', '3.8', '3.9', '3.10'] steps: - uses: actions/checkout@v2 @@ -45,7 +45,7 @@ jobs: run: tox -e pytest -- src tests -m "unit or (not integration and not end_to_end)" --cov=./ --cov-report=xml -n auto - name: Upload coverage report for unit tests and doctests. - if: runner.os == 'Linux' && matrix.python-version == '3.8' + if: runner.os == 'Linux' && matrix.python-version == '3.9' shell: bash -l {0} run: bash <(curl -s https://codecov.io/bash) -F unit -c @@ -54,7 +54,7 @@ jobs: run: tox -e pytest -- src tests -m integration --cov=./ --cov-report=xml -n auto - name: Upload coverage reports of integration tests. - if: runner.os == 'Linux' && matrix.python-version == '3.8' + if: runner.os == 'Linux' && matrix.python-version == '3.9' shell: bash -l {0} run: bash <(curl -s https://codecov.io/bash) -F integration -c @@ -63,7 +63,7 @@ jobs: run: tox -e pytest -- src tests -m end_to_end --cov=./ --cov-report=xml -n auto - name: Upload coverage reports of end-to-end tests. - if: runner.os == 'Linux' && matrix.python-version == '3.8' + if: runner.os == 'Linux' && matrix.python-version == '3.9' shell: bash -l {0} run: bash <(curl -s https://codecov.io/bash) -F end_to_end -c diff --git a/{{cookiecutter.project_slug}}/setup.cfg b/{{cookiecutter.project_slug}}/setup.cfg index f65bd33..a10a8ad 100644 --- a/{{cookiecutter.project_slug}}/setup.cfg +++ b/{{cookiecutter.project_slug}}/setup.cfg @@ -17,7 +17,6 @@ classifiers = Operating System :: POSIX Programming Language :: Python :: 3 Programming Language :: Python :: 3 :: Only - Programming Language :: Python :: 3.6 Programming Language :: Python :: 3.7 Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 From 28e019080316f80f69d5635c06279c733fa478cb Mon Sep 17 00:00:00 2001 From: Tobias Raabe Date: Wed, 9 Feb 2022 01:03:03 +0100 Subject: [PATCH 4/7] instal py310 pytaks. --- environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/environment.yml b/environment.yml index 577fb20..6b35fd3 100644 --- a/environment.yml +++ b/environment.yml @@ -12,7 +12,7 @@ dependencies: # Package dependencies - cookiecutter - - pytask + - pytask >=0.1.7 # Misc - black From 022b7ad5f43142ca8e3b30bd693b2a68e4a8364f Mon Sep 17 00:00:00 2001 From: Tobias Raabe Date: Wed, 9 Feb 2022 01:32:19 +0100 Subject: [PATCH 5/7] Remove from future imports. --- .pre-commit-config.yaml | 1 - docs/source/conf.py | 2 +- hooks/post_gen_project.py | 2 -- hooks/pre_gen_project.py | 2 -- tests/__init__.py | 3 +-- tests/test_cookie.py | 2 -- {{cookiecutter.project_slug}}/.pre-commit-config.yaml | 1 - .../src/{{cookiecutter.project_slug}}/config.py | 4 ---- {{cookiecutter.project_slug}}/tests/__init__.py | 1 + 9 files changed, 3 insertions(+), 15 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7fd44eb..729026b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -37,7 +37,6 @@ repos: rev: v2.7.1 hooks: - id: reorder-python-imports - args: [--py37-plus, --add-import, 'from __future__ import annotations'] - repo: https://github.com/psf/black rev: 22.1.0 hooks: diff --git a/docs/source/conf.py b/docs/source/conf.py index 2ceead7..9bc4075 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -5,7 +5,7 @@ """ # -- Project information ----------------------------------------------------- -from __future__ import annotations + project = "cookiecutter-pytask-project" author = "Tobias Raabe" diff --git a/hooks/post_gen_project.py b/hooks/post_gen_project.py index 78f8c82..6cf1f89 100644 --- a/hooks/post_gen_project.py +++ b/hooks/post_gen_project.py @@ -1,6 +1,4 @@ """This module contains hooks which are executed after the template is rendered.""" -from __future__ import annotations - import shutil import subprocess import warnings diff --git a/hooks/pre_gen_project.py b/hooks/pre_gen_project.py index 69836dd..04e566f 100644 --- a/hooks/pre_gen_project.py +++ b/hooks/pre_gen_project.py @@ -1,6 +1,4 @@ """This module contains hooks which are executed before the template is rendered.""" -from __future__ import annotations - import re MODULE_REGEX = r"^[-_a-zA-Z0-9]*$" diff --git a/tests/__init__.py b/tests/__init__.py index 83a9d18..4045499 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,2 +1 @@ -"""This file is necessary to apply custom mypy configurations for the tests.""" -from __future__ import annotations +"""This module is necessary to configure mypy's behavior for the tests.""" diff --git a/tests/test_cookie.py b/tests/test_cookie.py index 1e3c3b6..e4c99c2 100644 --- a/tests/test_cookie.py +++ b/tests/test_cookie.py @@ -1,5 +1,3 @@ -from __future__ import annotations - import os import subprocess import sys diff --git a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml index b42e771..b706528 100644 --- a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml +++ b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml @@ -36,7 +36,6 @@ repos: rev: v2.7.1 hooks: - id: reorder-python-imports - args: [--py37-plus, --add-import, 'from __future__ import annotations'] - repo: https://github.com/asottile/setup-cfg-fmt rev: v1.20.0 hooks: diff --git a/{{cookiecutter.project_slug}}/src/{{cookiecutter.project_slug}}/config.py b/{{cookiecutter.project_slug}}/src/{{cookiecutter.project_slug}}/config.py index 14ea990..df50b41 100644 --- a/{{cookiecutter.project_slug}}/src/{{cookiecutter.project_slug}}/config.py +++ b/{{cookiecutter.project_slug}}/src/{{cookiecutter.project_slug}}/config.py @@ -1,14 +1,10 @@ """This module contains the general configuration of the project.""" -from __future__ import annotations - from pathlib import Path try: from ._version import version as __version__ except ImportError: - # broken installation, we don't even try unknown only works because we do poor mans - # version compare __version__ = "unknown" diff --git a/{{cookiecutter.project_slug}}/tests/__init__.py b/{{cookiecutter.project_slug}}/tests/__init__.py index e69de29..4045499 100644 --- a/{{cookiecutter.project_slug}}/tests/__init__.py +++ b/{{cookiecutter.project_slug}}/tests/__init__.py @@ -0,0 +1 @@ +"""This module is necessary to configure mypy's behavior for the tests.""" From bd2139a828eaa7b1c2852324a2c47cf7f188e139 Mon Sep 17 00:00:00 2001 From: Tobias Raabe Date: Wed, 9 Feb 2022 01:48:17 +0100 Subject: [PATCH 6/7] make mypy optional. --- .pre-commit-config.yaml | 6 +++++- cookiecutter.json | 1 + {{cookiecutter.project_slug}}/.pre-commit-config.yaml | 7 ++++--- {{cookiecutter.project_slug}}/LICENSE | 3 +-- {{cookiecutter.project_slug}}/README.rst | 4 ++-- {{cookiecutter.project_slug}}/pyproject.toml | 3 ++- 6 files changed, 15 insertions(+), 9 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 729026b..578df57 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -8,7 +8,11 @@ repos: - id: check-merge-conflict - id: check-vcs-permalinks - id: check-yaml - exclude: "{{cookiecutter.project_slug}}/environment.yml" + exclude: | + (?x)^( + {{cookiecutter.project_slug}}/environment.yml| + {{cookiecutter.project_slug}}/.pre-commit-config.yaml + )$ - id: debug-statements - id: end-of-file-fixer - id: fix-byte-order-marker diff --git a/cookiecutter.json b/cookiecutter.json index dc7291c..5d61e27 100644 --- a/cookiecutter.json +++ b/cookiecutter.json @@ -10,6 +10,7 @@ "python_version": "3.8", "add_tox": ["yes", "no"], "add_github_actions": ["yes", "no"], + "add_mypy": ["yes", "no"], "add_readthedocs": ["yes", "no"], "add_codecov": ["yes", "no"], "create_changelog": ["yes", "no"], diff --git a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml index b706528..39dfed0 100644 --- a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml +++ b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml @@ -35,7 +35,8 @@ repos: - repo: https://github.com/asottile/reorder_python_imports rev: v2.7.1 hooks: - - id: reorder-python-imports + - id: reorder-python-imports{% if cookiecutter.add_mypy == "yes" %} + args: [--py37-plus, --add-import, 'from __future__ import annotations']{% endif %} - repo: https://github.com/asottile/setup-cfg-fmt rev: v1.20.0 hooks: @@ -86,7 +87,7 @@ repos: rev: v1.0.1 hooks: - id: tryceratops -- repo: https://github.com/pre-commit/mirrors-mypy +{% if cookiecutter.add_mypy == "yes" %}- repo: https://github.com/pre-commit/mirrors-mypy rev: 'v0.931' hooks: - id: mypy @@ -95,7 +96,7 @@ repos: --ignore-missing-imports, ] pass_filenames: false -- repo: meta +{% endif %}- repo: meta hooks: - id: check-hooks-apply - id: check-useless-excludes diff --git a/{{cookiecutter.project_slug}}/LICENSE b/{{cookiecutter.project_slug}}/LICENSE index cfcfbfb..01e1d4c 100644 --- a/{{cookiecutter.project_slug}}/LICENSE +++ b/{{cookiecutter.project_slug}}/LICENSE @@ -758,5 +758,4 @@ into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -. -{% endif %} +.{% endif %} diff --git a/{{cookiecutter.project_slug}}/README.rst b/{{cookiecutter.project_slug}}/README.rst index 964e06d..1a6c493 100644 --- a/{{cookiecutter.project_slug}}/README.rst +++ b/{{cookiecutter.project_slug}}/README.rst @@ -39,5 +39,5 @@ Credits ------- This project was created with `cookiecutter `_ -and the `cookiecutter-pytask-project `_ -template. +and the `cookiecutter-pytask-project +`_ template. diff --git a/{{cookiecutter.project_slug}}/pyproject.toml b/{{cookiecutter.project_slug}}/pyproject.toml index 870324e..1805e3e 100644 --- a/{{cookiecutter.project_slug}}/pyproject.toml +++ b/{{cookiecutter.project_slug}}/pyproject.toml @@ -5,7 +5,7 @@ requires = ["setuptools>=45", "wheel", "setuptools_scm[toml]>=6.0"] [tool.setuptools_scm] write_to = "src/{{ cookiecutter.project_slug }}/_version.py" - +{% if cookiecutter.add_mypy == "yes" %} [tool.mypy] files = ["src", "tests"] check_untyped_defs = true @@ -21,3 +21,4 @@ warn_unused_ignores = true module = "tests.*" disallow_untyped_defs = false ignore_errors = true +{% endif %} From e208c2853923edfa690b8db969112cdbdb1b8c86 Mon Sep 17 00:00:00 2001 From: Tobias Raabe Date: Wed, 9 Feb 2022 01:53:32 +0100 Subject: [PATCH 7/7] fix pc. --- .pre-commit-config.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 578df57..801f3a1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -78,7 +78,13 @@ repos: rev: 1.5.0 hooks: - id: interrogate - args: [-v, --fail-under=40, "{{cookiecutter.project_slug}}"] + args: [ + -v, + --fail-under=40, + --config, + pyproject.toml, + "{{cookiecutter.project_slug}}" + ] pass_filenames: false - repo: https://github.com/codespell-project/codespell rev: v2.1.0