From d2ec1eca12ee2f6356a96009e65f60b1975f9ecd Mon Sep 17 00:00:00 2001 From: Thorrak Date: Thu, 26 Nov 2020 10:15:04 -0500 Subject: [PATCH 01/14] Fix typo in message --- .../{{cookiecutter.project_slug}}/users/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/views.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/views.py index 520b1e52c..fe41938d7 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/views.py +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/views.py @@ -31,7 +31,7 @@ class UserUpdateView(LoginRequiredMixin, UpdateView): def form_valid(self, form): messages.add_message( - self.request, messages.INFO, _("Infos successfully updated") + self.request, messages.INFO, _("Information successfully updated") ) return super().form_valid(form) From 894dbce6459d5aa63f83f71bffaca12708b739c3 Mon Sep 17 00:00:00 2001 From: Thorrak Date: Thu, 26 Nov 2020 10:17:20 -0500 Subject: [PATCH 02/14] Add test for users.form_valid Ensures that the message is added to the request when a form is submitted --- .../users/tests/test_views.py | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/test_views.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/test_views.py index 3638c8f63..23d4ab3c8 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/test_views.py +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/test_views.py @@ -1,8 +1,12 @@ import pytest +from django.contrib import messages from django.contrib.auth.models import AnonymousUser +from django.contrib.messages.middleware import MessageMiddleware +from django.contrib.sessions.middleware import SessionMiddleware from django.http.response import Http404 from django.test import RequestFactory +from {{ cookiecutter.project_slug }}.users.forms import UserChangeForm from {{ cookiecutter.project_slug }}.users.models import User from {{ cookiecutter.project_slug }}.users.tests.factories import UserFactory from {{ cookiecutter.project_slug }}.users.views import ( @@ -41,6 +45,24 @@ class TestUserUpdateView: assert view.get_object() == user + def test_form_valid(self, user: User, rf: RequestFactory): + view = UserUpdateView() + request = rf.get("/fake-url/") + + # Add the session/message middleware to the request + SessionMiddleware().process_request(request) + MessageMiddleware().process_request(request) + request.user = user + + view.request = request + + # Initialize the form + form = UserChangeForm() + form.cleaned_data = [] + view.form_valid(form) + + assert messages.get_messages(request)._queued_messages[0].message == "Information successfully updated" + class TestUserRedirectView: def test_get_redirect_url(self, user: User, rf: RequestFactory): From ed69df44032c5b9911640e25ec3b30f238d3b46e Mon Sep 17 00:00:00 2001 From: Thorrak Date: Thu, 26 Nov 2020 11:23:46 -0500 Subject: [PATCH 03/14] Change test to iterate through messages instead of accessing _queued_messages directly --- .../{{cookiecutter.project_slug}}/users/tests/test_views.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/test_views.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/test_views.py index 23d4ab3c8..52d146065 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/test_views.py +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/test_views.py @@ -61,7 +61,11 @@ class TestUserUpdateView: form.cleaned_data = [] view.form_valid(form) - assert messages.get_messages(request)._queued_messages[0].message == "Information successfully updated" + found_message = False + for message in messages.get_messages(request): + assert message.message == "Information successfully updated" + found_message = True + assert found_message class TestUserRedirectView: From c077028310ec8196a070fc7e05816493173d28c4 Mon Sep 17 00:00:00 2001 From: pyup-bot Date: Mon, 28 Dec 2020 02:41:37 -0800 Subject: [PATCH 04/14] Update factory-boy from 3.1.0 to 3.2.0 --- {{cookiecutter.project_slug}}/requirements/local.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/requirements/local.txt b/{{cookiecutter.project_slug}}/requirements/local.txt index 718242b8c..b831b46a8 100644 --- a/{{cookiecutter.project_slug}}/requirements/local.txt +++ b/{{cookiecutter.project_slug}}/requirements/local.txt @@ -37,7 +37,7 @@ pre-commit==2.9.3 # https://github.com/pre-commit/pre-commit # Django # ------------------------------------------------------------------------------ -factory-boy==3.1.0 # https://github.com/FactoryBoy/factory_boy +factory-boy==3.2.0 # https://github.com/FactoryBoy/factory_boy django-debug-toolbar==3.2 # https://github.com/jazzband/django-debug-toolbar django-extensions==3.1.0 # https://github.com/django-extensions/django-extensions From dce3144b3989f5634a38e1c9d2b5cd128d1266c1 Mon Sep 17 00:00:00 2001 From: Andrew Chen Wang <60190294+Andrew-Chen-Wang@users.noreply.github.com> Date: Thu, 7 Jan 2021 22:27:50 -0500 Subject: [PATCH 05/14] Omit first_name and last_name in User model --- .../{{cookiecutter.project_slug}}/users/models.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/models.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/models.py index 8391bc032..712a355b6 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/models.py +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/models.py @@ -9,6 +9,8 @@ class User(AbstractUser): #: First and last name do not cover name patterns around the globe name = CharField(_("Name of User"), blank=True, max_length=255) + first_name = None + last_name = None def get_absolute_url(self): """Get url for user's detail view. From 2f416f90574fbfc60e1e7c5db0e2cb22dfd42b7a Mon Sep 17 00:00:00 2001 From: Andrew Chen Wang <60190294+Andrew-Chen-Wang@users.noreply.github.com> Date: Thu, 7 Jan 2021 22:30:27 -0500 Subject: [PATCH 06/14] Remove first_name and last_name from migrations --- .../users/migrations/0001_initial.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/migrations/0001_initial.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/migrations/0001_initial.py index c9d890568..ef2c2d941 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/migrations/0001_initial.py +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/migrations/0001_initial.py @@ -53,18 +53,6 @@ class Migration(migrations.Migration): verbose_name="username", ), ), - ( - "first_name", - models.CharField( - blank=True, max_length=30, verbose_name="first name" - ), - ), - ( - "last_name", - models.CharField( - blank=True, max_length=150, verbose_name="last name" - ), - ), ( "email", models.EmailField( From 5809eabb31543e518eb7eaffca08e793b65b7a78 Mon Sep 17 00:00:00 2001 From: Andrew Chen Wang <60190294+Andrew-Chen-Wang@users.noreply.github.com> Date: Thu, 7 Jan 2021 22:39:18 -0500 Subject: [PATCH 07/14] Ignore typing override in name removals --- .../{{cookiecutter.project_slug}}/users/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/models.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/models.py index 712a355b6..935eee9a2 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/models.py +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/models.py @@ -9,8 +9,8 @@ class User(AbstractUser): #: First and last name do not cover name patterns around the globe name = CharField(_("Name of User"), blank=True, max_length=255) - first_name = None - last_name = None + first_name = None # type: ignore + last_name = None # type: ignore def get_absolute_url(self): """Get url for user's detail view. From 30d8498a79d3e02fecbb8cb03ee92208c2d7a72d Mon Sep 17 00:00:00 2001 From: pyup-bot Date: Wed, 20 Jan 2021 13:31:41 -0800 Subject: [PATCH 08/14] Update tox from 3.21.1 to 3.21.2 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 375d6345f..55182fa3f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,7 +11,7 @@ flake8-isort==4.0.0 # Testing # ------------------------------------------------------------------------------ -tox==3.21.1 +tox==3.21.2 pytest==5.4.3 # pyup: <6 # https://github.com/hackebrot/pytest-cookies/issues/51 pytest-cookies==0.5.1 pytest-instafail==0.4.2 From 3cbd840a96628282e8ab99c2dc2cf4e7e711fa82 Mon Sep 17 00:00:00 2001 From: Andrew Chen Wang <60190294+Andrew-Chen-Wang@users.noreply.github.com> Date: Thu, 21 Jan 2021 19:02:01 -0500 Subject: [PATCH 09/14] Use self.request.user instead of second query --- .../{{cookiecutter.project_slug}}/users/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/views.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/views.py index 520b1e52c..f3a240d81 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/views.py +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/views.py @@ -27,7 +27,7 @@ class UserUpdateView(LoginRequiredMixin, UpdateView): return reverse("users:detail", kwargs={"username": self.request.user.username}) def get_object(self): - return User.objects.get(username=self.request.user.username) + return self.request.user def form_valid(self, form): messages.add_message( From 4f52366a9149aa4d752295d40d4c609ebc1bb97a Mon Sep 17 00:00:00 2001 From: pyup-bot Date: Fri, 22 Jan 2021 13:28:28 -0800 Subject: [PATCH 10/14] Update mypy from 0.790 to 0.800 --- {{cookiecutter.project_slug}}/requirements/local.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/requirements/local.txt b/{{cookiecutter.project_slug}}/requirements/local.txt index 349442ac1..ca677877b 100644 --- a/{{cookiecutter.project_slug}}/requirements/local.txt +++ b/{{cookiecutter.project_slug}}/requirements/local.txt @@ -13,7 +13,7 @@ watchgod==0.6 # https://github.com/samuelcolvin/watchgod # Testing # ------------------------------------------------------------------------------ -mypy==0.790 # https://github.com/python/mypy +mypy==0.800 # https://github.com/python/mypy django-stubs==1.7.0 # https://github.com/typeddjango/django-stubs pytest==6.2.1 # https://github.com/pytest-dev/pytest pytest-sugar==0.9.4 # https://github.com/Frozenball/pytest-sugar From 5a8a86ec44ba5c018e5630370fc23d3c69f72d39 Mon Sep 17 00:00:00 2001 From: browniebroke Date: Sat, 23 Jan 2021 03:15:12 +0000 Subject: [PATCH 11/14] Update Changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13531da57..1b47539fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All enhancements and patches to Cookiecutter Django will be documented in this f +## [2021-01-22] +### Changed +- Use self.request.user instead of second query ([#3012](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3012)) + ## [2021-01-14] ### Updated - Update tox to 3.21.1 ([#3006](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3006)) From b7c95f6eed786000278f5719fbf4ac037af20e50 Mon Sep 17 00:00:00 2001 From: Bruno Alla Date: Sun, 24 Jan 2021 14:20:39 +0000 Subject: [PATCH 12/14] Update factory-boy's .generate to evaluate Co-Authored-By: Timo Halbesma --- .../{{cookiecutter.project_slug}}/users/tests/factories.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/factories.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/factories.py index 05b3ae0b5..edd306cb8 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/factories.py +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/factories.py @@ -23,7 +23,7 @@ class UserFactory(DjangoModelFactory): digits=True, upper_case=True, lower_case=True, - ).generate(params={"locale": None}) + ).evaluate(None, None, extra={"locale": None}) ) self.set_password(password) From 99f6cf35bb9cf3f5f4dad0db4d077ff3bea78fb1 Mon Sep 17 00:00:00 2001 From: browniebroke Date: Sun, 24 Jan 2021 15:08:56 +0000 Subject: [PATCH 13/14] Update Contributors --- .github/contributors.json | 5 +++++ CONTRIBUTORS.md | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/.github/contributors.json b/.github/contributors.json index 99fd084f0..7976ce1d6 100644 --- a/.github/contributors.json +++ b/.github/contributors.json @@ -1057,5 +1057,10 @@ "name": "Yotam Tal", "github_login": "yotamtal", "twitter_username": "" + }, + { + "name": "John", + "github_login": "thorrak", + "twitter_username": "" } ] \ No newline at end of file diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 75f0efd2d..dd66bd95f 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -866,6 +866,13 @@ Listed in alphabetical order. afrowave + + John + + thorrak + + + John Cass From 42f33527c51effce8ad39e8b7d7f94a6a642d736 Mon Sep 17 00:00:00 2001 From: Bruno Alla Date: Sun, 24 Jan 2021 15:11:15 +0000 Subject: [PATCH 14/14] Refactor test --- .../users/tests/test_views.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/test_views.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/test_views.py index 52d146065..c2fe8b519 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/test_views.py +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/test_views.py @@ -61,11 +61,8 @@ class TestUserUpdateView: form.cleaned_data = [] view.form_valid(form) - found_message = False - for message in messages.get_messages(request): - assert message.message == "Information successfully updated" - found_message = True - assert found_message + messages_sent = [m.message for m in messages.get_messages(request)] + assert messages_sent == ["Information successfully updated"] class TestUserRedirectView: