diff --git a/.github/contributors.json b/.github/contributors.json
index 5c8b1f753..34c84979d 100644
--- a/.github/contributors.json
+++ b/.github/contributors.json
@@ -1332,5 +1332,20 @@
"name": "TAKAHASHI Shuuji",
"github_login": "shuuji3",
"twitter_username": ""
+ },
+ {
+ "name": "Thomas Booij",
+ "github_login": "ThomasBooij95",
+ "twitter_username": ""
+ },
+ {
+ "name": "Pamela Fox",
+ "github_login": "pamelafox",
+ "twitter_username": "pamelafox"
+ },
+ {
+ "name": "Robin",
+ "github_login": "Kaffeetasse",
+ "twitter_username": ""
}
]
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index aca668c5f..00698a012 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,75 @@ All enhancements and patches to Cookiecutter Django will be documented in this f
+## 2023.01.15
+
+### Updated
+- Update pytest to 7.2.1 ([#4077](https://github.com/cookiecutter/cookiecutter-django/pull/4077))
+- Update pytz to 2022.7.1 ([#4078](https://github.com/cookiecutter/cookiecutter-django/pull/4078))
+
+## 2023.01.12
+
+### Updated
+- Update sentry-sdk to 1.13.0 ([#4074](https://github.com/cookiecutter/cookiecutter-django/pull/4074))
+
+## 2023.01.11
+
+### Changed
+- Update Celery instructions in the documentation ([#4061](https://github.com/cookiecutter/cookiecutter-django/pull/4061))
+### Updated
+- Update tox to 4.2.7 ([#4073](https://github.com/cookiecutter/cookiecutter-django/pull/4073))
+
+## 2023.01.10
+
+### Changed
+- Add dump.rdb to gitignore ([#4062](https://github.com/cookiecutter/cookiecutter-django/pull/4062))
+### Fixed
+- Exclude `.venv` from code style checks ([#4069](https://github.com/cookiecutter/cookiecutter-django/pull/4069))
+### Updated
+- Update hiredis to 2.1.1 ([#4070](https://github.com/cookiecutter/cookiecutter-django/pull/4070))
+
+## 2023.01.08
+
+### Updated
+- Update redis to 4.4.1 ([#4068](https://github.com/cookiecutter/cookiecutter-django/pull/4068))
+- Update coverage to 7.0.4 ([#4067](https://github.com/cookiecutter/cookiecutter-django/pull/4067))
+
+## 2023.01.07
+
+### Updated
+- Update tox to 4.2.6 ([#4064](https://github.com/cookiecutter/cookiecutter-django/pull/4064))
+- Update django-storages to 1.13.2 ([#4057](https://github.com/cookiecutter/cookiecutter-django/pull/4057))
+- Update isort to 5.11.4 ([#4058](https://github.com/cookiecutter/cookiecutter-django/pull/4058))
+- Update rcssmin to 1.1.1 ([#4060](https://github.com/cookiecutter/cookiecutter-django/pull/4060))
+- Update django-compressor to 4.3 ([#4063](https://github.com/cookiecutter/cookiecutter-django/pull/4063))
+
+## 2023.01.06
+
+### Changed
+- Add `.git` to `.dockerignore` ([#4054](https://github.com/cookiecutter/cookiecutter-django/pull/4054))
+- Fix link and add non-Docker commands to testing page in the docs ([#4036](https://github.com/cookiecutter/cookiecutter-django/pull/4036))
+### Updated
+- Update tox to 4.2.3 ([#4051](https://github.com/cookiecutter/cookiecutter-django/pull/4051))
+
+## 2023.01.04
+
+### Changed
+- Fix typo on test settings ([#4049](https://github.com/cookiecutter/cookiecutter-django/pull/4049))
+### Updated
+- Update tox to 4.2.2 ([#4050](https://github.com/cookiecutter/cookiecutter-django/pull/4050))
+- Update tox to 4.2.1 ([#4046](https://github.com/cookiecutter/cookiecutter-django/pull/4046))
+- Update coverage to 7.0.3 ([#4047](https://github.com/cookiecutter/cookiecutter-django/pull/4047))
+
+## 2023.01.03
+
+### Updated
+- Update flake8-isort to 6.0.0 ([#4022](https://github.com/cookiecutter/cookiecutter-django/pull/4022))
+- Update tox to 4.1.3 ([#4041](https://github.com/cookiecutter/cookiecutter-django/pull/4041))
+- Update pillow to 9.4.0 ([#4040](https://github.com/cookiecutter/cookiecutter-django/pull/4040))
+- Update gitpython to 3.1.30 ([#4032](https://github.com/cookiecutter/cookiecutter-django/pull/4032))
+- Update coverage to 7.0.2 ([#4042](https://github.com/cookiecutter/cookiecutter-django/pull/4042))
+- Update whitenoise to 6.3.0 ([#4044](https://github.com/cookiecutter/cookiecutter-django/pull/4044))
+
## 2022.12.29
### Updated
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index dba721de6..718d58c57 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -1461,6 +1461,13 @@ Listed in alphabetical order.
Théo Segonds |
diff --git a/docs/developing-locally.rst b/docs/developing-locally.rst
index e1c946268..2b9438059 100644
--- a/docs/developing-locally.rst
+++ b/docs/developing-locally.rst
@@ -141,15 +141,32 @@ In production, we have Mailgun_ configured to have your back!
Celery
------
-If the project is configured to use Celery as a task scheduler then by default tasks are set to run on the main thread
-when developing locally. If you have the appropriate setup on your local machine then set the following
-in ``config/settings/local.py``::
+If the project is configured to use Celery as a task scheduler then, by default, tasks are set to run on the main thread when developing locally instead of getting sent to a broker. However, if you have Redis setup on your local machine, you can set the following in ``config/settings/local.py``::
CELERY_TASK_ALWAYS_EAGER = False
-To run Celery locally, make sure redis-server is installed (instructions are available at https://redis.io/topics/quickstart), run the server in one terminal with `redis-server`, and then start celery in another terminal with the following command::
+Next, make sure `redis-server` is installed (per the `Getting started with Redis`_ guide) and run the server in one terminal::
- celery -A config.celery_app worker --loglevel=info
+ $ redis-server
+
+Start the Celery worker by running the following command in another terminal::
+
+ $ celery -A config.celery_app worker --loglevel=info
+
+That Celery worker should be running whenever your app is running, typically as a background process,
+so that it can pick up any tasks that get queued. Learn more from the `Celery Workers Guide`_.
+
+The project comes with a simple task for manual testing purposes, inside `/users/tasks.py`. To queue that task locally, start the Django shell, import the task, and call `delay()` on it::
+
+ $ python manage.py shell
+ >> from .users.tasks import get_users_count
+ >> get_users_count.delay()
+
+You can also use Django admin to queue up tasks, thanks to the `django-celerybeat`_ package.
+
+.. _Getting started with Redis guide: https://redis.io/docs/getting-started/
+.. _Celery Workers Guide: https://docs.celeryq.dev/en/stable/userguide/workers.html
+.. _django-celerybeat: https://django-celery-beat.readthedocs.io/en/latest/
Sass Compilation & Live Reloading
diff --git a/docs/testing.rst b/docs/testing.rst
index dd6fcb48f..bea45c6dd 100644
--- a/docs/testing.rst
+++ b/docs/testing.rst
@@ -28,10 +28,15 @@ Coverage
You should build your tests to provide the highest level of **code coverage**. You can run the ``pytest`` with code ``coverage`` by typing in the following command: ::
- $ docker-compose -f local.yml run --rm django coverage run -m pytest
+ $ coverage run -m pytest
Once the tests are complete, in order to see the code coverage, run the following command: ::
+ $ coverage report
+
+If you're running the project locally with Docker, use these commands instead: ::
+
+ $ docker-compose -f local.yml run --rm django coverage run -m pytest
$ docker-compose -f local.yml run --rm django coverage report
.. note::
@@ -53,4 +58,4 @@ Once the tests are complete, in order to see the code coverage, run the followin
.. _develop locally with docker: ./developing-locally-docker.html
.. _customize: https://docs.pytest.org/en/latest/customize.html
.. _unittest: https://docs.python.org/3/library/unittest.html#module-unittest
-.. _configuring: https://coverage.readthedocs.io/en/v4.5.x/config.html
+.. _configuring: https://coverage.readthedocs.io/en/latest/config.html
diff --git a/requirements.txt b/requirements.txt
index ef0272058..627cfebe5 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -5,15 +5,15 @@ binaryornot==0.4.4
# Code quality
# ------------------------------------------------------------------------------
black==22.12.0
-isort==5.11.3
+isort==5.11.4
flake8==6.0.0
-flake8-isort==5.0.3
+flake8-isort==6.0.0
pre-commit==2.21.0
# Testing
# ------------------------------------------------------------------------------
-tox==4.1.0
-pytest==7.2.0
+tox==4.2.7
+pytest==7.2.1
pytest-cookies==0.6.1
pytest-instafail==0.4.2
pyyaml==6.0
@@ -21,6 +21,6 @@ pyyaml==6.0
# Scripting
# ------------------------------------------------------------------------------
PyGithub==1.57
-gitpython==3.1.29
+gitpython==3.1.30
jinja2==3.1.2
requests==2.28.1
diff --git a/setup.py b/setup.py
index e03b72109..cdbbc6929 100644
--- a/setup.py
+++ b/setup.py
@@ -5,7 +5,7 @@ except ImportError:
from distutils.core import setup
# We use calendar versioning
-version = "2022.12.29"
+version = "2023.01.15"
with open("README.rst") as readme_file:
long_description = readme_file.read()
diff --git a/{{cookiecutter.project_slug}}/.dockerignore b/{{cookiecutter.project_slug}}/.dockerignore
index 5518e60af..7369480e3 100644
--- a/{{cookiecutter.project_slug}}/.dockerignore
+++ b/{{cookiecutter.project_slug}}/.dockerignore
@@ -8,3 +8,4 @@
.readthedocs.yml
.travis.yml
venv
+.git
diff --git a/{{cookiecutter.project_slug}}/.gitignore b/{{cookiecutter.project_slug}}/.gitignore
index ede26ef72..acc484307 100644
--- a/{{cookiecutter.project_slug}}/.gitignore
+++ b/{{cookiecutter.project_slug}}/.gitignore
@@ -326,6 +326,9 @@ Session.vim
# Auto-generated tag files
tags
+# Redis dump file
+dump.rdb
+
### Project template
{%- if cookiecutter.use_mailhog == 'y' and cookiecutter.use_docker == 'n' %}
MailHog
diff --git a/{{cookiecutter.project_slug}}/config/settings/test.py b/{{cookiecutter.project_slug}}/config/settings/test.py
index f103eb10b..198b5aa5d 100644
--- a/{{cookiecutter.project_slug}}/config/settings/test.py
+++ b/{{cookiecutter.project_slug}}/config/settings/test.py
@@ -25,7 +25,7 @@ PASSWORD_HASHERS = ["django.contrib.auth.hashers.MD5PasswordHasher"]
# https://docs.djangoproject.com/en/dev/ref/settings/#email-backend
EMAIL_BACKEND = "django.core.mail.backends.locmem.EmailBackend"
-# DEBUGING FOR TEMPLATES
+# DEBUGGING FOR TEMPLATES
# ------------------------------------------------------------------------------
TEMPLATES[0]["OPTIONS"]["debug"] = True # type: ignore # noqa F405
diff --git a/{{cookiecutter.project_slug}}/requirements/base.txt b/{{cookiecutter.project_slug}}/requirements/base.txt
index 5258d2435..ca33b4394 100644
--- a/{{cookiecutter.project_slug}}/requirements/base.txt
+++ b/{{cookiecutter.project_slug}}/requirements/base.txt
@@ -1,20 +1,20 @@
-pytz==2022.6 # https://github.com/stub42/pytz
+pytz==2022.7.1 # https://github.com/stub42/pytz
python-slugify==7.0.0 # https://github.com/un33k/python-slugify
-Pillow==9.3.0 # https://github.com/python-pillow/Pillow
+Pillow==9.4.0 # https://github.com/python-pillow/Pillow
{%- if cookiecutter.frontend_pipeline == 'Django Compressor' %}
{%- if cookiecutter.windows == 'y' and cookiecutter.use_docker == 'n' %}
rcssmin==1.1.0 --install-option="--without-c-extensions" # https://github.com/ndparker/rcssmin
{%- else %}
-rcssmin==1.1.0 # https://github.com/ndparker/rcssmin
+rcssmin==1.1.1 # https://github.com/ndparker/rcssmin
{%- endif %}
{%- endif %}
argon2-cffi==21.3.0 # https://github.com/hynek/argon2_cffi
{%- if cookiecutter.use_whitenoise == 'y' %}
-whitenoise==6.2.0 # https://github.com/evansd/whitenoise
+whitenoise==6.3.0 # https://github.com/evansd/whitenoise
{%- endif %}
-redis==4.4.0 # https://github.com/redis/redis-py
+redis==4.4.1 # https://github.com/redis/redis-py
{%- if cookiecutter.use_docker == "y" or cookiecutter.windows == "n" %}
-hiredis==2.0.0 # https://github.com/redis/hiredis-py
+hiredis==2.1.1 # https://github.com/redis/hiredis-py
{%- endif %}
{%- if cookiecutter.use_celery == "y" %}
celery==5.2.7 # pyup: < 6.0 # https://github.com/celery/celery
@@ -32,11 +32,11 @@ uvicorn[standard]==0.20.0 # https://github.com/encode/uvicorn
django==4.0.8 # pyup: < 4.1 # https://www.djangoproject.com/
django-environ==0.9.0 # https://github.com/joke2k/django-environ
django-model-utils==4.3.1 # https://github.com/jazzband/django-model-utils
-django-allauth==0.51.0 # https://github.com/pennersr/django-allauth
+django-allauth==0.52.0 # https://github.com/pennersr/django-allauth
django-crispy-forms==1.14.0 # https://github.com/django-crispy-forms/django-crispy-forms
crispy-bootstrap5==0.7 # https://github.com/django-crispy-forms/crispy-bootstrap5
{%- if cookiecutter.frontend_pipeline == 'Django Compressor' %}
-django-compressor==4.1 # https://github.com/django-compressor/django-compressor
+django-compressor==4.3 # https://github.com/django-compressor/django-compressor
{%- endif %}
django-redis==5.2.0 # https://github.com/jazzband/django-redis
{%- if cookiecutter.use_drf == 'y' %}
diff --git a/{{cookiecutter.project_slug}}/requirements/local.txt b/{{cookiecutter.project_slug}}/requirements/local.txt
index 14f30bba0..a2ee31376 100644
--- a/{{cookiecutter.project_slug}}/requirements/local.txt
+++ b/{{cookiecutter.project_slug}}/requirements/local.txt
@@ -15,7 +15,7 @@ watchfiles==0.18.1 # https://github.com/samuelcolvin/watchfiles
# ------------------------------------------------------------------------------
mypy==0.982 # https://github.com/python/mypy
django-stubs==1.13.1 # https://github.com/typeddjango/django-stubs
-pytest==7.2.0 # https://github.com/pytest-dev/pytest
+pytest==7.2.1 # https://github.com/pytest-dev/pytest
pytest-sugar==0.9.6 # https://github.com/Frozenball/pytest-sugar
{%- if cookiecutter.use_drf == "y" %}
djangorestframework-stubs==1.8.0 # https://github.com/typeddjango/djangorestframework-stubs
@@ -30,8 +30,8 @@ sphinx-rtd-theme==1.1.1 # https://pypi.org/project/sphinx-rtd-theme/
# Code quality
# ------------------------------------------------------------------------------
flake8==6.0.0 # https://github.com/PyCQA/flake8
-flake8-isort==5.0.3 # https://github.com/gforcada/flake8-isort
-coverage==7.0.1 # https://github.com/nedbat/coveragepy
+flake8-isort==6.0.0 # https://github.com/gforcada/flake8-isort
+coverage==7.0.4 # https://github.com/nedbat/coveragepy
black==22.12.0 # https://github.com/psf/black
pylint-django==2.5.3 # https://github.com/PyCQA/pylint-django
{%- if cookiecutter.use_celery == 'y' %}
diff --git a/{{cookiecutter.project_slug}}/requirements/production.txt b/{{cookiecutter.project_slug}}/requirements/production.txt
index b7d73819b..fd449d1fe 100644
--- a/{{cookiecutter.project_slug}}/requirements/production.txt
+++ b/{{cookiecutter.project_slug}}/requirements/production.txt
@@ -8,20 +8,20 @@ psycopg2==2.9.5 # https://github.com/psycopg/psycopg2
Collectfast==2.2.0 # https://github.com/antonagestam/collectfast
{%- endif %}
{%- if cookiecutter.use_sentry == "y" %}
-sentry-sdk==1.12.1 # https://github.com/getsentry/sentry-python
+sentry-sdk==1.13.0 # https://github.com/getsentry/sentry-python
{%- endif %}
{%- if cookiecutter.use_docker == "n" and cookiecutter.windows == "y" %}
-hiredis==2.1.0 # https://github.com/redis/hiredis-py
+hiredis==2.1.1 # https://github.com/redis/hiredis-py
{%- endif %}
# Django
# ------------------------------------------------------------------------------
{%- if cookiecutter.cloud_provider == 'AWS' %}
-django-storages[boto3]==1.13.1 # https://github.com/jschneier/django-storages
+django-storages[boto3]==1.13.2 # https://github.com/jschneier/django-storages
{%- elif cookiecutter.cloud_provider == 'GCP' %}
-django-storages[google]==1.13.1 # https://github.com/jschneier/django-storages
+django-storages[google]==1.13.2 # https://github.com/jschneier/django-storages
{%- elif cookiecutter.cloud_provider == 'Azure' %}
-django-storages[azure]==1.13.1 # https://github.com/jschneier/django-storages
+django-storages[azure]==1.13.2 # https://github.com/jschneier/django-storages
{%- endif %}
{%- if cookiecutter.mail_service == 'Mailgun' %}
django-anymail[mailgun]==9.0 # https://github.com/anymail/django-anymail
diff --git a/{{cookiecutter.project_slug}}/setup.cfg b/{{cookiecutter.project_slug}}/setup.cfg
index b99bba644..7ee60215a 100644
--- a/{{cookiecutter.project_slug}}/setup.cfg
+++ b/{{cookiecutter.project_slug}}/setup.cfg
@@ -1,10 +1,10 @@
[flake8]
max-line-length = 120
-exclude = .tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules,venv
+exclude = .tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules,venv,.venv
[pycodestyle]
max-line-length = 120
-exclude = .tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules,venv
+exclude = .tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules,venv,.venv
[isort]
line_length = 88
|