diff --git a/.github/contributors.json b/.github/contributors.json index f7c0a05b..de5807e0 100644 --- a/.github/contributors.json +++ b/.github/contributors.json @@ -1107,5 +1107,35 @@ "name": "Haseeb ur Rehman", "github_login": "professorhaseeb", "twitter_username": "professorhaseeb" + }, + { + "name": "Abdul Qoyyuum", + "github_login": "Qoyyuum", + "twitter_username": "Qoyyuum" + }, + { + "name": "mfosterw", + "github_login": "mfosterw", + "twitter_username": "" + }, + { + "name": "Keith Callenberg", + "github_login": "keithcallenberg", + "twitter_username": "" + }, + { + "name": "Mike97M", + "github_login": "Mike97M", + "twitter_username": "" + }, + { + "name": "Charlie Macfarlane Brodie", + "github_login": "tannart", + "twitter_username": "" + }, + { + "name": "Floyd Hightower", + "github_login": "fhightower", + "twitter_username": "" } ] \ No newline at end of file diff --git a/.github/workflows/pre-commit-autoupdate.yml b/.github/workflows/pre-commit-autoupdate.yml index 25a6f7a0..25512200 100644 --- a/.github/workflows/pre-commit-autoupdate.yml +++ b/.github/workflows/pre-commit-autoupdate.yml @@ -26,7 +26,7 @@ jobs: run: pre-commit autoupdate - name: Create Pull Request - uses: peter-evans/create-pull-request@v3.10.0 + uses: peter-evans/create-pull-request@v3.10.1 with: token: ${{ secrets.GITHUB_TOKEN }} branch: update/pre-commit-autoupdate diff --git a/CHANGELOG.md b/CHANGELOG.md index 588c58ab..3d3c1b95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,80 @@ All enhancements and patches to Cookiecutter Django will be documented in this f +## [2021-09-06] +### Changed +- Update Celery to v5 ([#3280](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3280)) + +## [2021-09-05] +### Updated +- Update django-environ to 0.6.0 ([#3314](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3314)) + +## [2021-09-03] +### Changed +- Update available postgres versions ([#3297](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3297)) +### Updated +- Update pre-commit to 2.15.0 ([#3313](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3313)) +- Auto-update pre-commit hooks ([#3307](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3307)) +- Update pillow to 8.3.2 ([#3312](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3312)) +- Update django-environ to 0.5.0 ([#3311](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3311)) +- Update pytest to 6.2.5 ([#3310](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3310)) +- Update black to 21.8b0 ([#3308](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3308)) +- Update argon2-cffi to 21.1.0 ([#3306](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3306)) +- Bump peter-evans/create-pull-request from 3.10.0 to 3.10.1 ([#3303](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3303)) +- Update django-debug-toolbar to 3.2.2 ([#3296](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3296)) +- Update django-cors-headers to 3.8.0 ([#3295](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3295)) +- Update uvicorn to 0.15.0 ([#3294](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3294)) + +## [2021-08-27] +### Updated +- Update tox to 3.24.3 ([#3302](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3302)) + +## [2021-08-20] +### Changed +- Fix Jinja2 break line control on Procfile ([#3300](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3300)) + +## [2021-08-19] +### Changed +- Fix several minor typos ([#3301](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3301)) + +## [2021-08-13] +### Changed +- Upgrade to Redis 6 ([#3255](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3255)) +### Fixed +- Fix RTD build image to support Python 3.9 ([#3293](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3293)) + +## [2021-08-12] +### Changed +- Add documentation for automating backups ([#3268](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3268)) +- Add missing step to getting started locally in docs ([#3291](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3291)) +- Moved isort config from `.editorconfig` to `setup.cfg` ([#3290](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3290)) +- How to pre-commit in Docker Development ([#3287](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3287)) +### Updated +- Update sentry-sdk to 1.3.1 ([#3281](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3281)) +- Update tox to 3.24.1 ([#3285](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3285)) +- Update pre-commit to 2.14.0 ([#3289](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3289)) + +## [2021-07-30] +### Updated +- Auto-update pre-commit hooks ([#3283](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3283)) +- Update isort to 5.9.3 ([#3282](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3282)) + +## [2021-07-27] +### Changed +- Convert trans to translate in templates ([#3277](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3277)) +### Updated +- Update hiredis to 2.0.0 ([#3110](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3110)) +- Update mypy to 0.910 ([#3237](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3237)) +- Update whitenoise to 5.3.0 ([#3273](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3273)) +- Update tox to 3.24.0 ([#3269](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3269)) +- Update django-allauth to 0.45.0 ([#3267](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3267)) +- Update sentry-sdk to 1.3.0 ([#3262](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3262)) +- Update sphinx to 4.1.2 ([#3278](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3278)) +- Auto-update pre-commit hooks ([#3264](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3264)) +- Update isort to 5.9.2 ([#3279](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3279)) +- Update pillow to 8.3.1 ([#3259](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3259)) +- Update black to 21.7b0 ([#3272](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3272)) + ## [2021-07-12] ### Changed - Define REMAP_SIGTERM=SIGQUIT on Profile of Celery on Heroku ([#3263](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3263)) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 0493530b..b655f8fb 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -124,6 +124,13 @@ Listed in alphabetical order. + + Abdul Qoyyuum + + Qoyyuum + + Qoyyuum + Adam BogdaƂ @@ -383,6 +390,13 @@ Listed in alphabetical order. + + Charlie Macfarlane Brodie + + tannart + + + Charlie Smith @@ -677,6 +691,13 @@ Listed in alphabetical order. windrush + + Floyd Hightower + + fhightower + + + Gabriel Mejia @@ -950,6 +971,13 @@ Listed in alphabetical order. + + Keith Callenberg + + keithcallenberg + + + Keith Webber @@ -1167,6 +1195,13 @@ Listed in alphabetical order. + + mfosterw + + mfosterw + + + Michael Gecht @@ -1181,6 +1216,13 @@ Listed in alphabetical order. + + Mike97M + + Mike97M + + + Min ho Kim diff --git a/docs/developing-locally-docker.rst b/docs/developing-locally-docker.rst index 0d582d48..bdfff254 100644 --- a/docs/developing-locally-docker.rst +++ b/docs/developing-locally-docker.rst @@ -18,10 +18,11 @@ Prerequisites * Docker; if you don't have it yet, follow the `installation instructions`_; * Docker Compose; refer to the official documentation for the `installation guide`_. +* Pre-commit; refer to the official documentation for the `installation guide`_. .. _`installation instructions`: https://docs.docker.com/install/#supported-platforms .. _`installation guide`: https://docs.docker.com/compose/install/ - +.. _`pre-commit`: https://pre-commit.com/#install Build the Stack --------------- @@ -32,6 +33,13 @@ This can take a while, especially the first time you run this particular command Generally, if you want to emulate production environment use ``production.yml`` instead. And this is true for any other actions you might need to perform: whenever a switch is required, just do it! +Before doing any git commit, `pre-commit`_ should be installed globally on your local machine, and then:: + + $ git init + $ pre-commit install + +Failing to do so will result with a bunch of CI and Linter errors that can be avoided with pre-commit. + Run the Stack ------------- @@ -205,7 +213,7 @@ Developing locally with HTTPS Increasingly it is becoming necessary to develop software in a secure environment in order that there are very few changes when deploying to production. Recently Facebook changed their policies for apps/sites that use Facebook login which requires the use of an HTTPS URL for the OAuth redirect URL. So if you want to use the ``users`` application with a OAuth provider such as Facebook, securing your communication to the local development environment will be necessary. -On order to create a secure environment, we need to have a trusted SSL certficate installed in our Docker application. +In order to create a secure environment, we need to have a trusted SSL certficate installed in our Docker application. #. **Let's Encrypt** @@ -225,14 +233,14 @@ On order to create a secure environment, we need to have a trusted SSL certficat .. _`mkcert`: https://github.com/FiloSottile/mkcert/blob/master/README.md#supported-root-stores -After installing a trusted TLS certificate, configure your docker installation. We are going to configure an ``nginx`` reverse-proxy server. This makes sure that it does not interfere with our ``traefik`` configuration that is reserved for production environements. +After installing a trusted TLS certificate, configure your docker installation. We are going to configure an ``nginx`` reverse-proxy server. This makes sure that it does not interfere with our ``traefik`` configuration that is reserved for production environments. These are the places that you should configure to secure your local environment. certs ~~~~~ -Take the certificates that you generated and place them in a folder called ``certs`` on the projects root folder. Assuming that you registered your local hostname as ``my-dev-env.local``, the certificates you will put in the folder should have the names ``my-dev-env.local.crt`` and ``my-dev-env.local.key``. +Take the certificates that you generated and place them in a folder called ``certs`` in the project's root folder. Assuming that you registered your local hostname as ``my-dev-env.local``, the certificates you will put in the folder should have the names ``my-dev-env.local.crt`` and ``my-dev-env.local.key``. local.yml ~~~~~~~~~ @@ -256,7 +264,7 @@ local.yml ... -#. Link the ``nginx-proxy`` to ``django`` through environmental variables. +#. Link the ``nginx-proxy`` to ``django`` through environment variables. ``django`` already has an ``.env`` file connected to it. Add the following variables. You should do this especially if you are working with a team and you want to keep your local environment details to yourself. diff --git a/docs/developing-locally.rst b/docs/developing-locally.rst index f3358866..83bc1342 100644 --- a/docs/developing-locally.rst +++ b/docs/developing-locally.rst @@ -30,6 +30,7 @@ First things first. #. Install development requirements: :: + $ cd $ pip install -r requirements/local.txt $ git init # A git repo is required for pre-commit to install $ pre-commit install diff --git a/docs/docker-postgres-backups.rst b/docs/docker-postgres-backups.rst index 6ccb7cf1..875d737e 100644 --- a/docs/docker-postgres-backups.rst +++ b/docs/docker-postgres-backups.rst @@ -55,8 +55,11 @@ With a single backup file copied to ``.`` that would be :: $ docker cp 9c5c3f055843:/backups/backup_2018_03_13T09_05_07.sql.gz . -.. _`command`: https://docs.docker.com/engine/reference/commandline/cp/ +You can also get the container ID using ``docker-compose -f local.yml ps -q postgres`` so if you want to automate your backups, you don't have to check the container ID manually every time. Here is the full command :: + $ docker cp $(docker-compose -f local.yml ps -q postgres):/backups ./backups + +.. _`command`: https://docs.docker.com/engine/reference/commandline/cp/ Restoring from the Existing Backup ---------------------------------- diff --git a/docs/project-generation-options.rst b/docs/project-generation-options.rst index 8a81e19d..a2573b94 100644 --- a/docs/project-generation-options.rst +++ b/docs/project-generation-options.rst @@ -49,11 +49,10 @@ use_docker: postgresql_version: Select a PostgreSQL_ version to use. The choices are: - 1. 12.3 - 2. 11.8 - 3. 10.8 - 4. 9.6 - 5. 9.5 + 1. 13.2 + 2. 12.6 + 3. 11.11 + 4. 10.16 js_task_runner: Select a JavaScript task runner. The choices are: diff --git a/requirements.txt b/requirements.txt index 67d6c6e2..4509521d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,16 +4,16 @@ binaryornot==0.4.4 # Code quality # ------------------------------------------------------------------------------ -black==21.6b0 -isort==5.9.1 +black==21.8b0 +isort==5.9.3 flake8==3.9.2 flake8-isort==4.0.0 -pre-commit==2.13.0 +pre-commit==2.15.0 # Testing # ------------------------------------------------------------------------------ -tox==3.23.1 -pytest==6.2.4 +tox==3.24.3 +pytest==6.2.5 pytest-cookies==0.6.1 pytest-instafail==0.4.2 pyyaml==5.4.1 diff --git a/setup.py b/setup.py index ddc9524d..64e923ae 100644 --- a/setup.py +++ b/setup.py @@ -10,7 +10,7 @@ except ImportError: # Our version ALWAYS matches the version of Django we support # If Django has a new release, we branch, tag, then update this setting after the tag. -version = "3.1.12" +version = "3.1.13" if sys.argv[-1] == "tag": os.system(f'git tag -a {version} -m "version {version}"') diff --git a/tests/test_cookiecutter_generation.py b/tests/test_cookiecutter_generation.py index d53019e9..0e36e83a 100755 --- a/tests/test_cookiecutter_generation.py +++ b/tests/test_cookiecutter_generation.py @@ -281,3 +281,20 @@ def test_error_if_incompatible(cookies, context, invalid_context): assert result.exit_code != 0 assert isinstance(result.exception, FailedHookException) + + +@pytest.mark.parametrize( + ["use_pycharm", "pycharm_docs_exist"], + [ + ("n", False), + ("y", True), + ], +) +def test_pycharm_docs_removed(cookies, context, use_pycharm, pycharm_docs_exist): + """.""" + context.update({"use_pycharm": use_pycharm}) + result = cookies.bake(extra_context=context) + + with open(f"{result.project}/docs/index.rst", "r") as f: + has_pycharm_docs = "pycharm/configuration" in f.read() + assert has_pycharm_docs is pycharm_docs_exist diff --git a/{{cookiecutter.project_slug}}/.editorconfig b/{{cookiecutter.project_slug}}/.editorconfig index 39c15f07..26140706 100644 --- a/{{cookiecutter.project_slug}}/.editorconfig +++ b/{{cookiecutter.project_slug}}/.editorconfig @@ -12,18 +12,6 @@ trim_trailing_whitespace = true indent_style = space indent_size = 4 -[*.py] -line_length = 88 -known_first_party = {{cookiecutter.project_slug}},config -multi_line_output = 3 -default_section = THIRDPARTY -recursive = true -skip = venv/ -skip_glob = **/migrations/*.py -include_trailing_comma = true -force_grid_wrap = 0 -use_parentheses = true - [*.{html,css,scss,json,yml}] indent_style = space indent_size = 2 diff --git a/{{cookiecutter.project_slug}}/.github/workflows/ci.yml b/{{cookiecutter.project_slug}}/.github/workflows/ci.yml index 70023b53..1e17068e 100644 --- a/{{cookiecutter.project_slug}}/.github/workflows/ci.yml +++ b/{{cookiecutter.project_slug}}/.github/workflows/ci.yml @@ -42,7 +42,7 @@ jobs: services: {%- if cookiecutter.use_celery == 'y' %} redis: - image: redis:5.0 + image: redis:6 ports: - 6379:6379 {%- endif %} diff --git a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml index ac71019a..e397722b 100644 --- a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml +++ b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml @@ -11,12 +11,12 @@ repos: - id: check-yaml - repo: https://github.com/psf/black - rev: 21.6b0 + rev: 21.8b0 hooks: - id: black - repo: https://github.com/timothycrosley/isort - rev: 5.9.1 + rev: 5.9.3 hooks: - id: isort diff --git a/{{cookiecutter.project_slug}}/.readthedocs.yml b/{{cookiecutter.project_slug}}/.readthedocs.yml index 1b6020f3..b4cf0c08 100644 --- a/{{cookiecutter.project_slug}}/.readthedocs.yml +++ b/{{cookiecutter.project_slug}}/.readthedocs.yml @@ -3,6 +3,9 @@ version: 2 sphinx: configuration: docs/conf.py +build: + image: testing + python: version: 3.9 install: diff --git a/{{cookiecutter.project_slug}}/Procfile b/{{cookiecutter.project_slug}}/Procfile index e23ca13c..274108d1 100644 --- a/{{cookiecutter.project_slug}}/Procfile +++ b/{{cookiecutter.project_slug}}/Procfile @@ -1,10 +1,10 @@ release: python manage.py migrate -{%- if cookiecutter.use_async == "y" -%} +{% if cookiecutter.use_async == "y" -%} web: gunicorn config.asgi:application -k uvicorn.workers.UvicornWorker -{%- else %} +{%- else %} web: gunicorn config.wsgi:application {%- endif %} -{%- if cookiecutter.use_celery == "y" -%} -worker: REMAP_SIGTERM=SIGQUIT celery worker --app=config.celery_app --loglevel=info -beat: REMAP_SIGTERM=SIGQUIT celery beat --app=config.celery_app --loglevel=info +{% if cookiecutter.use_celery == "y" -%} +worker: REMAP_SIGTERM=SIGQUIT celery -A config.celery_app worker --loglevel=info +beat: REMAP_SIGTERM=SIGQUIT celery -A config.celery_app beat --loglevel=info {%- endif %} diff --git a/{{cookiecutter.project_slug}}/compose/local/django/celery/flower/start b/{{cookiecutter.project_slug}}/compose/local/django/celery/flower/start index 5bcaa816..bd3c9f2f 100644 --- a/{{cookiecutter.project_slug}}/compose/local/django/celery/flower/start +++ b/{{cookiecutter.project_slug}}/compose/local/django/celery/flower/start @@ -4,7 +4,8 @@ set -o errexit set -o nounset -celery flower \ - --app=config.celery_app \ - --broker="${CELERY_BROKER_URL}" \ +celery \ + -A config.celery_app \ + -b "${CELERY_BROKER_URL}" \ + flower \ --basic_auth="${CELERY_FLOWER_USER}:${CELERY_FLOWER_PASSWORD}" diff --git a/{{cookiecutter.project_slug}}/compose/production/django/celery/flower/start b/{{cookiecutter.project_slug}}/compose/production/django/celery/flower/start index 5bcaa816..bd3c9f2f 100644 --- a/{{cookiecutter.project_slug}}/compose/production/django/celery/flower/start +++ b/{{cookiecutter.project_slug}}/compose/production/django/celery/flower/start @@ -4,7 +4,8 @@ set -o errexit set -o nounset -celery flower \ - --app=config.celery_app \ - --broker="${CELERY_BROKER_URL}" \ +celery \ + -A config.celery_app \ + -b "${CELERY_BROKER_URL}" \ + flower \ --basic_auth="${CELERY_FLOWER_USER}:${CELERY_FLOWER_PASSWORD}" diff --git a/{{cookiecutter.project_slug}}/docs/index.rst b/{{cookiecutter.project_slug}}/docs/index.rst index 5fafc696..cb4cbaed 100644 --- a/{{cookiecutter.project_slug}}/docs/index.rst +++ b/{{cookiecutter.project_slug}}/docs/index.rst @@ -10,8 +10,8 @@ Welcome to {{ cookiecutter.project_name }}'s documentation! :maxdepth: 2 :caption: Contents: - howto - pycharm/configuration + howto{% if cookiecutter.use_pycharm == 'y' %} + pycharm/configuration{% endif %} users diff --git a/{{cookiecutter.project_slug}}/local.yml b/{{cookiecutter.project_slug}}/local.yml index 6241ceed..8cce827c 100644 --- a/{{cookiecutter.project_slug}}/local.yml +++ b/{{cookiecutter.project_slug}}/local.yml @@ -64,7 +64,7 @@ services: {%- if cookiecutter.use_celery == 'y' %} redis: - image: redis:5.0 + image: redis:6 container_name: redis celeryworker: diff --git a/{{cookiecutter.project_slug}}/production.yml b/{{cookiecutter.project_slug}}/production.yml index 3cccdb65..ea4292a0 100644 --- a/{{cookiecutter.project_slug}}/production.yml +++ b/{{cookiecutter.project_slug}}/production.yml @@ -47,7 +47,7 @@ services: {%- endif %} redis: - image: redis:5.0 + image: redis:6 {%- if cookiecutter.use_celery == 'y' %} celeryworker: diff --git a/{{cookiecutter.project_slug}}/requirements/base.txt b/{{cookiecutter.project_slug}}/requirements/base.txt index a39de1bc..726e2d21 100644 --- a/{{cookiecutter.project_slug}}/requirements/base.txt +++ b/{{cookiecutter.project_slug}}/requirements/base.txt @@ -1,6 +1,6 @@ pytz==2021.1 # https://github.com/stub42/pytz python-slugify==5.0.2 # https://github.com/un33k/python-slugify -Pillow==8.2.0 # https://github.com/python-pillow/Pillow +Pillow==8.3.2 # https://github.com/python-pillow/Pillow {%- if cookiecutter.use_compressor == "y" %} {%- if cookiecutter.windows == 'y' and cookiecutter.use_docker == 'n' %} rcssmin==1.0.6 --install-option="--without-c-extensions" # https://github.com/ndparker/rcssmin @@ -8,31 +8,31 @@ rcssmin==1.0.6 --install-option="--without-c-extensions" # https://github.com/n rcssmin==1.0.6 # https://github.com/ndparker/rcssmin {%- endif %} {%- endif %} -argon2-cffi==20.1.0 # https://github.com/hynek/argon2_cffi +argon2-cffi==21.1.0 # https://github.com/hynek/argon2_cffi {%- if cookiecutter.use_whitenoise == 'y' %} -whitenoise==5.2.0 # https://github.com/evansd/whitenoise +whitenoise==5.3.0 # https://github.com/evansd/whitenoise {%- endif %} redis==3.5.3 # https://github.com/andymccurdy/redis-py {%- if cookiecutter.use_docker == "y" or cookiecutter.windows == "n" %} -hiredis==1.1.0 # https://github.com/redis/hiredis-py +hiredis==2.0.0 # https://github.com/redis/hiredis-py {%- endif %} {%- if cookiecutter.use_celery == "y" %} -celery==4.4.6 # pyup: < 5.0,!=4.4.7 # https://github.com/celery/celery -django-celery-beat==2.2.0 # https://github.com/celery/django-celery-beat +celery==5.1.2 # pyup: < 6.0 # https://github.com/celery/celery +django-celery-beat==2.2.1 # https://github.com/celery/django-celery-beat {%- if cookiecutter.use_docker == 'y' %} -flower==0.9.7 # https://github.com/mher/flower +flower==1.0.0 # https://github.com/mher/flower {%- endif %} {%- endif %} {%- if cookiecutter.use_async == 'y' %} -uvicorn[standard]==0.14.0 # https://github.com/encode/uvicorn +uvicorn[standard]==0.15.0 # https://github.com/encode/uvicorn {%- endif %} # Django # ------------------------------------------------------------------------------ django==3.1.13 # pyup: < 3.2 # https://www.djangoproject.com/ -django-environ==0.4.5 # https://github.com/joke2k/django-environ +django-environ==0.7.0 # https://github.com/joke2k/django-environ django-model-utils==4.1.1 # https://github.com/jazzband/django-model-utils -django-allauth==0.44.0 # https://github.com/pennersr/django-allauth +django-allauth==0.45.0 # https://github.com/pennersr/django-allauth django-crispy-forms==1.12.0 # https://github.com/django-crispy-forms/django-crispy-forms {%- if cookiecutter.use_compressor == "y" %} django-compressor==2.4.1 # https://github.com/django-compressor/django-compressor @@ -41,5 +41,5 @@ django-redis==5.0.0 # https://github.com/jazzband/django-redis {%- if cookiecutter.use_drf == "y" %} # Django REST Framework djangorestframework==3.12.4 # https://github.com/encode/django-rest-framework -django-cors-headers==3.7.0 # https://github.com/adamchainz/django-cors-headers +django-cors-headers==3.8.0 # https://github.com/adamchainz/django-cors-headers {%- endif %} diff --git a/{{cookiecutter.project_slug}}/requirements/local.txt b/{{cookiecutter.project_slug}}/requirements/local.txt index e77e15b9..9d5b7daf 100644 --- a/{{cookiecutter.project_slug}}/requirements/local.txt +++ b/{{cookiecutter.project_slug}}/requirements/local.txt @@ -13,14 +13,14 @@ watchgod==0.7 # https://github.com/samuelcolvin/watchgod # Testing # ------------------------------------------------------------------------------ -mypy==0.902 # https://github.com/python/mypy +mypy==0.910 # https://github.com/python/mypy django-stubs==1.8.0 # https://github.com/typeddjango/django-stubs -pytest==6.2.4 # https://github.com/pytest-dev/pytest +pytest==6.2.5 # https://github.com/pytest-dev/pytest pytest-sugar==0.9.4 # https://github.com/Frozenball/pytest-sugar # Documentation # ------------------------------------------------------------------------------ -sphinx==4.0.2 # https://github.com/sphinx-doc/sphinx +sphinx==4.1.2 # https://github.com/sphinx-doc/sphinx sphinx-autobuild==2021.3.14 # https://github.com/GaretJax/sphinx-autobuild # Code quality @@ -28,18 +28,18 @@ sphinx-autobuild==2021.3.14 # https://github.com/GaretJax/sphinx-autobuild flake8==3.9.2 # https://github.com/PyCQA/flake8 flake8-isort==4.0.0 # https://github.com/gforcada/flake8-isort coverage==5.5 # https://github.com/nedbat/coveragepy -black==21.6b0 # https://github.com/psf/black +black==21.8b0 # https://github.com/psf/black pylint-django==2.4.4 # https://github.com/PyCQA/pylint-django {%- if cookiecutter.use_celery == 'y' %} pylint-celery==0.3 # https://github.com/PyCQA/pylint-celery {%- endif %} -pre-commit==2.13.0 # https://github.com/pre-commit/pre-commit +pre-commit==2.15.0 # https://github.com/pre-commit/pre-commit # Django # ------------------------------------------------------------------------------ factory-boy==3.2.0 # https://github.com/FactoryBoy/factory_boy -django-debug-toolbar==3.2.1 # https://github.com/jazzband/django-debug-toolbar +django-debug-toolbar==3.2.2 # https://github.com/jazzband/django-debug-toolbar django-extensions==3.1.3 # https://github.com/django-extensions/django-extensions django-coverage-plugin==2.0.0 # https://github.com/nedbat/django_coverage_plugin pytest-django==4.4.0 # https://github.com/pytest-dev/pytest-django diff --git a/{{cookiecutter.project_slug}}/requirements/production.txt b/{{cookiecutter.project_slug}}/requirements/production.txt index 06d33ae0..61ca0b97 100644 --- a/{{cookiecutter.project_slug}}/requirements/production.txt +++ b/{{cookiecutter.project_slug}}/requirements/production.txt @@ -8,10 +8,10 @@ psycopg2==2.9.1 # https://github.com/psycopg/psycopg2 Collectfast==2.2.0 # https://github.com/antonagestam/collectfast {%- endif %} {%- if cookiecutter.use_sentry == "y" %} -sentry-sdk==1.1.0 # https://github.com/getsentry/sentry-python +sentry-sdk==1.3.1 # https://github.com/getsentry/sentry-python {%- endif %} {%- if cookiecutter.use_docker == "n" and cookiecutter.windows == "y" %} -hiredis==1.1.0 # https://github.com/redis/hiredis-py +hiredis==2.0.0 # https://github.com/redis/hiredis-py {%- endif %} # Django diff --git a/{{cookiecutter.project_slug}}/runtime.txt b/{{cookiecutter.project_slug}}/runtime.txt index 87665291..2153d1e1 100644 --- a/{{cookiecutter.project_slug}}/runtime.txt +++ b/{{cookiecutter.project_slug}}/runtime.txt @@ -1 +1 @@ -python-3.9.4 +python-3.9.7 diff --git a/{{cookiecutter.project_slug}}/setup.cfg b/{{cookiecutter.project_slug}}/setup.cfg index c3ce2a0e..d0ba6387 100644 --- a/{{cookiecutter.project_slug}}/setup.cfg +++ b/{{cookiecutter.project_slug}}/setup.cfg @@ -6,6 +6,17 @@ exclude = .tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules,venv max-line-length = 120 exclude = .tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules,venv +[isort] +line_length = 88 +known_first_party = {{cookiecutter.project_slug}},config +multi_line_output = 3 +default_section = THIRDPARTY +skip = venv/ +skip_glob = **/migrations/*.py +include_trailing_comma = true +force_grid_wrap = 0 +use_parentheses = true + [mypy] python_version = 3.9 check_untyped_defs = True diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/account_inactive.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/account_inactive.html index 0713ff11..ab910820 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/account_inactive.html +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/account_inactive.html @@ -2,11 +2,11 @@ {% load i18n %} -{% block head_title %}{% trans "Account Inactive" %}{% endblock %} +{% block head_title %}{% translate "Account Inactive" %}{% endblock %} {% block inner %} -

{% trans "Account Inactive" %}

+

{% translate "Account Inactive" %}

-

{% trans "This account is inactive." %}

+

{% translate "This account is inactive." %}

{% endblock %} {%- endraw %} diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/email.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/email.html index 5c9406f3..07b5789e 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/email.html +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/email.html @@ -4,13 +4,13 @@ {% load i18n %} {% load crispy_forms_tags %} -{% block head_title %}{% trans "Account" %}{% endblock %} +{% block head_title %}{% translate "Account" %}{% endblock %} {% block inner %} -

{% trans "E-mail Addresses" %}

+

{% translate "E-mail Addresses" %}

{% if user.emailaddress_set.all %} -

{% trans 'The following e-mail addresses are associated with your account:' %}

+

{% translate 'The following e-mail addresses are associated with your account:' %}

{% csrf_token %} @@ -24,36 +24,36 @@ {{ emailaddress.email }} {% if emailaddress.verified %} - {% trans "Verified" %} + {% translate "Verified" %} {% else %} - {% trans "Unverified" %} + {% translate "Unverified" %} {% endif %} - {% if emailaddress.primary %}{% trans "Primary" %}{% endif %} + {% if emailaddress.primary %}{% translate "Primary" %}{% endif %} {% endfor %}
- - - + + +
{% else %} -

{% trans 'Warning:'%} {% trans "You currently do not have any e-mail address set up. You should really add an e-mail address so you can receive notifications, reset your password, etc." %}

+

{% translate 'Warning:'%} {% translate "You currently do not have any e-mail address set up. You should really add an e-mail address so you can receive notifications, reset your password, etc." %}

{% endif %} -

{% trans "Add E-mail Address" %}

+

{% translate "Add E-mail Address" %}

{% csrf_token %} {{ form|crispy }} - +
{% endblock %} @@ -63,7 +63,7 @@ {{ block.super }}