diff --git a/.github/contributors.json b/.github/contributors.json index 3fd07530d..3e8d3fc59 100644 --- a/.github/contributors.json +++ b/.github/contributors.json @@ -1648,5 +1648,15 @@ "name": "LJFP", "github_login": "ljfp", "twitter_username": "" + }, + { + "name": "Francisco Navarro Morales ", + "github_login": "spothound", + "twitter_username": "" + }, + { + "name": "Mariot Tsitoara", + "github_login": "mariot", + "twitter_username": "" } ] diff --git a/.github/dependabot.yml b/.github/dependabot.yml index c5856a6ab..a24abcfef 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -100,6 +100,7 @@ updates: directory: "{{cookiecutter.project_slug}}/compose/production/nginx/" schedule: interval: "daily" + versioning-strategy: increase labels: - "update" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f40d36390..05ab35152 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -92,12 +92,15 @@ jobs: POSTGRES_PASSWORD: postgres env: - CELERY_BROKER_URL: "redis://localhost:6379/0" + REDIS_URL: "redis://localhost:6379/0" # postgres://user:password@host:port/database DATABASE_URL: "postgres://postgres:postgres@localhost:5432/postgres" steps: - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.12" - name: Install uv uses: astral-sh/setup-uv@v3 with: diff --git a/.github/workflows/dependabot-uv-lock.yml b/.github/workflows/dependabot-uv-lock.yml index 7f8e86405..73fb88130 100644 --- a/.github/workflows/dependabot-uv-lock.yml +++ b/.github/workflows/dependabot-uv-lock.yml @@ -11,6 +11,7 @@ permissions: jobs: lock: + if: ${{ github.actor == 'dependabot[bot]' }} runs-on: ubuntu-latest env: GH_PAT: ${{ secrets.GH_PAT }} diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml index 55d1558f0..7ba569380 100644 --- a/.github/workflows/update-changelog.yml +++ b/.github/workflows/update-changelog.yml @@ -23,7 +23,7 @@ jobs: run: | git config --global user.name "github-actions" git config --global user.email "action@github.com" - - name: Update list + - name: Update changelog run: uv run --frozen scripts/update_changelog.py env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index eca5d41af..203570563 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -26,7 +26,7 @@ repos: args: ["--tab-width", "2"] - repo: https://github.com/asottile/pyupgrade - rev: v3.17.0 + rev: v3.19.0 hooks: - id: pyupgrade args: [--py312-plus] @@ -48,7 +48,7 @@ repos: - id: flake8 - repo: https://github.com/tox-dev/pyproject-fmt - rev: "2.2.4" + rev: "v2.4.3" hooks: - id: pyproject-fmt diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b09720d7..8a2dd47fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,131 @@ All enhancements and patches to Cookiecutter Django will be documented in this f +## 2024.10.26 + + +### Updated + +- Update django-stubs to 5.1.1 ([#5495](https://github.com/cookiecutter/cookiecutter-django/pull/5495)) + +- Update mypy to 1.13.0 ([#5484](https://github.com/cookiecutter/cookiecutter-django/pull/5484)) + +- Update werkzeug to 3.0.6 ([#5492](https://github.com/cookiecutter/cookiecutter-django/pull/5492)) + +## 2024.10.25 + + +### Updated + +- Update werkzeug to 3.0.5 and unpin watchdog<5 ([#5489](https://github.com/cookiecutter/cookiecutter-django/pull/5489)) + +## 2024.10.24 + + +### Updated + +- Update ruff to 0.7.1 ([#5487](https://github.com/cookiecutter/cookiecutter-django/pull/5487)) + +- Update redis to 5.2.0 ([#5486](https://github.com/cookiecutter/cookiecutter-django/pull/5486)) + +- Update django-allauth to 65.1.0 ([#5485](https://github.com/cookiecutter/cookiecutter-django/pull/5485)) + +## 2024.10.22 + + +### Changed + +- Fix broken links in generated README ([#5482](https://github.com/cookiecutter/cookiecutter-django/pull/5482)) + +### Updated + +- Auto-update pre-commit hooks ([#5483](https://github.com/cookiecutter/cookiecutter-django/pull/5483)) + +## 2024.10.21 + + +### Changed + +- Remove CELERY_BROKER_URL in favor of REDIS_URL ([#4861](https://github.com/cookiecutter/cookiecutter-django/pull/4861)) + +### Fixed + +- Fix a number of issues with Azure storage ([#5476](https://github.com/cookiecutter/cookiecutter-django/pull/5476)) + +### Updated + +- Update coverage to 7.6.4 ([#5480](https://github.com/cookiecutter/cookiecutter-django/pull/5480)) + +## 2024.10.17 + + +### Updated + +- Update ruff to 0.7.0 ([#5474](https://github.com/cookiecutter/cookiecutter-django/pull/5474)) + +- Update uvicorn to 0.32.0 ([#5471](https://github.com/cookiecutter/cookiecutter-django/pull/5471)) + +- Update pillow to 11.0.0 ([#5470](https://github.com/cookiecutter/cookiecutter-django/pull/5470)) + +- Update sentry-sdk to 2.17.0 ([#5473](https://github.com/cookiecutter/cookiecutter-django/pull/5473)) + +## 2024.10.15 + + +### Changed + +- [pre-commit.ci] pre-commit autoupdate ([#5468](https://github.com/cookiecutter/cookiecutter-django/pull/5468)) + +## 2024.10.14 + + +### Changed + +- Add requirements for ubuntu 24.04 ([#5467](https://github.com/cookiecutter/cookiecutter-django/pull/5467)) + +### Updated + +- Update sphinx to 8.1.3 ([#5463](https://github.com/cookiecutter/cookiecutter-django/pull/5463)) + +- Update coverage to 7.6.3 ([#5464](https://github.com/cookiecutter/cookiecutter-django/pull/5464)) + +## 2024.10.12 + + +### Changed + +- Pin Python version to 3.12 ([#5456](https://github.com/cookiecutter/cookiecutter-django/pull/5456)) + +### Updated + +- Update sphinx to 8.1.1 ([#5457](https://github.com/cookiecutter/cookiecutter-django/pull/5457)) + +- Auto-update pre-commit hooks ([#5458](https://github.com/cookiecutter/cookiecutter-django/pull/5458)) + +- Update django-cors-headers to 4.5.0 ([#5459](https://github.com/cookiecutter/cookiecutter-django/pull/5459)) + +## 2024.10.11 + + +### Changed + +- Update README.md broken links ([#5454](https://github.com/cookiecutter/cookiecutter-django/pull/5454)) + +- wait-for-it as dependency in the run stage ([#5452](https://github.com/cookiecutter/cookiecutter-django/pull/5452)) + +### Updated + +- Auto-update pre-commit hooks ([#5450](https://github.com/cookiecutter/cookiecutter-django/pull/5450)) + +## 2024.10.10 + + +### Updated + +- Update sentry-sdk to 2.16.0 ([#5444](https://github.com/cookiecutter/cookiecutter-django/pull/5444)) + +- Bump traefik from 3.1.5 to 3.1.6 ([#5449](https://github.com/cookiecutter/cookiecutter-django/pull/5449)) + ## 2024.10.09 diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 02ae965fb..0941fbd34 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -880,6 +880,13 @@ Listed in alphabetical order. + + Francisco Navarro Morales + + spothound + + + Freddy @@ -1482,6 +1489,13 @@ Listed in alphabetical order. + + Mariot Tsitoara + + mariot + + + Marlon Castillo diff --git a/README.md b/README.md index 8afb48195..5a7d43f52 100644 --- a/README.md +++ b/README.md @@ -186,8 +186,8 @@ Now take a look at your repo. Don't forget to carefully look at the generated RE For local development, see the following: -- [Developing locally](http://cookiecutter-django.readthedocs.io/en/latest/developing-locally.html) -- [Developing locally using docker](http://cookiecutter-django.readthedocs.io/en/latest/developing-locally-docker.html) +- [Developing locally](https://cookiecutter-django.readthedocs.io/en/latest/2-local-development/developing-locally.html) +- [Developing locally using docker](https://cookiecutter-django.readthedocs.io/en/latest/2-local-development/developing-locally-docker.html) ## Community diff --git a/docs/1-getting-started/settings.rst b/docs/1-getting-started/settings.rst index 2be79cbf5..dfdccc7cc 100644 --- a/docs/1-getting-started/settings.rst +++ b/docs/1-getting-started/settings.rst @@ -39,7 +39,6 @@ The following table lists settings and their defaults for third-party applicatio ======================================= =========================== ============================================== ====================================================================== Environment Variable Django Setting Development Default Production Default ======================================= =========================== ============================================== ====================================================================== -CELERY_BROKER_URL CELERY_BROKER_URL auto w/ Docker; raises error w/o raises error DJANGO_AWS_ACCESS_KEY_ID AWS_ACCESS_KEY_ID n/a raises error DJANGO_AWS_SECRET_ACCESS_KEY AWS_SECRET_ACCESS_KEY n/a raises error DJANGO_AWS_STORAGE_BUCKET_NAME AWS_STORAGE_BUCKET_NAME n/a raises error diff --git a/docs/2-local-development/developing-locally.rst b/docs/2-local-development/developing-locally.rst index 11343e154..b8484bfe0 100644 --- a/docs/2-local-development/developing-locally.rst +++ b/docs/2-local-development/developing-locally.rst @@ -55,8 +55,6 @@ First things first. #. Set the environment variables for your database(s): :: $ export DATABASE_URL=postgres://postgres:@127.0.0.1:5432/ - # Optional: set broker URL if using Celery - $ export CELERY_BROKER_URL=redis://localhost:6379/0 .. note:: diff --git a/docs/3-deployment/deployment-on-heroku.rst b/docs/3-deployment/deployment-on-heroku.rst index a828d6745..75bf76936 100644 --- a/docs/3-deployment/deployment-on-heroku.rst +++ b/docs/3-deployment/deployment-on-heroku.rst @@ -86,8 +86,6 @@ it's in the ``Procfile``, but is turned off by default: .. code-block:: bash - # Set the broker URL to Redis - heroku config:set CELERY_BROKER_URL=`heroku config:get REDIS_URL` # Scale dyno to 1 instance heroku ps:scale worker=1 diff --git a/hooks/post_gen_project.py b/hooks/post_gen_project.py index 80a6c0bd8..aecab4b65 100644 --- a/hooks/post_gen_project.py +++ b/hooks/post_gen_project.py @@ -91,6 +91,10 @@ def remove_docker_files(): os.remove(os.path.join(".idea", "runConfigurations", file_name)) +def remove_nginx_docker_files(): + shutil.rmtree(os.path.join("compose", "production", "nginx")) + + def remove_utility_files(): shutil.rmtree("utility") @@ -457,6 +461,8 @@ def main(): if "{{ cookiecutter.use_docker }}".lower() == "y": remove_utility_files() + if "{{ cookiecutter.cloud_provider }}".lower() != "none": + remove_nginx_docker_files() else: remove_docker_files() diff --git a/pyproject.toml b/pyproject.toml index cb263a330..70e3c167c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "cookiecutter-django" -version = "2024.10.09" +version = "2024.10.26" description = "A Cookiecutter template for creating production-ready Django projects quickly." readme = "README.md" keywords = [ @@ -14,7 +14,7 @@ license = { text = "BSD" } authors = [ { name = "Daniel Roy Greenfeld", email = "pydanny@gmail.com" }, ] -requires-python = ">=3.12" +requires-python = ">=3.12,<3.13" classifiers = [ "Development Status :: 4 - Beta", "Environment :: Console", @@ -43,7 +43,7 @@ dependencies = [ "pytest-xdist==3.6.1", "pyyaml==6.0.2", "requests==2.32.3", - "ruff==0.6.9", + "ruff==0.7", "sh==2.0.7; sys_platform!='win23'", "tox==4.21.2", "tox-uv>=1.11.2", diff --git a/scripts/update_changelog.py b/scripts/update_changelog.py index 988370e43..9ef942c49 100644 --- a/scripts/update_changelog.py +++ b/scripts/update_changelog.py @@ -1,6 +1,7 @@ import datetime as dt import os import re +import subprocess from collections.abc import Iterable from pathlib import Path @@ -51,6 +52,9 @@ def main() -> None: update_version(setup_py_path, release) print(f"Updated version in {setup_py_path}") + # Run uv lock + subprocess.run(["uv", "lock"], cwd=ROOT) + # Commit changes, create tag and push update_git_repo([changelog_path, setup_py_path], release) diff --git a/tests/test_docker.sh b/tests/test_docker.sh index d8e625900..326e58328 100755 --- a/tests/test_docker.sh +++ b/tests/test_docker.sh @@ -33,7 +33,6 @@ docker compose -f docker-compose.local.yml run django python manage.py makemessa docker compose -f docker-compose.local.yml run \ -e DJANGO_SECRET_KEY="$(openssl rand -base64 64)" \ -e REDIS_URL=redis://redis:6379/0 \ - -e CELERY_BROKER_URL=redis://redis:6379/0 \ -e DJANGO_AWS_ACCESS_KEY_ID=x \ -e DJANGO_AWS_SECRET_ACCESS_KEY=x \ -e DJANGO_AWS_STORAGE_BUCKET_NAME=x \ diff --git a/uv.lock b/uv.lock index 849266725..20b4fa047 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -requires-python = ">=3.12" +requires-python = "==3.12.*" [[package]] name = "alabaster" @@ -192,7 +192,7 @@ wheels = [ [[package]] name = "cookiecutter-django" -version = "2024.10.5" +version = "2024.10.15" source = { virtual = "." } dependencies = [ { name = "binaryornot" }, @@ -231,7 +231,7 @@ requires-dist = [ { name = "djlint", specifier = "==1.35.2" }, { name = "gitpython", specifier = "==3.1.43" }, { name = "jinja2", specifier = "==3.1.4" }, - { name = "myst-parser", marker = "extra == 'docs'", specifier = ">=4.0.0" }, + { name = "myst-parser", marker = "extra == 'docs'", specifier = ">=4" }, { name = "pre-commit", specifier = "==3.8" }, { name = "pygithub", specifier = "==2.4" }, { name = "pytest", specifier = "==8.3.3" }, @@ -240,11 +240,11 @@ requires-dist = [ { name = "pytest-xdist", specifier = "==3.6.1" }, { name = "pyyaml", specifier = "==6.0.2" }, { name = "requests", specifier = "==2.32.3" }, - { name = "ruff", specifier = "==0.6.9" }, + { name = "ruff", specifier = "==0.7.0" }, { name = "sh", marker = "sys_platform != 'win23'", specifier = "==2.0.7" }, { name = "sphinx", marker = "extra == 'docs'", specifier = ">=8.0.2" }, { name = "sphinx-autobuild", marker = "extra == 'docs'", specifier = ">=2024.10.3" }, - { name = "sphinx-rtd-theme", marker = "extra == 'docs'", specifier = ">=3.0.0" }, + { name = "sphinx-rtd-theme", marker = "extra == 'docs'", specifier = ">=3" }, { name = "tox", specifier = "==4.21.2" }, { name = "tox-uv", specifier = ">=1.11.2" }, ] @@ -861,27 +861,27 @@ wheels = [ [[package]] name = "ruff" -version = "0.6.9" +version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/26/0d/6148a48dab5662ca1d5a93b7c0d13c03abd3cc7e2f35db08410e47cef15d/ruff-0.6.9.tar.gz", hash = "sha256:b076ef717a8e5bc819514ee1d602bbdca5b4420ae13a9cf61a0c0a4f53a2baa2", size = 3095355 } +sdist = { url = "https://files.pythonhosted.org/packages/2c/c7/f3367d1da5d568192968c5c9e7f3d51fb317b9ac04828493b23d8fce8ce6/ruff-0.7.0.tar.gz", hash = "sha256:47a86360cf62d9cd53ebfb0b5eb0e882193fc191c6d717e8bef4462bc3b9ea2b", size = 3146645 } wheels = [ - { url = "https://files.pythonhosted.org/packages/6e/8f/f7a0a0ef1818662efb32ed6df16078c95da7a0a3248d64c2410c1e27799f/ruff-0.6.9-py3-none-linux_armv6l.whl", hash = "sha256:064df58d84ccc0ac0fcd63bc3090b251d90e2a372558c0f057c3f75ed73e1ccd", size = 10440526 }, - { url = "https://files.pythonhosted.org/packages/8b/69/b179a5faf936a9e2ab45bb412a668e4661eded964ccfa19d533f29463ef6/ruff-0.6.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:140d4b5c9f5fc7a7b074908a78ab8d384dd7f6510402267bc76c37195c02a7ec", size = 10034612 }, - { url = "https://files.pythonhosted.org/packages/c7/ef/fd1b4be979c579d191eeac37b5cfc0ec906de72c8bcd8595e2c81bb700c1/ruff-0.6.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:53fd8ca5e82bdee8da7f506d7b03a261f24cd43d090ea9db9a1dc59d9313914c", size = 9706197 }, - { url = "https://files.pythonhosted.org/packages/29/61/b376d775deb5851cb48d893c568b511a6d3625ef2c129ad5698b64fb523c/ruff-0.6.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645d7d8761f915e48a00d4ecc3686969761df69fb561dd914a773c1a8266e14e", size = 10751855 }, - { url = "https://files.pythonhosted.org/packages/13/d7/def9e5f446d75b9a9c19b24231a3a658c075d79163b08582e56fa5dcfa38/ruff-0.6.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eae02b700763e3847595b9d2891488989cac00214da7f845f4bcf2989007d577", size = 10200889 }, - { url = "https://files.pythonhosted.org/packages/6c/d6/7f34160818bcb6e84ce293a5966cba368d9112ff0289b273fbb689046047/ruff-0.6.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d5ccc9e58112441de8ad4b29dcb7a86dc25c5f770e3c06a9d57e0e5eba48829", size = 11038678 }, - { url = "https://files.pythonhosted.org/packages/13/34/a40ff8ae62fb1b26fb8e6fa7e64bc0e0a834b47317880de22edd6bfb54fb/ruff-0.6.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:417b81aa1c9b60b2f8edc463c58363075412866ae4e2b9ab0f690dc1e87ac1b5", size = 11808682 }, - { url = "https://files.pythonhosted.org/packages/2e/6d/25a4386ae4009fc798bd10ba48c942d1b0b3e459b5403028f1214b6dd161/ruff-0.6.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c866b631f5fbce896a74a6e4383407ba7507b815ccc52bcedabb6810fdb3ef7", size = 11330446 }, - { url = "https://files.pythonhosted.org/packages/f7/f6/bdf891a9200d692c94ebcd06ae5a2fa5894e522f2c66c2a12dd5d8cb2654/ruff-0.6.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b118afbb3202f5911486ad52da86d1d52305b59e7ef2031cea3425142b97d6f", size = 12483048 }, - { url = "https://files.pythonhosted.org/packages/a7/86/96f4252f41840e325b3fa6c48297e661abb9f564bd7dcc0572398c8daa42/ruff-0.6.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a67267654edc23c97335586774790cde402fb6bbdb3c2314f1fc087dee320bfa", size = 10936855 }, - { url = "https://files.pythonhosted.org/packages/45/87/801a52d26c8dbf73424238e9908b9ceac430d903c8ef35eab1b44fcfa2bd/ruff-0.6.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3ef0cc774b00fec123f635ce5c547dac263f6ee9fb9cc83437c5904183b55ceb", size = 10713007 }, - { url = "https://files.pythonhosted.org/packages/be/27/6f7161d90320a389695e32b6ebdbfbedde28ccbf52451e4b723d7ce744ad/ruff-0.6.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:12edd2af0c60fa61ff31cefb90aef4288ac4d372b4962c2864aeea3a1a2460c0", size = 10274594 }, - { url = "https://files.pythonhosted.org/packages/00/52/dc311775e7b5f5b19831563cb1572ecce63e62681bccc609867711fae317/ruff-0.6.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:55bb01caeaf3a60b2b2bba07308a02fca6ab56233302406ed5245180a05c5625", size = 10608024 }, - { url = "https://files.pythonhosted.org/packages/98/b6/be0a1ddcbac65a30c985cf7224c4fce786ba2c51e7efeb5178fe410ed3cf/ruff-0.6.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:925d26471fa24b0ce5a6cdfab1bb526fb4159952385f386bdcc643813d472039", size = 10982085 }, - { url = "https://files.pythonhosted.org/packages/bb/a4/c84bc13d0b573cf7bb7d17b16d6d29f84267c92d79b2f478d4ce322e8e72/ruff-0.6.9-py3-none-win32.whl", hash = "sha256:eb61ec9bdb2506cffd492e05ac40e5bc6284873aceb605503d8494180d6fc84d", size = 8522088 }, - { url = "https://files.pythonhosted.org/packages/74/be/fc352bd8ca40daae8740b54c1c3e905a7efe470d420a268cd62150248c91/ruff-0.6.9-py3-none-win_amd64.whl", hash = "sha256:785d31851c1ae91f45b3d8fe23b8ae4b5170089021fbb42402d811135f0b7117", size = 9359275 }, - { url = "https://files.pythonhosted.org/packages/3e/14/fd026bc74ded05e2351681545a5f626e78ef831f8edce064d61acd2e6ec7/ruff-0.6.9-py3-none-win_arm64.whl", hash = "sha256:a9641e31476d601f83cd602608739a0840e348bda93fec9f1ee816f8b6798b93", size = 8679879 }, + { url = "https://files.pythonhosted.org/packages/48/59/a0275a0913f3539498d116046dd679cd657fe3b7caf5afe1733319414932/ruff-0.7.0-py3-none-linux_armv6l.whl", hash = "sha256:0cdf20c2b6ff98e37df47b2b0bd3a34aaa155f59a11182c1303cce79be715628", size = 10434007 }, + { url = "https://files.pythonhosted.org/packages/cd/94/da0ba5f956d04c90dd899209904210600009dcda039ce840d83eb4298c7d/ruff-0.7.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:496494d350c7fdeb36ca4ef1c9f21d80d182423718782222c29b3e72b3512737", size = 10048066 }, + { url = "https://files.pythonhosted.org/packages/57/1d/e5cc149ecc46e4f203403a79ccd170fad52d316f98b87d0f63b1945567db/ruff-0.7.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:214b88498684e20b6b2b8852c01d50f0651f3cc6118dfa113b4def9f14faaf06", size = 9711389 }, + { url = "https://files.pythonhosted.org/packages/05/67/fb7ea2c869c539725a16c5bc294e9aa34f8b1b6fe702f1d173a5da517c2b/ruff-0.7.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630fce3fefe9844e91ea5bbf7ceadab4f9981f42b704fae011bb8efcaf5d84be", size = 10755174 }, + { url = "https://files.pythonhosted.org/packages/5f/f0/13703bc50536a0613ea3dce991116e5f0917a1f05528c6ab738b33c08d3f/ruff-0.7.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:211d877674e9373d4bb0f1c80f97a0201c61bcd1e9d045b6e9726adc42c156aa", size = 10196040 }, + { url = "https://files.pythonhosted.org/packages/99/c1/77b04ab20324ab03d333522ee55fb0f1c38e3ca0d326b4905f82ce6b6c70/ruff-0.7.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:194d6c46c98c73949a106425ed40a576f52291c12bc21399eb8f13a0f7073495", size = 11033684 }, + { url = "https://files.pythonhosted.org/packages/f2/97/f463334dc4efeea3551cd109163df15561c18a1c3ec13d51643740fd36ba/ruff-0.7.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:82c2579b82b9973a110fab281860403b397c08c403de92de19568f32f7178598", size = 11803700 }, + { url = "https://files.pythonhosted.org/packages/b4/f8/a31d40c4bb92933d376a53e7c5d0245d9b27841357e4820e96d38f54b480/ruff-0.7.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9af971fe85dcd5eaed8f585ddbc6bdbe8c217fb8fcf510ea6bca5bdfff56040e", size = 11347848 }, + { url = "https://files.pythonhosted.org/packages/83/62/0c133b35ddaf91c65c30a56718b80bdef36bfffc35684d29e3a4878e0ea3/ruff-0.7.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b641c7f16939b7d24b7bfc0be4102c56562a18281f84f635604e8a6989948914", size = 12480632 }, + { url = "https://files.pythonhosted.org/packages/46/96/464058dd1d980014fb5aa0a1254e78799efb3096fc7a4823cd66a1621276/ruff-0.7.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d71672336e46b34e0c90a790afeac8a31954fd42872c1f6adaea1dff76fd44f9", size = 10941919 }, + { url = "https://files.pythonhosted.org/packages/a0/f7/bda37ec77986a435dde44e1f59374aebf4282a5fa9cf17735315b847141f/ruff-0.7.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ab7d98c7eed355166f367597e513a6c82408df4181a937628dbec79abb2a1fe4", size = 10745519 }, + { url = "https://files.pythonhosted.org/packages/c2/33/5f77fc317027c057b61a848020a47442a1cbf12e592df0e41e21f4d0f3bd/ruff-0.7.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1eb54986f770f49edb14f71d33312d79e00e629a57387382200b1ef12d6a4ef9", size = 10284872 }, + { url = "https://files.pythonhosted.org/packages/ff/50/98aec292bc9537f640b8d031c55f3414bf15b6ed13b3e943fed75ac927b9/ruff-0.7.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:dc452ba6f2bb9cf8726a84aa877061a2462afe9ae0ea1d411c53d226661c601d", size = 10600334 }, + { url = "https://files.pythonhosted.org/packages/f2/85/12607ae3201423a179b8cfadc7cb1e57d02cd0135e45bd0445acb4cef327/ruff-0.7.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:4b406c2dce5be9bad59f2de26139a86017a517e6bcd2688da515481c05a2cb11", size = 11017333 }, + { url = "https://files.pythonhosted.org/packages/d4/7f/3b85a56879e705d5f46ec14daf8a439fca05c3081720fe3dc3209100922d/ruff-0.7.0-py3-none-win32.whl", hash = "sha256:f6c968509f767776f524a8430426539587d5ec5c662f6addb6aa25bc2e8195ec", size = 8570962 }, + { url = "https://files.pythonhosted.org/packages/39/9f/c5ee2b40d377354dabcc23cff47eb299de4b4d06d345068f8f8cc1eadac8/ruff-0.7.0-py3-none-win_amd64.whl", hash = "sha256:ff4aabfbaaba880e85d394603b9e75d32b0693152e16fa659a3064a85df7fce2", size = 9365544 }, + { url = "https://files.pythonhosted.org/packages/89/8b/ee1509f60148cecba644aa718f6633216784302458340311898aaf0b1bed/ruff-0.7.0-py3-none-win_arm64.whl", hash = "sha256:10842f69c245e78d6adec7e1db0a7d9ddc2fff0621d730e61657b64fa36f207e", size = 8695763 }, ] [[package]] diff --git a/{{cookiecutter.project_slug}}/.drone.yml b/{{cookiecutter.project_slug}}/.drone.yml index d6c13e62b..20d6fb1bb 100644 --- a/{{cookiecutter.project_slug}}/.drone.yml +++ b/{{cookiecutter.project_slug}}/.drone.yml @@ -7,7 +7,7 @@ environment: POSTGRES_DB: 'test_{{ cookiecutter.project_slug }}' POSTGRES_HOST_AUTH_METHOD: trust {%- if cookiecutter.use_celery == 'y' %} - CELERY_BROKER_URL: 'redis://redis:6379/0' + REDIS_URL: 'redis://redis:6379/0' {%- endif %} steps: diff --git a/{{cookiecutter.project_slug}}/.github/workflows/ci.yml b/{{cookiecutter.project_slug}}/.github/workflows/ci.yml index 0d8ed0cad..6bb555063 100644 --- a/{{cookiecutter.project_slug}}/.github/workflows/ci.yml +++ b/{{cookiecutter.project_slug}}/.github/workflows/ci.yml @@ -57,7 +57,7 @@ jobs: env: {%- if cookiecutter.use_celery == 'y' %} - CELERY_BROKER_URL: 'redis://localhost:6379/0' + REDIS_URL: 'redis://localhost:6379/0' {%- endif %} # postgres://user:password@host:port/database DATABASE_URL: 'postgres://postgres:postgres@localhost:5432/postgres' diff --git a/{{cookiecutter.project_slug}}/.gitlab-ci.yml b/{{cookiecutter.project_slug}}/.gitlab-ci.yml index 71216bc7a..9c7cd5367 100644 --- a/{{cookiecutter.project_slug}}/.gitlab-ci.yml +++ b/{{cookiecutter.project_slug}}/.gitlab-ci.yml @@ -8,7 +8,7 @@ variables: POSTGRES_DB: 'test_{{ cookiecutter.project_slug }}' POSTGRES_HOST_AUTH_METHOD: trust {%- if cookiecutter.use_celery == 'y' %} - CELERY_BROKER_URL: 'redis://redis:6379/0' + REDIS_URL: 'redis://redis:6379/0' {%- endif %} precommit: diff --git a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml index b5a1907ab..6aa219640 100644 --- a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml +++ b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml @@ -32,14 +32,14 @@ repos: exclude: '{{cookiecutter.project_slug}}/templates/' - repo: https://github.com/adamchainz/django-upgrade - rev: '1.21.0' + rev: '1.22.1' hooks: - id: django-upgrade args: ['--target-version', '5.0'] # Run the Ruff linter. - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.6.9 + rev: v0.7.1 hooks: # Linter - id: ruff diff --git a/{{cookiecutter.project_slug}}/README.md b/{{cookiecutter.project_slug}}/README.md index cb7576892..9ee864afb 100644 --- a/{{cookiecutter.project_slug}}/README.md +++ b/{{cookiecutter.project_slug}}/README.md @@ -12,7 +12,7 @@ License: {{cookiecutter.open_source_license}} ## Settings -Moved to [settings](http://cookiecutter-django.readthedocs.io/en/latest/settings.html). +Moved to [settings](https://cookiecutter-django.readthedocs.io/en/latest/1-getting-started/settings.html). ## Basic Commands @@ -46,7 +46,7 @@ To run the tests, check your test coverage, and generate an HTML coverage report ### Live reloading and Sass CSS compilation -Moved to [Live reloading and SASS compilation](https://cookiecutter-django.readthedocs.io/en/latest/developing-locally.html#sass-compilation-live-reloading). +Moved to [Live reloading and SASS compilation](https://cookiecutter-django.readthedocs.io/en/latest/2-local-development/developing-locally.html#using-webpack-or-gulp). {%- if cookiecutter.use_celery == "y" %} @@ -87,7 +87,7 @@ celery -A config.celery_app worker -B -l info In development, it is often nice to be able to see emails that are being sent from your application. For that reason local SMTP server [Mailpit](https://github.com/axllent/mailpit) with a web interface is available as docker container. Container mailpit will start automatically when you will run all docker containers. -Please check [cookiecutter-django Docker documentation](http://cookiecutter-django.readthedocs.io/en/latest/deployment-with-docker.html) for more details how to start all containers. +Please check [cookiecutter-django Docker documentation](https://cookiecutter-django.readthedocs.io/en/latest/2-local-development/developing-locally-docker.html) for more details how to start all containers. With Mailpit running, to view messages that are sent by your application, open your browser and go to `http://127.0.0.1:8025` {%- else %} @@ -130,14 +130,14 @@ The following details how to deploy this application. ### Heroku -See detailed [cookiecutter-django Heroku documentation](http://cookiecutter-django.readthedocs.io/en/latest/deployment-on-heroku.html). +See detailed [cookiecutter-django Heroku documentation](https://cookiecutter-django.readthedocs.io/en/latest/3-deployment/deployment-on-heroku.html). {%- endif %} {%- if cookiecutter.use_docker.lower() == "y" %} ### Docker -See detailed [cookiecutter-django Docker documentation](http://cookiecutter-django.readthedocs.io/en/latest/deployment-with-docker.html). +See detailed [cookiecutter-django Docker documentation](https://cookiecutter-django.readthedocs.io/en/latest/3-deployment/deployment-with-docker.html). {%- endif %} {%- if cookiecutter.frontend_pipeline in ['Gulp', 'Webpack'] %} diff --git a/{{cookiecutter.project_slug}}/compose/local/django/celery/flower/start b/{{cookiecutter.project_slug}}/compose/local/django/celery/flower/start index cebb62203..f8377adae 100644 --- a/{{cookiecutter.project_slug}}/compose/local/django/celery/flower/start +++ b/{{cookiecutter.project_slug}}/compose/local/django/celery/flower/start @@ -13,4 +13,4 @@ echo 'Starting flower' exec watchfiles --filter python celery.__main__.main \ --args \ - "-A config.celery_app -b \"${CELERY_BROKER_URL}\" flower --basic_auth=\"${CELERY_FLOWER_USER}:${CELERY_FLOWER_PASSWORD}\"" + "-A config.celery_app -b \"${REDIS_URL}\" flower --basic_auth=\"${CELERY_FLOWER_USER}:${CELERY_FLOWER_PASSWORD}\"" diff --git a/{{cookiecutter.project_slug}}/compose/production/django/Dockerfile b/{{cookiecutter.project_slug}}/compose/production/django/Dockerfile index d28be4a0c..a3908625c 100644 --- a/{{cookiecutter.project_slug}}/compose/production/django/Dockerfile +++ b/{{cookiecutter.project_slug}}/compose/production/django/Dockerfile @@ -37,8 +37,8 @@ RUN apt-get update && apt-get install --no-install-recommends -y \ # dependencies for building Python packages build-essential \ # psycopg dependencies - libpq-dev \ - wait-for-it + libpq-dev + # Requirements are installed here to ensure they will be cached. COPY ./requirements . @@ -70,6 +70,8 @@ RUN apt-get update && apt-get install --no-install-recommends -y \ libpq-dev \ # Translations dependencies gettext \ + # entrypoint + wait-for-it \ # cleaning up unused files && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ && rm -rf /var/lib/apt/lists/* @@ -123,9 +125,6 @@ RUN chown -R django:django ${APP_HOME} USER django RUN DATABASE_URL="" \ - {%- if cookiecutter.use_celery == "y" %} - CELERY_BROKER_URL="" \ - {%- endif %} DJANGO_SETTINGS_MODULE="config.settings.test" \ python manage.py compilemessages diff --git a/{{cookiecutter.project_slug}}/compose/production/django/celery/flower/start b/{{cookiecutter.project_slug}}/compose/production/django/celery/flower/start index f903a05a2..c0b1cbe5d 100644 --- a/{{cookiecutter.project_slug}}/compose/production/django/celery/flower/start +++ b/{{cookiecutter.project_slug}}/compose/production/django/celery/flower/start @@ -14,6 +14,6 @@ echo 'Starting flower' exec celery \ -A config.celery_app \ - -b "${CELERY_BROKER_URL}" \ + -b "${REDIS_URL}" \ flower \ --basic_auth="${CELERY_FLOWER_USER}:${CELERY_FLOWER_PASSWORD}" diff --git a/{{cookiecutter.project_slug}}/compose/production/django/entrypoint b/{{cookiecutter.project_slug}}/compose/production/django/entrypoint index f9cb474b8..fe517f4ce 100644 --- a/{{cookiecutter.project_slug}}/compose/production/django/entrypoint +++ b/{{cookiecutter.project_slug}}/compose/production/django/entrypoint @@ -7,8 +7,7 @@ set -o nounset {% if cookiecutter.use_celery == 'y' %} # N.B. If only .env files supported variable expansion... - export CELERY_BROKER_URL="${REDIS_URL}" -# Updated in .envs +export CELERY_BROKER_URL="${REDIS_URL}" {% endif %} if [ -z "${POSTGRES_USER}" ]; then @@ -16,7 +15,6 @@ if [ -z "${POSTGRES_USER}" ]; then export POSTGRES_USER="${base_postgres_image_default_user}" fi export DATABASE_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}" -# Updated in .envs wait-for-it "${POSTGRES_HOST}:${POSTGRES_PORT}" -t 30 diff --git a/{{cookiecutter.project_slug}}/compose/production/traefik/Dockerfile b/{{cookiecutter.project_slug}}/compose/production/traefik/Dockerfile index f587862e8..9ff5c95cb 100644 --- a/{{cookiecutter.project_slug}}/compose/production/traefik/Dockerfile +++ b/{{cookiecutter.project_slug}}/compose/production/traefik/Dockerfile @@ -1,4 +1,4 @@ -FROM docker.io/traefik:3.1.6 +FROM docker.io/traefik:3.2.0 RUN mkdir -p /etc/traefik/acme \ && touch /etc/traefik/acme/acme.json \ && chmod 600 /etc/traefik/acme/acme.json diff --git a/{{cookiecutter.project_slug}}/config/settings/base.py b/{{cookiecutter.project_slug}}/config/settings/base.py index 0cb095284..154468504 100644 --- a/{{cookiecutter.project_slug}}/config/settings/base.py +++ b/{{cookiecutter.project_slug}}/config/settings/base.py @@ -284,6 +284,8 @@ LOGGING = { "root": {"level": "INFO", "handlers": ["console"]}, } +REDIS_URL = env("REDIS_URL", default="redis://{% if cookiecutter.use_docker == 'y' %}redis{%else%}localhost{% endif %}:6379/0") + {% if cookiecutter.use_celery == 'y' -%} # Celery # ------------------------------------------------------------------------------ @@ -291,9 +293,9 @@ if USE_TZ: # https://docs.celeryq.dev/en/stable/userguide/configuration.html#std:setting-timezone CELERY_TIMEZONE = TIME_ZONE # https://docs.celeryq.dev/en/stable/userguide/configuration.html#std:setting-broker_url -CELERY_BROKER_URL = env("CELERY_BROKER_URL") +CELERY_BROKER_URL = REDIS_URL # https://docs.celeryq.dev/en/stable/userguide/configuration.html#std:setting-result_backend -CELERY_RESULT_BACKEND = CELERY_BROKER_URL +CELERY_RESULT_BACKEND = REDIS_URL # https://docs.celeryq.dev/en/stable/userguide/configuration.html#result-extended CELERY_RESULT_EXTENDED = True # https://docs.celeryq.dev/en/stable/userguide/configuration.html#result-backend-always-retry diff --git a/{{cookiecutter.project_slug}}/config/settings/production.py b/{{cookiecutter.project_slug}}/config/settings/production.py index 6349e17bb..7d213067f 100644 --- a/{{cookiecutter.project_slug}}/config/settings/production.py +++ b/{{cookiecutter.project_slug}}/config/settings/production.py @@ -16,6 +16,7 @@ from sentry_sdk.integrations.redis import RedisIntegration from .base import * # noqa: F403 from .base import DATABASES from .base import INSTALLED_APPS +from .base import REDIS_URL {%- if cookiecutter.use_drf == "y" %} from .base import SPECTACULAR_SETTINGS {%- endif %} @@ -37,7 +38,7 @@ DATABASES["default"]["CONN_MAX_AGE"] = env.int("CONN_MAX_AGE", default=60) CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", - "LOCATION": env("REDIS_URL"), + "LOCATION": REDIS_URL, "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", # Mimicing memcache behavior. @@ -170,7 +171,7 @@ STORAGES = { "BACKEND": "storages.backends.azure_storage.AzureStorage", "OPTIONS": { "location": "media", - "file_overwrite": False, + "overwrite_files": False, }, }, {%- if cookiecutter.use_whitenoise == 'y' %} @@ -323,7 +324,7 @@ COMPRESS_FILTERS = { "js": ["compressor.filters.jsmin.JSMinFilter"], } {% endif %} -{%- if cookiecutter.use_whitenoise == 'n' -%} +{%- if cookiecutter.use_whitenoise == 'n' and cookiecutter.cloud_provider in ('AWS', 'GCP') -%} # Collectfasta # ------------------------------------------------------------------------------ # https://github.com/jasongi/collectfasta#installation diff --git a/{{cookiecutter.project_slug}}/docs/conf.py b/{{cookiecutter.project_slug}}/docs/conf.py index 797f8c787..09f9652e8 100644 --- a/{{cookiecutter.project_slug}}/docs/conf.py +++ b/{{cookiecutter.project_slug}}/docs/conf.py @@ -26,9 +26,6 @@ else: sys.path.insert(0, os.path.abspath("..")) {%- endif %} os.environ["DATABASE_URL"] = "sqlite:///readthedocs.db" -{%- if cookiecutter.use_celery == 'y' %} -os.environ["CELERY_BROKER_URL"] = os.getenv("REDIS_URL", "redis://redis:6379") -{%- endif %} os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.local") django.setup() diff --git a/{{cookiecutter.project_slug}}/requirements/base.txt b/{{cookiecutter.project_slug}}/requirements/base.txt index bb2023ee6..fb889f893 100644 --- a/{{cookiecutter.project_slug}}/requirements/base.txt +++ b/{{cookiecutter.project_slug}}/requirements/base.txt @@ -1,5 +1,5 @@ python-slugify==8.0.4 # https://github.com/un33k/python-slugify -Pillow==10.4.0 # https://github.com/python-pillow/Pillow +Pillow==11.0.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.2 --install-option="--without-c-extensions" # https://github.com/ndparker/rcssmin @@ -9,9 +9,9 @@ rcssmin==1.1.2 # https://github.com/ndparker/rcssmin {%- endif %} argon2-cffi==23.1.0 # https://github.com/hynek/argon2_cffi {%- if cookiecutter.use_whitenoise == 'y' %} -whitenoise==6.7.0 # https://github.com/evansd/whitenoise +whitenoise==6.8.1 # https://github.com/evansd/whitenoise {%- endif %} -redis==5.1.1 # https://github.com/redis/redis-py +redis==5.2.0 # https://github.com/redis/redis-py {%- if cookiecutter.use_docker == "y" or cookiecutter.windows == "n" %} hiredis==3.0.0 # https://github.com/redis/hiredis-py {%- endif %} @@ -23,7 +23,7 @@ flower==2.0.1 # https://github.com/mher/flower {%- endif %} {%- endif %} {%- if cookiecutter.use_async == 'y' %} -uvicorn[standard]==0.31.0 # https://github.com/encode/uvicorn +uvicorn[standard]==0.32.0 # https://github.com/encode/uvicorn uvicorn-worker==0.2.0 # https://github.com/Kludex/uvicorn-worker {%- endif %} @@ -32,7 +32,7 @@ uvicorn-worker==0.2.0 # https://github.com/Kludex/uvicorn-worker django==5.0.9 # pyup: < 5.1 # https://www.djangoproject.com/ django-environ==0.11.2 # https://github.com/joke2k/django-environ django-model-utils==5.0.0 # https://github.com/jazzband/django-model-utils -django-allauth[mfa]==65.0.2 # https://github.com/pennersr/django-allauth +django-allauth[mfa]==65.1.0 # https://github.com/pennersr/django-allauth django-crispy-forms==2.3 # https://github.com/django-crispy-forms/django-crispy-forms crispy-bootstrap5==2024.10 # https://github.com/django-crispy-forms/crispy-bootstrap5 {%- if cookiecutter.frontend_pipeline == 'Django Compressor' %} @@ -42,7 +42,7 @@ django-redis==5.4.0 # https://github.com/jazzband/django-redis {%- if cookiecutter.use_drf == 'y' %} # Django REST Framework djangorestframework==3.15.2 # https://github.com/encode/django-rest-framework -django-cors-headers==4.4.0 # https://github.com/adamchainz/django-cors-headers +django-cors-headers==4.6.0 # https://github.com/adamchainz/django-cors-headers # DRF-spectacular for api documentation drf-spectacular==0.27.2 # https://github.com/tfranzel/drf-spectacular {%- endif %} diff --git a/{{cookiecutter.project_slug}}/requirements/local.txt b/{{cookiecutter.project_slug}}/requirements/local.txt index f22a730f2..69a8131a6 100644 --- a/{{cookiecutter.project_slug}}/requirements/local.txt +++ b/{{cookiecutter.project_slug}}/requirements/local.txt @@ -1,7 +1,6 @@ -r production.txt -watchdog==4.0.2 # https://github.com/gorakhargosh/watchdog -Werkzeug[watchdog]==3.0.4 # https://github.com/pallets/werkzeug +Werkzeug[watchdog]==3.0.6 # https://github.com/pallets/werkzeug ipdb==0.13.13 # https://github.com/gotcha/ipdb {%- if cookiecutter.use_docker == 'y' %} psycopg[c]==3.2.3 # https://github.com/psycopg/psycopg @@ -14,8 +13,8 @@ watchfiles==0.24.0 # https://github.com/samuelcolvin/watchfiles # Testing # ------------------------------------------------------------------------------ -mypy==1.11.2 # https://github.com/python/mypy -django-stubs[compatible-mypy]==5.1.0 # https://github.com/typeddjango/django-stubs +mypy==1.13.0 # https://github.com/python/mypy +django-stubs[compatible-mypy]==5.1.1 # https://github.com/typeddjango/django-stubs pytest==8.3.3 # https://github.com/pytest-dev/pytest pytest-sugar==1.0.0 # https://github.com/Frozenball/pytest-sugar {%- if cookiecutter.use_drf == "y" %} @@ -24,14 +23,14 @@ djangorestframework-stubs==3.15.1 # https://github.com/typeddjango/djangorestfr # Documentation # ------------------------------------------------------------------------------ -sphinx==8.0.2 # https://github.com/sphinx-doc/sphinx +sphinx==8.1.3 # https://github.com/sphinx-doc/sphinx sphinx-autobuild==2024.10.3 # https://github.com/GaretJax/sphinx-autobuild sphinx-rtd-theme==2.0.0 # https://pypi.org/project/sphinx-rtd-theme/ # Code quality # ------------------------------------------------------------------------------ -ruff==0.6.9 # https://github.com/astral-sh/ruff -coverage==7.6.2 # https://github.com/nedbat/coveragepy +ruff==0.7.1 # https://github.com/astral-sh/ruff +coverage==7.6.4 # https://github.com/nedbat/coveragepy djlint==1.35.2 # https://github.com/Riverside-Healthcare/djLint pre-commit==4.0.1 # https://github.com/pre-commit/pre-commit diff --git a/{{cookiecutter.project_slug}}/requirements/production.txt b/{{cookiecutter.project_slug}}/requirements/production.txt index 999d804f3..b6f22db45 100644 --- a/{{cookiecutter.project_slug}}/requirements/production.txt +++ b/{{cookiecutter.project_slug}}/requirements/production.txt @@ -4,11 +4,11 @@ gunicorn==23.0.0 # https://github.com/benoitc/gunicorn psycopg[c]==3.2.3 # https://github.com/psycopg/psycopg -{%- if cookiecutter.use_whitenoise == 'n' %} +{%- if cookiecutter.use_whitenoise == 'n'and cookiecutter.cloud_provider in ('AWS', 'GCP') %} Collectfasta==3.2.0 # https://github.com/jasongi/collectfasta {%- endif %} {%- if cookiecutter.use_sentry == "y" %} -sentry-sdk==2.16.0 # https://github.com/getsentry/sentry-python +sentry-sdk==2.17.0 # https://github.com/getsentry/sentry-python {%- endif %} {%- if cookiecutter.use_docker == "n" and cookiecutter.windows == "y" %} hiredis==3.0.0 # https://github.com/redis/hiredis-py diff --git a/{{cookiecutter.project_slug}}/utility/requirements-noble.apt b/{{cookiecutter.project_slug}}/utility/requirements-noble.apt new file mode 100644 index 000000000..f24f6f3da --- /dev/null +++ b/{{cookiecutter.project_slug}}/utility/requirements-noble.apt @@ -0,0 +1,23 @@ +##basic build dependencies of various Django apps for Debian Bookworm 12.x +#build-essential metapackage install: make, gcc, g++, +build-essential +#required to translate +gettext +python3-dev + +##shared dependencies of: +##Pillow, pylibmc +zlib1g-dev + +##Postgresql and psycopg dependencies +libpq-dev + +##Pillow dependencies +libtiff5-dev +libjpeg62-turbo-dev +libfreetype6-dev +liblcms2-dev +libwebp-dev + +##django-extensions +libgraphviz-dev