Merge branch 'cookiecutter:master' into main

This commit is contained in:
Jimmy Gitonga 2024-02-22 18:10:53 +03:00 committed by GitHub
commit 0f674bf7eb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 48 additions and 40 deletions

View File

@ -1115,7 +1115,7 @@
"twitter_username": "Qoyyuum" "twitter_username": "Qoyyuum"
}, },
{ {
"name": "mfosterw", "name": "Matthew Foster Walsh",
"github_login": "mfosterw", "github_login": "mfosterw",
"twitter_username": "" "twitter_username": ""
}, },

View File

@ -26,7 +26,7 @@ repos:
args: ["--tab-width", "2"] args: ["--tab-width", "2"]
- repo: https://github.com/asottile/pyupgrade - repo: https://github.com/asottile/pyupgrade
rev: v3.15.0 rev: v3.15.1
hooks: hooks:
- id: pyupgrade - id: pyupgrade
args: [--py311-plus] args: [--py311-plus]

View File

@ -3,6 +3,23 @@ All enhancements and patches to Cookiecutter Django will be documented in this f
<!-- GENERATOR_PLACEHOLDER --> <!-- GENERATOR_PLACEHOLDER -->
## 2024.02.21
### Changed
- Switch to `celery.shared_task` to define tasks ([#4881](https://github.com/cookiecutter/cookiecutter-django/pull/4881))
- Replace usages of `get_user_model` by importing model directly ([#4879](https://github.com/cookiecutter/cookiecutter-django/pull/4879))
### Updated
- Auto-update pre-commit hooks ([#4873](https://github.com/cookiecutter/cookiecutter-django/pull/4873))
- Update pre-commit to 3.6.2 ([#4874](https://github.com/cookiecutter/cookiecutter-django/pull/4874))
- Update ruff to 0.2.2 ([#4871](https://github.com/cookiecutter/cookiecutter-django/pull/4871))
## 2024.02.19 ## 2024.02.19

View File

@ -1454,6 +1454,13 @@ Listed in alphabetical order.
</td> </td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>Matthew Foster Walsh</td>
<td>
<a href="https://github.com/mfosterw">mfosterw</a>
</td>
<td></td>
</tr>
<tr> <tr>
<td>Matthew Sisley</td> <td>Matthew Sisley</td>
<td> <td>
@ -1489,13 +1496,6 @@ Listed in alphabetical order.
</td> </td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>mfosterw</td>
<td>
<a href="https://github.com/mfosterw">mfosterw</a>
</td>
<td></td>
</tr>
<tr> <tr>
<td>Michael Gecht</td> <td>Michael Gecht</td>
<td> <td>

View File

@ -1,13 +1,13 @@
cookiecutter==2.5.0 cookiecutter==2.6.0
sh==2.0.6; sys_platform != "win32" sh==2.0.6; sys_platform != "win32"
binaryornot==0.4.4 binaryornot==0.4.4
# Code quality # Code quality
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
ruff==0.2.1 ruff==0.2.2
django-upgrade==1.16.0 django-upgrade==1.16.0
djlint==1.34.1 djlint==1.34.1
pre-commit==3.6.1 pre-commit==3.6.2
# Testing # Testing
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------

View File

@ -5,7 +5,7 @@ except ImportError:
from distutils.core import setup from distutils.core import setup
# We use calendar versioning # We use calendar versioning
version = "2024.02.19" version = "2024.02.21"
with open("README.md") as readme_file: with open("README.md") as readme_file:
long_description = readme_file.read() long_description = readme_file.read()

View File

@ -35,7 +35,7 @@ repos:
# Run the Ruff linter. # Run the Ruff linter.
- repo: https://github.com/astral-sh/ruff-pre-commit - repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.2.1 rev: v0.2.2
hooks: hooks:
# Linter # Linter
- id: ruff - id: ruff

View File

@ -28,10 +28,10 @@ sphinx-autobuild==2024.2.4 # https://github.com/GaretJax/sphinx-autobuild
# Code quality # Code quality
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
ruff==0.2.1 # https://github.com/astral-sh/ruff ruff==0.2.2 # https://github.com/astral-sh/ruff
coverage==7.4.1 # https://github.com/nedbat/coveragepy coverage==7.4.1 # https://github.com/nedbat/coveragepy
djlint==1.34.1 # https://github.com/Riverside-Healthcare/djLint djlint==1.34.1 # https://github.com/Riverside-Healthcare/djLint
pre-commit==3.6.1 # https://github.com/pre-commit/pre-commit pre-commit==3.6.2 # https://github.com/pre-commit/pre-commit
# Django # Django
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------

View File

@ -1,19 +1,17 @@
from django.conf import settings from django.conf import settings
from django.contrib import admin from django.contrib import admin
from django.contrib.auth import admin as auth_admin from django.contrib.auth import admin as auth_admin
from django.contrib.auth import decorators from django.contrib.auth.decorators import login_required
from django.contrib.auth import get_user_model
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from {{ cookiecutter.project_slug }}.users.forms import UserAdminChangeForm from {{ cookiecutter.project_slug }}.users.forms import UserAdminChangeForm
from {{ cookiecutter.project_slug }}.users.forms import UserAdminCreationForm from {{ cookiecutter.project_slug }}.users.forms import UserAdminCreationForm
from {{ cookiecutter.project_slug }}.users.models import User
User = get_user_model()
if settings.DJANGO_ADMIN_FORCE_ALLAUTH: if settings.DJANGO_ADMIN_FORCE_ALLAUTH:
# Force the `admin` sign in process to go through the `django-allauth` workflow: # Force the `admin` sign in process to go through the `django-allauth` workflow:
# https://docs.allauth.org/en/latest/common/admin.html#admin # https://docs.allauth.org/en/latest/common/admin.html#admin
admin.site.login = decorators.login_required(admin.site.login) # type: ignore[method-assign] admin.site.login = login_required(admin.site.login) # type: ignore[method-assign]
@admin.register(User) @admin.register(User)

View File

@ -1,12 +1,9 @@
from django.contrib.auth import get_user_model
from rest_framework import serializers from rest_framework import serializers
from {{ cookiecutter.project_slug }}.users.models import User as UserType from {{ cookiecutter.project_slug }}.users.models import User
User = get_user_model()
class UserSerializer(serializers.ModelSerializer[UserType]): class UserSerializer(serializers.ModelSerializer[User]):
class Meta: class Meta:
model = User model = User
{%- if cookiecutter.username_type == "email" %} {%- if cookiecutter.username_type == "email" %}

View File

@ -1,4 +1,3 @@
from django.contrib.auth import get_user_model
from rest_framework import status from rest_framework import status
from rest_framework.decorators import action from rest_framework.decorators import action
from rest_framework.mixins import ListModelMixin from rest_framework.mixins import ListModelMixin
@ -7,9 +6,9 @@ from rest_framework.mixins import UpdateModelMixin
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.viewsets import GenericViewSet from rest_framework.viewsets import GenericViewSet
from .serializers import UserSerializer from {{ cookiecutter.project_slug }}.users.models import User
User = get_user_model() from .serializers import UserSerializer
class UserViewSet(RetrieveModelMixin, ListModelMixin, UpdateModelMixin, GenericViewSet): class UserViewSet(RetrieveModelMixin, ListModelMixin, UpdateModelMixin, GenericViewSet):

View File

@ -1,13 +1,12 @@
from allauth.account.forms import SignupForm from allauth.account.forms import SignupForm
from allauth.socialaccount.forms import SignupForm as SocialSignupForm from allauth.socialaccount.forms import SignupForm as SocialSignupForm
from django.contrib.auth import forms as admin_forms from django.contrib.auth import forms as admin_forms
from django.contrib.auth import get_user_model
{%- if cookiecutter.username_type == "email" %} {%- if cookiecutter.username_type == "email" %}
from django.forms import EmailField from django.forms import EmailField
{%- endif %} {%- endif %}
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
User = get_user_model() from {{ cookiecutter.project_slug }}.users.models import User
class UserAdminChangeForm(admin_forms.UserChangeForm): class UserAdminChangeForm(admin_forms.UserChangeForm):

View File

@ -1,11 +1,9 @@
from django.contrib.auth import get_user_model from celery import shared_task
from config import celery_app from {{ cookiecutter.project_slug }}.users.models import User
User = get_user_model()
@celery_app.task() @shared_task()
def get_users_count(): def get_users_count():
"""A pointless Celery task to demonstrate usage.""" """A pointless Celery task to demonstrate usage."""
return User.objects.count() return User.objects.count()

View File

@ -1,11 +1,12 @@
from collections.abc import Sequence from collections.abc import Sequence
from typing import Any from typing import Any
from django.contrib.auth import get_user_model
from factory import Faker from factory import Faker
from factory import post_generation from factory import post_generation
from factory.django import DjangoModelFactory from factory.django import DjangoModelFactory
from {{ cookiecutter.project_slug }}.users.models import User
class UserFactory(DjangoModelFactory): class UserFactory(DjangoModelFactory):
{%- if cookiecutter.username_type == "username" %} {%- if cookiecutter.username_type == "username" %}
@ -38,5 +39,5 @@ class UserFactory(DjangoModelFactory):
instance.save() instance.save()
class Meta: class Meta:
model = get_user_model() model = User
django_get_or_create = ["{{cookiecutter.username_type}}"] django_get_or_create = ["{{cookiecutter.username_type}}"]

View File

@ -1,4 +1,3 @@
from django.contrib.auth import get_user_model
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.messages.views import SuccessMessageMixin from django.contrib.messages.views import SuccessMessageMixin
from django.urls import reverse from django.urls import reverse
@ -7,7 +6,7 @@ from django.views.generic import DetailView
from django.views.generic import RedirectView from django.views.generic import RedirectView
from django.views.generic import UpdateView from django.views.generic import UpdateView
User = get_user_model() from {{ cookiecutter.project_slug }}.users.models import User
class UserDetailView(LoginRequiredMixin, DetailView): class UserDetailView(LoginRequiredMixin, DetailView):