From 516c4458ac7c053bf83d5cf6bef1f3d100cc8f33 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Tue, 1 Oct 2019 17:11:24 +0300 Subject: [PATCH 1/6] Make model name translated --- apps/main/models.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/main/models.py b/apps/main/models.py index 2270cbf9..fa6cf7d1 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -349,7 +349,9 @@ class Carousel(models.Model): @property def model_name(self): - return self.content_object.__class__.__name__ + if hasattr(self.content_object, 'establishment_type'): + return self.content_object.establishment_type.name_translated + class Page(models.Model): From 9793c0a49f3e967b5ab4d6967d3dd2ab98598e39 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Tue, 1 Oct 2019 17:42:37 +0300 Subject: [PATCH 2/6] Resend confirmation email method --- apps/authorization/serializers/common.py | 30 +++++++++++++++++++++++- apps/authorization/urls/common.py | 1 + apps/authorization/views/common.py | 11 +++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/apps/authorization/serializers/common.py b/apps/authorization/serializers/common.py index 5d8bb3a8..e19fdae2 100644 --- a/apps/authorization/serializers/common.py +++ b/apps/authorization/serializers/common.py @@ -4,7 +4,7 @@ from django.contrib.auth import authenticate from django.contrib.auth import password_validation as password_validators from django.db.models import Q from rest_framework import serializers -from rest_framework import validators as rest_validators +from rest_framework.generics import get_object_or_404 from account import models as account_models from authorization import tasks @@ -76,6 +76,34 @@ class SignupSerializer(serializers.ModelSerializer): return obj +class ReconfirmSerializer(serializers.ModelSerializer): + email = serializers.EmailField(write_only=True) + + class Meta: + model = account_models.User + fields = ('email',) + + def validate_email(self, value): + """Validate email""" + if not account_models.User.objects.filter(email=value).filter(email_confirmed=False).exists(): + raise serializers.ValidationError() + return value + + def create(self, validated_data): + """Override create method""" + queryset = account_models.User.objects.all() + obj = get_object_or_404(queryset, email=validated_data.get('email').lower()) + if settings.USE_CELERY: + tasks.send_confirm_email.delay( + user_id=obj.id, + country_code=self.context.get('request').country_code) + else: + tasks.send_confirm_email( + user_id=obj.id, + country_code=self.context.get('request').country_code) + return obj + + class LoginByUsernameOrEmailSerializer(SourceSerializerMixin, serializers.ModelSerializer): """Serializer for login user""" diff --git a/apps/authorization/urls/common.py b/apps/authorization/urls/common.py index 4e6e59e1..213744d4 100644 --- a/apps/authorization/urls/common.py +++ b/apps/authorization/urls/common.py @@ -29,6 +29,7 @@ urlpatterns_oauth2 = [ urlpatterns_jwt = [ path('signup/', views.SignUpView.as_view(), name='signup'), + path('signup/reconfirm', views.ReconfirmView.as_view(), name='signup-reconfirm'), path('signup/confirm///', views.ConfirmationEmailView.as_view(), name='signup-confirm'), path('login/', views.LoginByUsernameOrEmailView.as_view(), name='login'), diff --git a/apps/authorization/views/common.py b/apps/authorization/views/common.py index bb337dce..5d789c8d 100644 --- a/apps/authorization/views/common.py +++ b/apps/authorization/views/common.py @@ -164,6 +164,17 @@ class SignUpView(generics.GenericAPIView): return Response(status=status.HTTP_201_CREATED) +class ReconfirmView(generics.CreateAPIView): + """ Resends confirmation email whether user's still not confirmed """ + permission_classes = (permissions.AllowAny,) + serializer_class = serializers.ReconfirmSerializer + + def post(self, request, *args, **kwargs): + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + return Response(status=status.HTTP_201_CREATED) + + class ConfirmationEmailView(JWTGenericViewMixin): """View for confirmation email""" From df6b221029ed651568781615df9f28c92afe7a0c Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Tue, 1 Oct 2019 21:32:24 +0300 Subject: [PATCH 3/6] Review fixes --- apps/authorization/serializers/common.py | 17 +++++++++++------ apps/authorization/urls/common.py | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/apps/authorization/serializers/common.py b/apps/authorization/serializers/common.py index e19fdae2..07c561f8 100644 --- a/apps/authorization/serializers/common.py +++ b/apps/authorization/serializers/common.py @@ -77,7 +77,6 @@ class SignupSerializer(serializers.ModelSerializer): class ReconfirmSerializer(serializers.ModelSerializer): - email = serializers.EmailField(write_only=True) class Meta: model = account_models.User @@ -85,22 +84,28 @@ class ReconfirmSerializer(serializers.ModelSerializer): def validate_email(self, value): """Validate email""" - if not account_models.User.objects.filter(email=value).filter(email_confirmed=False).exists(): - raise serializers.ValidationError() + users = list(account_models.User.objects.filter(email=value.lower()).all()) + if not users: + raise serializers.ValidationError(detail='User with mentioned email does not exist.') + users = list(filter(lambda user: not user.email_confirmed, users)) + if not users: + raise serializers.ValidationError(detail='User with this email is confirmed.') return value def create(self, validated_data): """Override create method""" queryset = account_models.User.objects.all() - obj = get_object_or_404(queryset, email=validated_data.get('email').lower()) + email = validated_data.get('email').lower() + country_code = self.context.get('request').country_code + obj = get_object_or_404(queryset, email=email) if settings.USE_CELERY: tasks.send_confirm_email.delay( user_id=obj.id, - country_code=self.context.get('request').country_code) + country_code=country_code) else: tasks.send_confirm_email( user_id=obj.id, - country_code=self.context.get('request').country_code) + country_code=country_code) return obj diff --git a/apps/authorization/urls/common.py b/apps/authorization/urls/common.py index 213744d4..814ce836 100644 --- a/apps/authorization/urls/common.py +++ b/apps/authorization/urls/common.py @@ -29,7 +29,7 @@ urlpatterns_oauth2 = [ urlpatterns_jwt = [ path('signup/', views.SignUpView.as_view(), name='signup'), - path('signup/reconfirm', views.ReconfirmView.as_view(), name='signup-reconfirm'), + path('signup/reconfirm/', views.ReconfirmView.as_view(), name='signup-reconfirm'), path('signup/confirm///', views.ConfirmationEmailView.as_view(), name='signup-confirm'), path('login/', views.LoginByUsernameOrEmailView.as_view(), name='login'), From cb37b5733e7d5883eb1f1e99f7b41d9a8932b363 Mon Sep 17 00:00:00 2001 From: evgeniy-st Date: Thu, 3 Oct 2019 18:10:29 +0300 Subject: [PATCH 4/6] update migration --- .../migrations/0002_auto_20190917_1307.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/apps/advertisement/migrations/0002_auto_20190917_1307.py b/apps/advertisement/migrations/0002_auto_20190917_1307.py index 178d0f3a..b256fa53 100644 --- a/apps/advertisement/migrations/0002_auto_20190917_1307.py +++ b/apps/advertisement/migrations/0002_auto_20190917_1307.py @@ -4,6 +4,13 @@ from django.db import migrations, models import uuid +def fill_uuid(apps, schemaeditor): + Advertisement = apps.get_model('advertisement', 'Advertisement') + for a in Advertisement.objects.all(): + a.uuid = uuid.uuid4() + a.save() + + class Migration(migrations.Migration): dependencies = [ @@ -23,6 +30,12 @@ class Migration(migrations.Migration): field=models.ManyToManyField(to='translation.Language'), ), migrations.AddField( + model_name='advertisement', + name='uuid', + field=models.UUIDField(default=uuid.uuid4, editable=False), + ), + migrations.RunPython(fill_uuid, migrations.RunPython.noop), + migrations.AlterField( model_name='advertisement', name='uuid', field=models.UUIDField(default=uuid.uuid4, editable=False, unique=True), From 8b9f6ed864de8604276177cbc156931d2477dd64 Mon Sep 17 00:00:00 2001 From: evgeniy-st Date: Thu, 3 Oct 2019 18:21:04 +0300 Subject: [PATCH 5/6] another fix migraztion --- .../migrations/0002_auto_20190917_1307.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/apps/advertisement/migrations/0002_auto_20190917_1307.py b/apps/advertisement/migrations/0002_auto_20190917_1307.py index b256fa53..6604a979 100644 --- a/apps/advertisement/migrations/0002_auto_20190917_1307.py +++ b/apps/advertisement/migrations/0002_auto_20190917_1307.py @@ -9,7 +9,14 @@ def fill_uuid(apps, schemaeditor): for a in Advertisement.objects.all(): a.uuid = uuid.uuid4() a.save() - + + +def fill_block_level(apps, schemaeditor): + Advertisement = apps.get_model('advertisement', 'Advertisement') + for a in Advertisement.objects.all(): + a.block_level = '' + a.save() + class Migration(migrations.Migration): @@ -45,8 +52,14 @@ class Migration(migrations.Migration): name='block_level', ), migrations.AddField( + model_name='advertisement', + name='block_level', + field=models.CharField(blank=True, null=True, max_length=10, verbose_name='Block level') + ), + migrations.RunPython(fill_block_level, migrations.RunPython.noop), + migrations.AlterField( model_name='advertisement', name='block_level', field=models.CharField(max_length=10, verbose_name='Block level') - ) + ), ] From 24f84ae8be970a6dff15fed270380e2635825c75 Mon Sep 17 00:00:00 2001 From: evgeniy-st Date: Fri, 4 Oct 2019 11:16:01 +0300 Subject: [PATCH 6/6] update tag filter --- apps/search_indexes/views.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/search_indexes/views.py b/apps/search_indexes/views.py index a69caf1f..2b9f4e65 100644 --- a/apps/search_indexes/views.py +++ b/apps/search_indexes/views.py @@ -60,7 +60,10 @@ class EstablishmentDocumentViewSet(BaseDocumentViewSet): 'description', ) filter_fields = { - 'tag': 'tags.id', + 'tag': { + 'field': 'tags.id', + 'lookups': [constants.LOOKUP_QUERY_IN] + }, 'toque_number': { 'field': 'toque_number', 'lookups': [