From eb48234ef10c13dc723716cc756218d43ec21312 Mon Sep 17 00:00:00 2001 From: Michele Ubik De Simoni Date: Thu, 19 Mar 2020 13:12:30 +0100 Subject: [PATCH] Update requirements and configure black --- .travis.yml | 13 +----------- hooks/post_gen_project.py | 1 - pyproject.toml | 31 ++++++++++++++++++++++++++++ requirements.txt | 40 ++++++++++++++++++------------------- requirements/base.txt | 4 ++-- requirements/dev.txt | 40 ++++++++++++++++++------------------- requirements/docs.txt | 6 +++--- requirements/linting.txt | 41 ++++++++++++++++++++++++++++++++++++++ requirements/test.txt | 16 +++++++-------- tests/test_bake_project.py | 3 ++- tox.ini | 10 +++++++++- 11 files changed, 137 insertions(+), 68 deletions(-) create mode 100644 pyproject.toml create mode 100644 requirements/linting.txt diff --git a/.travis.yml b/.travis.yml index 7bc5f7fe..aa6012b6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,6 @@ python: - 3.7 stages: - Black - - Pylint install: &requirements - pip install -r requirements.txt - pip install tox-travis @@ -17,14 +16,4 @@ jobs: - stage: Black install: *requirements script: - - echo excluding $(git config --file .gitmodules --get-regexp path | awk '{ print - $2 }') - - black --exclude $(git config --file .gitmodules --get-regexp path | awk '{ print - $2 }') --check . - - stage: Pylint - install: *requirements - script: - - pip --no-cache-dir install pylint-runner - - pylint_runner --rcfile=.pylintrc --output-format=text . | tee pylint.txt - - score=$(sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p' pylint.txt) - - if (( $(echo "$score < 8" |bc -l) )); then echo "Your Pylint score is too low, $score < 8!"; exit 1; fi + - tox -e black diff --git a/hooks/post_gen_project.py b/hooks/post_gen_project.py index 242f5706..8106e786 100644 --- a/hooks/post_gen_project.py +++ b/hooks/post_gen_project.py @@ -5,7 +5,6 @@ import os import subprocess - PROJECT_DIRECTORY = os.path.realpath(os.path.curdir) diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..d2f9da4f --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,31 @@ +[tool.black] +line-length = 88 +target-version = ['py37'] +include = '\.pyi?$' +exclude = ''' + +( + /( + \.eggs # exclude a few common directories in the + | \.git # root of the project + | \.hg + | \.mypy_cache + | \.tox + | \.venv + | _build + | buck-out + | build + | dist + | libs + | {{ cookiecutter.repo_name }} # Exclude cookiecutter template or black will go crazy. + )/ +) +''' + +[tool.isort] +multi_line_output=3 +include_trailing_comma=true +force_grid_wrap=0 +use_parentheses=true +line_length=88 +skip=["docs/conf.py", "{{ cookiecutter.repo_name }}"] diff --git a/requirements.txt b/requirements.txt index ba4835f4..7038d93c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,29 +6,29 @@ # alabaster==0.7.12 # via sphinx appdirs==1.4.3 # via black, virtualenv -arrow==0.15.5 # via jinja2-time, pytest-cookies +arrow==0.13.2 # via jinja2-time, pytest-cookies astroid==2.3.3 # via pylint attrs==19.3.0 # via black, flake8-bugbear, pytest babel==2.8.0 # via sphinx binaryornot==0.4.4 # via cookiecutter -black==19.10b0 +black==19.10b0 # via -r ./requirements.in/linting.txt certifi==2019.11.28 # via requests chardet==3.0.4 # via binaryornot, doc8, requests -click==7.1.1 # via black, cookiecutter -cookiecutter==1.7.0 +click==7.1.1 # via black, cookiecutter +cookiecutter==1.7.0 # via -r ./requirements.in/base.txt, pytest-cookies coverage==5.0.3 # via pytest-cov distlib==0.3.0 # via virtualenv -doc8==0.8.0 +doc8==0.8.0 # via -r ./requirements.in/docs.txt docopt==0.6.2 # via pipreqs docutils==0.16 # via doc8, restructuredtext-lint, sphinx entrypoints==0.3 # via flake8 filelock==3.0.12 # via tox, virtualenv -flake8-bugbear==20.1.4 -flake8==3.7.9 +flake8-bugbear==20.1.4 # via -r ./requirements.in/linting.txt +flake8==3.7.9 # via -r ./requirements.in/linting.txt, flake8-bugbear future==0.18.2 # via cookiecutter idna==2.9 # via requests imagesize==1.2.0 # via sphinx -isort[pyproject,requirements]==4.3.21 +isort[pyproject,requirements]==4.3.21 # via -r ./requirements.in/linting.txt, pylint jinja2-time==0.2.0 # via cookiecutter jinja2==2.11.1 # via cookiecutter, jinja2-time, sphinx lazy-object-proxy==1.4.3 # via astroid @@ -36,7 +36,7 @@ markupsafe==1.1.1 # via jinja2 mccabe==0.6.1 # via flake8, pylint more-itertools==8.2.0 # via pytest mypy-extensions==0.4.3 # via mypy -mypy==0.770 +mypy==0.770 # via -r ./requirements.in/linting.txt packaging==20.3 # via pytest, sphinx, tox pathspec==0.7.0 # via black pbr==5.4.4 # via stevedore @@ -46,24 +46,24 @@ pluggy==0.13.1 # via pytest, tox poyo==0.5.0 # via cookiecutter py==1.8.1 # via pytest, tox pycodestyle==2.5.0 # via flake8 -pydocstyle==5.0.2 +pydocstyle==5.0.2 # via -r ./requirements.in/docs.txt pyflakes==2.1.1 # via flake8 pygments==2.6.1 # via sphinx -pylint==2.4.4 +pylint==2.4.4 # via -r ./requirements.in/linting.txt pyparsing==2.4.6 # via packaging -pytest-cookies==0.5.1 -pytest-cov==2.8.1 -pytest==5.4.1 +pytest-cookies==0.5.1 # via -r ./requirements.in/test.txt +pytest-cov==2.8.1 # via -r ./requirements.in/test.txt +pytest==5.4.1 # via -r ./requirements.in/test.txt, pytest-cookies, pytest-cov python-dateutil==2.8.1 # via arrow pytz==2019.3 # via babel -pyyaml==5.3 +pyyaml==5.3 # via -r ./requirements.in/test.txt regex==2020.2.18 # via black requests==2.23.0 # via cookiecutter, sphinx, yarg restructuredtext-lint==1.3.0 # via doc8 -rope==0.16.0 +rope==0.16.0 # via -r ./requirements.in/dev.txt six==1.14.0 # via astroid, doc8, packaging, python-dateutil, stevedore, tox, virtualenv snowballstemmer==2.0.0 # via pydocstyle, sphinx -sphinx==2.4.4 +sphinx==2.4.4 # via -r ./requirements.in/docs.txt sphinxcontrib-applehelp==1.0.2 # via sphinx sphinxcontrib-devhelp==1.0.2 # via sphinx sphinxcontrib-htmlhelp==1.0.3 # via sphinx @@ -72,14 +72,14 @@ sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.4 # via sphinx stevedore==1.32.0 # via doc8 toml==0.10.0 # via black, isort, tox -tox==3.14.5 +tox==3.14.5 # via -r ./requirements.in/test.txt typed-ast==1.4.1 # via black, mypy typing-extensions==3.7.4.1 # via mypy urllib3==1.25.8 # via requests -virtualenv==20.0.10 # via tox +virtualenv==20.0.10 # via tox wcwidth==0.1.8 # via pytest whichcraft==0.6.1 # via cookiecutter -wrapt==1.12.1 # via astroid +wrapt==1.11.2 # via astroid yarg==0.1.9 # via pipreqs # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/base.txt b/requirements/base.txt index 9edf2117..e8abcfdd 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -8,8 +8,8 @@ arrow==0.15.5 # via jinja2-time binaryornot==0.4.4 # via cookiecutter certifi==2019.11.28 # via requests chardet==3.0.4 # via binaryornot, requests -click==7.1.1 # via cookiecutter -cookiecutter==1.7.0 +click==7.1.1 # via cookiecutter +cookiecutter==1.7.0 # via -r ./requirements.in/base.txt future==0.18.2 # via cookiecutter idna==2.9 # via requests jinja2-time==0.2.0 # via cookiecutter diff --git a/requirements/dev.txt b/requirements/dev.txt index ba4835f4..7038d93c 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -6,29 +6,29 @@ # alabaster==0.7.12 # via sphinx appdirs==1.4.3 # via black, virtualenv -arrow==0.15.5 # via jinja2-time, pytest-cookies +arrow==0.13.2 # via jinja2-time, pytest-cookies astroid==2.3.3 # via pylint attrs==19.3.0 # via black, flake8-bugbear, pytest babel==2.8.0 # via sphinx binaryornot==0.4.4 # via cookiecutter -black==19.10b0 +black==19.10b0 # via -r ./requirements.in/linting.txt certifi==2019.11.28 # via requests chardet==3.0.4 # via binaryornot, doc8, requests -click==7.1.1 # via black, cookiecutter -cookiecutter==1.7.0 +click==7.1.1 # via black, cookiecutter +cookiecutter==1.7.0 # via -r ./requirements.in/base.txt, pytest-cookies coverage==5.0.3 # via pytest-cov distlib==0.3.0 # via virtualenv -doc8==0.8.0 +doc8==0.8.0 # via -r ./requirements.in/docs.txt docopt==0.6.2 # via pipreqs docutils==0.16 # via doc8, restructuredtext-lint, sphinx entrypoints==0.3 # via flake8 filelock==3.0.12 # via tox, virtualenv -flake8-bugbear==20.1.4 -flake8==3.7.9 +flake8-bugbear==20.1.4 # via -r ./requirements.in/linting.txt +flake8==3.7.9 # via -r ./requirements.in/linting.txt, flake8-bugbear future==0.18.2 # via cookiecutter idna==2.9 # via requests imagesize==1.2.0 # via sphinx -isort[pyproject,requirements]==4.3.21 +isort[pyproject,requirements]==4.3.21 # via -r ./requirements.in/linting.txt, pylint jinja2-time==0.2.0 # via cookiecutter jinja2==2.11.1 # via cookiecutter, jinja2-time, sphinx lazy-object-proxy==1.4.3 # via astroid @@ -36,7 +36,7 @@ markupsafe==1.1.1 # via jinja2 mccabe==0.6.1 # via flake8, pylint more-itertools==8.2.0 # via pytest mypy-extensions==0.4.3 # via mypy -mypy==0.770 +mypy==0.770 # via -r ./requirements.in/linting.txt packaging==20.3 # via pytest, sphinx, tox pathspec==0.7.0 # via black pbr==5.4.4 # via stevedore @@ -46,24 +46,24 @@ pluggy==0.13.1 # via pytest, tox poyo==0.5.0 # via cookiecutter py==1.8.1 # via pytest, tox pycodestyle==2.5.0 # via flake8 -pydocstyle==5.0.2 +pydocstyle==5.0.2 # via -r ./requirements.in/docs.txt pyflakes==2.1.1 # via flake8 pygments==2.6.1 # via sphinx -pylint==2.4.4 +pylint==2.4.4 # via -r ./requirements.in/linting.txt pyparsing==2.4.6 # via packaging -pytest-cookies==0.5.1 -pytest-cov==2.8.1 -pytest==5.4.1 +pytest-cookies==0.5.1 # via -r ./requirements.in/test.txt +pytest-cov==2.8.1 # via -r ./requirements.in/test.txt +pytest==5.4.1 # via -r ./requirements.in/test.txt, pytest-cookies, pytest-cov python-dateutil==2.8.1 # via arrow pytz==2019.3 # via babel -pyyaml==5.3 +pyyaml==5.3 # via -r ./requirements.in/test.txt regex==2020.2.18 # via black requests==2.23.0 # via cookiecutter, sphinx, yarg restructuredtext-lint==1.3.0 # via doc8 -rope==0.16.0 +rope==0.16.0 # via -r ./requirements.in/dev.txt six==1.14.0 # via astroid, doc8, packaging, python-dateutil, stevedore, tox, virtualenv snowballstemmer==2.0.0 # via pydocstyle, sphinx -sphinx==2.4.4 +sphinx==2.4.4 # via -r ./requirements.in/docs.txt sphinxcontrib-applehelp==1.0.2 # via sphinx sphinxcontrib-devhelp==1.0.2 # via sphinx sphinxcontrib-htmlhelp==1.0.3 # via sphinx @@ -72,14 +72,14 @@ sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.4 # via sphinx stevedore==1.32.0 # via doc8 toml==0.10.0 # via black, isort, tox -tox==3.14.5 +tox==3.14.5 # via -r ./requirements.in/test.txt typed-ast==1.4.1 # via black, mypy typing-extensions==3.7.4.1 # via mypy urllib3==1.25.8 # via requests -virtualenv==20.0.10 # via tox +virtualenv==20.0.10 # via tox wcwidth==0.1.8 # via pytest whichcraft==0.6.1 # via cookiecutter -wrapt==1.12.1 # via astroid +wrapt==1.11.2 # via astroid yarg==0.1.9 # via pipreqs # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/docs.txt b/requirements/docs.txt index c08dbb0a..bf851588 100644 --- a/requirements/docs.txt +++ b/requirements/docs.txt @@ -8,7 +8,7 @@ alabaster==0.7.12 # via sphinx babel==2.8.0 # via sphinx certifi==2019.11.28 # via requests chardet==3.0.4 # via doc8, requests -doc8==0.8.0 +doc8==0.8.0 # via -r ./requirements.in/docs.txt docutils==0.16 # via doc8, restructuredtext-lint, sphinx idna==2.9 # via requests imagesize==1.2.0 # via sphinx @@ -16,7 +16,7 @@ jinja2==3.0.0a1 # via sphinx markupsafe==1.1.1 # via jinja2 packaging==20.3 # via sphinx pbr==5.4.4 # via stevedore -pydocstyle==5.0.2 +pydocstyle==5.0.2 # via -r ./requirements.in/docs.txt pygments==2.6.1 # via sphinx pyparsing==2.4.6 # via packaging pytz==2019.3 # via babel @@ -24,7 +24,7 @@ requests==2.23.0 # via sphinx restructuredtext-lint==1.3.0 # via doc8 six==1.14.0 # via doc8, packaging, stevedore snowballstemmer==2.0.0 # via pydocstyle, sphinx -sphinx==2.4.4 +sphinx==2.4.4 # via -r ./requirements.in/docs.txt sphinxcontrib-applehelp==1.0.2 # via sphinx sphinxcontrib-devhelp==1.0.2 # via sphinx sphinxcontrib-htmlhelp==1.0.3 # via sphinx diff --git a/requirements/linting.txt b/requirements/linting.txt new file mode 100644 index 00000000..7c5cd77f --- /dev/null +++ b/requirements/linting.txt @@ -0,0 +1,41 @@ +# +# This file is autogenerated by pip-compile +# To update, run: +# +# pip-compile --output-file=./requirements/linting.txt --pre ./requirements.in/linting.txt +# +appdirs==1.4.3 # via black +astroid==2.3.3 # via pylint +attrs==19.3.0 # via black, flake8-bugbear +black==19.10b0 # via -r ./requirements.in/linting.txt +certifi==2019.11.28 # via requests +chardet==3.0.4 # via requests +click==7.1.1 # via black +docopt==0.6.2 # via pipreqs +entrypoints==0.3 # via flake8 +flake8-bugbear==20.1.4 # via -r ./requirements.in/linting.txt +flake8==3.7.9 # via -r ./requirements.in/linting.txt, flake8-bugbear +idna==2.9 # via requests +isort[pyproject,requirements]==4.3.21 # via -r ./requirements.in/linting.txt, pylint +lazy-object-proxy==1.4.3 # via astroid +mccabe==0.6.1 # via flake8, pylint +mypy-extensions==0.4.3 # via mypy +mypy==0.770 # via -r ./requirements.in/linting.txt +pathspec==0.7.0 # via black +pip-api==0.0.14 # via isort +pipreqs==0.4.10 # via isort +pycodestyle==2.5.0 # via flake8 +pyflakes==2.1.1 # via flake8 +pylint==2.4.4 # via -r ./requirements.in/linting.txt +regex==2020.2.20 # via black +requests==2.23.0 # via yarg +six==1.14.0 # via astroid +toml==0.10.0 # via black, isort +typed-ast==1.4.1 # via black, mypy +typing-extensions==3.7.4.1 # via mypy +urllib3==1.25.8 # via requests +wrapt==1.11.2 # via astroid +yarg==0.1.9 # via pipreqs + +# The following packages are considered to be unsafe in a requirements file: +# pip diff --git a/requirements/test.txt b/requirements/test.txt index a99f528e..a2c5b933 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -5,12 +5,12 @@ # pip-compile --output-file=./requirements/test.txt --pre ./requirements.in/test.txt # appdirs==1.4.3 # via virtualenv -arrow==0.15.5 # via jinja2-time, pytest-cookies +arrow==0.13.2 # via jinja2-time, pytest-cookies attrs==19.3.0 # via pytest binaryornot==0.4.4 # via cookiecutter certifi==2019.11.28 # via requests chardet==3.0.4 # via binaryornot, requests -click==7.1.1 # via cookiecutter +click==7.1.1 # via cookiecutter cookiecutter==1.7.0 # via pytest-cookies coverage==5.0.3 # via pytest-cov distlib==0.3.0 # via virtualenv @@ -26,16 +26,16 @@ pluggy==0.13.1 # via pytest, tox poyo==0.5.0 # via cookiecutter py==1.8.1 # via pytest, tox pyparsing==2.4.6 # via packaging -pytest-cookies==0.5.1 -pytest-cov==2.8.1 -pytest==5.4.1 +pytest-cookies==0.5.1 # via -r ./requirements.in/test.txt +pytest-cov==2.8.1 # via -r ./requirements.in/test.txt +pytest==5.4.1 # via -r ./requirements.in/test.txt, pytest-cookies, pytest-cov python-dateutil==2.8.1 # via arrow -pyyaml==5.3 +pyyaml==5.3 # via -r ./requirements.in/test.txt requests==2.23.0 # via cookiecutter six==1.14.0 # via packaging, python-dateutil, tox, virtualenv toml==0.10.0 # via tox -tox==3.14.5 +tox==3.14.5 # via -r ./requirements.in/test.txt urllib3==1.25.8 # via requests -virtualenv==20.0.10 # via tox +virtualenv==20.0.10 # via tox wcwidth==0.1.8 # via pytest whichcraft==0.6.1 # via cookiecutter diff --git a/tests/test_bake_project.py b/tests/test_bake_project.py index 458cd584..3a59f908 100644 --- a/tests/test_bake_project.py +++ b/tests/test_bake_project.py @@ -8,9 +8,10 @@ from contextlib import contextmanager from pathlib import Path +from click.testing import CliRunner + import pytest import yaml -from click.testing import CliRunner from cookiecutter.utils import rmtree if sys.version_info > (3, 0): diff --git a/tox.ini b/tox.ini index 9c4951ed..307b77e4 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py{37,38}, docs +envlist = py{37,38}, black, docs skipsdist = true [testenv] @@ -10,6 +10,14 @@ deps = commands = pytest +[testenv:black] +description = Formatting with black and isort +deps = -rrequirements/linting.txt +skip_install = true +commands = + isort -rc {toxinidir}/hooks {toxinidir}/tests -sp {toxinidir}/pyproject.toml + black {toxinidir}/hooks {toxinidir}/tests + [testenv:docs] basepython=python changedir=docs