From b20baa5bcdf2523af36f41cb354d8ba7977d670a Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 13 Nov 2019 09:28:27 +0300 Subject: [PATCH 01/11] inquiries and grid crud --- apps/review/serializers/common.py | 39 +++++++++++++++++++++++- apps/review/urls/back.py | 6 ++++ apps/review/views/back.py | 50 +++++++++++++++++++++++++++++-- 3 files changed, 91 insertions(+), 4 deletions(-) diff --git a/apps/review/serializers/common.py b/apps/review/serializers/common.py index f4acc4f4..74ed6924 100644 --- a/apps/review/serializers/common.py +++ b/apps/review/serializers/common.py @@ -1,5 +1,6 @@ from rest_framework import serializers -from review.models import Review + +from review.models import Review, Inquiries, GridItems class ReviewBaseSerializer(serializers.ModelSerializer): @@ -27,3 +28,39 @@ class ReviewShortSerializer(ReviewBaseSerializer): fields = ( 'text_translated', ) + + +class InquiriesBaseSerializer(serializers.ModelSerializer): + class Meta: + model = Inquiries + fields = ( + 'id', + 'review', + 'comment', + 'final_comment', + 'mark', + 'attachment_file', + 'author', + 'bill_file', + 'price', + 'moment', + 'gallery', + 'decibels', + 'nomination', + 'nominee', + 'published', + ) + + +class GridItemsBaseSerializer(serializers.ModelSerializer): + class Meta: + model = GridItems + fields = ( + 'id', + 'inquiry', + 'sub_name', + 'name', + 'value', + 'desc', + 'dish_title', + ) diff --git a/apps/review/urls/back.py b/apps/review/urls/back.py index 84ca49f3..a59aafa8 100644 --- a/apps/review/urls/back.py +++ b/apps/review/urls/back.py @@ -8,4 +8,10 @@ app_name = 'review' urlpatterns = [ path('', views.ReviewLstView.as_view(), name='review-list-create'), path('/', views.ReviewRUDView.as_view(), name='review-crud'), + path('/inquiries/', views.InquiriesLstView.as_view(), name='inquiries-list'), + path('inquiries/', views.InquiriesLstView.as_view(), name='inquiries-list-create'), + path('inquiries//', views.InquiriesRUDView.as_view(), name='inquiries-crud'), + path('inquiries//grid/', views.GridItemsLstView.as_view(), name='grid-list-create'), + path('inquiries/grid/', views.GridItemsLstView.as_view(), name='grid-list-create'), + path('inquiries/grid//', views.GridItemsRUDView.as_view(), name='grid-crud'), ] diff --git a/apps/review/views/back.py b/apps/review/views/back.py index 31e8725a..c6ec6b67 100644 --- a/apps/review/views/back.py +++ b/apps/review/views/back.py @@ -1,6 +1,7 @@ from rest_framework import generics, permissions -from review import serializers + from review import models +from review import serializers from utils.permissions import IsReviewerManager, IsRestaurantReviewer @@ -8,12 +9,55 @@ class ReviewLstView(generics.ListCreateAPIView): """Comment list create view.""" serializer_class = serializers.ReviewBaseSerializer queryset = models.Review.objects.all() - permission_classes = [permissions.IsAuthenticatedOrReadOnly,] + permission_classes = [permissions.IsAuthenticatedOrReadOnly, ] class ReviewRUDView(generics.RetrieveUpdateDestroyAPIView): """Comment RUD view.""" serializer_class = serializers.ReviewBaseSerializer queryset = models.Review.objects.all() - permission_classes = [IsReviewerManager|IsRestaurantReviewer] + permission_classes = [IsReviewerManager | IsRestaurantReviewer] + lookup_field = 'id' + + +class InquiriesLstView(generics.ListCreateAPIView): + """Inquiries list create view.""" + + serializer_class = serializers.InquiriesBaseSerializer + queryset = models.Inquiries.objects.all() + permission_classes = (permissions.IsAuthenticatedOrReadOnly,) + + def get_queryset(self): + review_id = self.kwargs.get('review_id') + if review_id: + return super().get_queryset().filter(review_id=review_id) + return super().get_queryset() + + +class InquiriesRUDView(generics.RetrieveUpdateDestroyAPIView): + """Inquiries RUD view.""" + serializer_class = serializers.InquiriesBaseSerializer + queryset = models.Inquiries.objects.all() + permission_classes = (permissions.IsAuthenticatedOrReadOnly,) + lookup_field = 'id' + + +class GridItemsLstView(generics.ListCreateAPIView): + """GridItems list create view.""" + serializer_class = serializers.GridItemsBaseSerializer + queryset = models.GridItems.objects.all() + permission_classes = (permissions.IsAuthenticatedOrReadOnly,) + + def get_queryset(self): + inquiry_id = self.kwargs.get('inquiry_id') + if inquiry_id: + return super().get_queryset().filter(inquiry_id=inquiry_id) + return super().get_queryset() + + +class GridItemsRUDView(generics.RetrieveUpdateDestroyAPIView): + """GridItems RUD view.""" + serializer_class = serializers.GridItemsBaseSerializer + queryset = models.GridItems.objects.all() + permission_classes = (permissions.IsAuthenticatedOrReadOnly,) lookup_field = 'id' From 9fcaa6747a50dd878b801553a77a5882f0595964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=20=D0=93=D0=BB=D0=B0?= =?UTF-8?q?=D0=B4=D0=BA=D0=B8=D1=85?= Date: Wed, 13 Nov 2019 11:41:58 +0300 Subject: [PATCH 02/11] Fix tag category add --- apps/product/management/commands/add_product_tag.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/product/management/commands/add_product_tag.py b/apps/product/management/commands/add_product_tag.py index 5633230c..8b6ef85f 100644 --- a/apps/product/management/commands/add_product_tag.py +++ b/apps/product/management/commands/add_product_tag.py @@ -27,8 +27,7 @@ class Command(BaseCommand): def add_category_tag(self): objects = [] for c in tqdm(self.category_sql(), desc='Add category tags'): - categories = TagCategory.objects.filter(index_name=c.category, - value_type=c.value_type + categories = TagCategory.objects.filter(index_name=c.category ) if not categories.exists(): objects.append( @@ -112,5 +111,5 @@ class Command(BaseCommand): def handle(self, *args, **kwargs): self.add_category_tag() self.add_tag() + self.check_tag() self.add_product_tag() - self.check_tag() \ No newline at end of file From cb127ef87901aa187485ef59daaba978282c987f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=20=D0=93=D0=BB=D0=B0?= =?UTF-8?q?=D0=B4=D0=BA=D0=B8=D1=85?= Date: Wed, 13 Nov 2019 12:12:16 +0300 Subject: [PATCH 03/11] Fix off elastic --- apps/search_indexes/__init__.py | 2 +- apps/search_indexes/signals.py | 154 ++++++++++++++++---------------- project/settings/base.py | 6 +- 3 files changed, 81 insertions(+), 81 deletions(-) diff --git a/apps/search_indexes/__init__.py b/apps/search_indexes/__init__.py index 6c812219..c45cbc38 100644 --- a/apps/search_indexes/__init__.py +++ b/apps/search_indexes/__init__.py @@ -1 +1 @@ -from search_indexes.signals import update_document +# from search_indexes.signals import update_document diff --git a/apps/search_indexes/signals.py b/apps/search_indexes/signals.py index 3da50fb8..6cf109fb 100644 --- a/apps/search_indexes/signals.py +++ b/apps/search_indexes/signals.py @@ -1,77 +1,77 @@ -"""Search indexes app signals.""" -from django.db.models.signals import post_save -from django.dispatch import receiver -from django_elasticsearch_dsl.registries import registry - - -@receiver(post_save) -def update_document(sender, **kwargs): - from establishment.models import Establishment - app_label = sender._meta.app_label - model_name = sender._meta.model_name - instance = kwargs['instance'] - - if app_label == 'location': - if model_name == 'country': - establishments = Establishment.objects.filter( - address__city__country=instance) - for establishment in establishments: - registry.update(establishment) - if model_name == 'city': - establishments = Establishment.objects.filter( - address__city=instance) - for establishment in establishments: - registry.update(establishment) - if model_name == 'address': - establishments = Establishment.objects.filter( - address=instance) - for establishment in establishments: - registry.update(establishment) - - if app_label == 'establishment': - # todo: remove after migration - from establishment import models as establishment_models - if model_name == 'establishmenttype': - if isinstance(instance, establishment_models.EstablishmentType): - establishments = Establishment.objects.filter( - establishment_type=instance) - for establishment in establishments: - registry.update(establishment) - if model_name == 'establishmentsubtype': - if isinstance(instance, establishment_models.EstablishmentSubType): - establishments = Establishment.objects.filter( - establishment_subtypes=instance) - for establishment in establishments: - registry.update(establishment) - - if app_label == 'tag': - if model_name == 'tag': - establishments = Establishment.objects.filter(tags=instance) - for establishment in establishments: - registry.update(establishment) - - -@receiver(post_save) -def update_news(sender, **kwargs): - from news.models import News - app_label = sender._meta.app_label - model_name = sender._meta.model_name - instance = kwargs['instance'] - - if app_label == 'location': - if model_name == 'country': - qs = News.objects.filter(country=instance) - for news in qs: - registry.update(news) - - if app_label == 'news': - if model_name == 'newstype': - qs = News.objects.filter(news_type=instance) - for news in qs: - registry.update(news) - - if app_label == 'tag': - if model_name == 'tag': - qs = News.objects.filter(tags=instance) - for news in qs: - registry.update(news) +# """Search indexes app signals.""" +# from django.db.models.signals import post_save +# from django.dispatch import receiver +# from django_elasticsearch_dsl.registries import registry +# +# +# @receiver(post_save) +# def update_document(sender, **kwargs): +# from establishment.models import Establishment +# app_label = sender._meta.app_label +# model_name = sender._meta.model_name +# instance = kwargs['instance'] +# +# if app_label == 'location': +# if model_name == 'country': +# establishments = Establishment.objects.filter( +# address__city__country=instance) +# for establishment in establishments: +# registry.update(establishment) +# if model_name == 'city': +# establishments = Establishment.objects.filter( +# address__city=instance) +# for establishment in establishments: +# registry.update(establishment) +# if model_name == 'address': +# establishments = Establishment.objects.filter( +# address=instance) +# for establishment in establishments: +# registry.update(establishment) +# +# if app_label == 'establishment': +# # todo: remove after migration +# from establishment import models as establishment_models +# if model_name == 'establishmenttype': +# if isinstance(instance, establishment_models.EstablishmentType): +# establishments = Establishment.objects.filter( +# establishment_type=instance) +# for establishment in establishments: +# registry.update(establishment) +# if model_name == 'establishmentsubtype': +# if isinstance(instance, establishment_models.EstablishmentSubType): +# establishments = Establishment.objects.filter( +# establishment_subtypes=instance) +# for establishment in establishments: +# registry.update(establishment) +# +# if app_label == 'tag': +# if model_name == 'tag': +# establishments = Establishment.objects.filter(tags=instance) +# for establishment in establishments: +# registry.update(establishment) +# +# +# @receiver(post_save) +# def update_news(sender, **kwargs): +# from news.models import News +# app_label = sender._meta.app_label +# model_name = sender._meta.model_name +# instance = kwargs['instance'] +# +# if app_label == 'location': +# if model_name == 'country': +# qs = News.objects.filter(country=instance) +# for news in qs: +# registry.update(news) +# +# if app_label == 'news': +# if model_name == 'newstype': +# qs = News.objects.filter(news_type=instance) +# for news in qs: +# registry.update(news) +# +# if app_label == 'tag': +# if model_name == 'tag': +# qs = News.objects.filter(tags=instance) +# for news in qs: +# registry.update(news) diff --git a/project/settings/base.py b/project/settings/base.py index 5e3017c7..50756ff2 100644 --- a/project/settings/base.py +++ b/project/settings/base.py @@ -66,7 +66,7 @@ PROJECT_APPS = [ 'partner.apps.PartnerConfig', 'product.apps.ProductConfig', 'recipe.apps.RecipeConfig', - 'search_indexes.apps.SearchIndexesConfig', + # 'search_indexes.apps.SearchIndexesConfig', 'translation.apps.TranslationConfig', 'configuration.apps.ConfigurationConfig', 'timetable.apps.TimetableConfig', @@ -79,8 +79,8 @@ PROJECT_APPS = [ EXTERNAL_APPS = [ 'corsheaders', - 'django_elasticsearch_dsl', - 'django_elasticsearch_dsl_drf', + # 'django_elasticsearch_dsl', + # 'django_elasticsearch_dsl_drf', 'django_filters', 'drf_yasg', 'fcm_django', From d19e75e50e5ddbac75716ff4d51c3a3daf2bdb43 Mon Sep 17 00:00:00 2001 From: Anatoly Date: Wed, 13 Nov 2019 12:14:21 +0300 Subject: [PATCH 04/11] added wine region and wine colors to product list view --- apps/product/serializers/common.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/product/serializers/common.py b/apps/product/serializers/common.py index af1203ff..4294b124 100644 --- a/apps/product/serializers/common.py +++ b/apps/product/serializers/common.py @@ -76,6 +76,9 @@ class ProductBaseSerializer(serializers.ModelSerializer): subtypes = ProductSubTypeBaseSerializer(many=True, read_only=True) establishment_detail = EstablishmentShortSerializer(source='establishment', read_only=True) tags = TagBaseSerializer(source='related_tags', many=True, read_only=True) + wine_region = WineRegionBaseSerializer(read_only=True) + wine_colors = TagBaseSerializer(many=True, read_only=True) + preview_image_url = serializers.URLField(source='preview_main_image_url', allow_null=True, read_only=True) @@ -94,6 +97,8 @@ class ProductBaseSerializer(serializers.ModelSerializer): 'vintage', 'tags', 'preview_image_url', + 'wine_region', + 'wine_colors', ] @@ -104,9 +109,7 @@ class ProductDetailSerializer(ProductBaseSerializer): awards = AwardSerializer(many=True, read_only=True) classifications = ProductClassificationBaseSerializer(many=True, read_only=True) standards = ProductStandardBaseSerializer(many=True, read_only=True) - wine_region = WineRegionBaseSerializer(read_only=True) wine_sub_region = WineSubRegionBaseSerializer(read_only=True) - wine_colors = TagBaseSerializer(many=True, read_only=True) bottles_produced = TagBaseSerializer(many=True, read_only=True) sugar_contents = TagBaseSerializer(many=True, read_only=True) image_url = serializers.ImageField(source='main_image_url', @@ -120,9 +123,7 @@ class ProductDetailSerializer(ProductBaseSerializer): 'awards', 'classifications', 'standards', - 'wine_region', 'wine_sub_region', - 'wine_colors', 'bottles_produced', 'sugar_contents', 'image_url', From ed1ee3705f04939c2e51d2b3942cacf4a2e1a6f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=20=D0=93=D0=BB=D0=B0?= =?UTF-8?q?=D0=B4=D0=BA=D0=B8=D1=85?= Date: Wed, 13 Nov 2019 12:23:05 +0300 Subject: [PATCH 05/11] Fix --- apps/product/management/commands/add_product_tag.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/product/management/commands/add_product_tag.py b/apps/product/management/commands/add_product_tag.py index 8b6ef85f..a360b1b7 100644 --- a/apps/product/management/commands/add_product_tag.py +++ b/apps/product/management/commands/add_product_tag.py @@ -90,8 +90,9 @@ class Command(BaseCommand): tag.filter(lower_value=t.tag_value, category=category) products = Product.objects.filter(old_id=t.product_id) if products.exists(): - products.tags.add(tag) - products.save() + for p in products.all(): + p.tags.add(tag) + p.save() self.stdout.write(self.style.WARNING(f'Add or get tag objects.')) From f91565712434ea97a055c805836d5390f7aecf96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=20=D0=93=D0=BB=D0=B0?= =?UTF-8?q?=D0=B4=D0=BA=D0=B8=D1=85?= Date: Wed, 13 Nov 2019 12:27:03 +0300 Subject: [PATCH 06/11] Fix --- apps/product/management/commands/add_product_tag.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/product/management/commands/add_product_tag.py b/apps/product/management/commands/add_product_tag.py index a360b1b7..b93a5672 100644 --- a/apps/product/management/commands/add_product_tag.py +++ b/apps/product/management/commands/add_product_tag.py @@ -90,7 +90,7 @@ class Command(BaseCommand): tag.filter(lower_value=t.tag_value, category=category) products = Product.objects.filter(old_id=t.product_id) if products.exists(): - for p in products.all(): + for p in products: p.tags.add(tag) p.save() From 9626a946b13b2a454a6135550c2a6a3dd378326d Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 13 Nov 2019 12:29:25 +0300 Subject: [PATCH 07/11] inquiries test --- apps/review/serializers/common.py | 2 + apps/review/tests.py | 136 +++++++++++++++++++++++++++++- 2 files changed, 136 insertions(+), 2 deletions(-) diff --git a/apps/review/serializers/common.py b/apps/review/serializers/common.py index 74ed6924..e79424f5 100644 --- a/apps/review/serializers/common.py +++ b/apps/review/serializers/common.py @@ -31,6 +31,7 @@ class ReviewShortSerializer(ReviewBaseSerializer): class InquiriesBaseSerializer(serializers.ModelSerializer): + """Serializer for model Inquiries.""" class Meta: model = Inquiries fields = ( @@ -53,6 +54,7 @@ class InquiriesBaseSerializer(serializers.ModelSerializer): class GridItemsBaseSerializer(serializers.ModelSerializer): + """Serializer for model GridItems.""" class Meta: model = GridItems fields = ( diff --git a/apps/review/tests.py b/apps/review/tests.py index 7ce503c2..2dc6d86e 100644 --- a/apps/review/tests.py +++ b/apps/review/tests.py @@ -1,3 +1,135 @@ -from django.test import TestCase +from http.cookies import SimpleCookie -# Create your tests here. +from django.urls import reverse +from rest_framework import status +from rest_framework.test import APITestCase + +from account.models import User +from location.models import Country +from review.models import Review, Inquiries, GridItems +from translation.models import Language + + +class BaseTestCase(APITestCase): + + def setUp(self): + self.username = 'test_user' + self.password = 'test_user_password' + self.email = 'test_user@mail.com' + self.user = User.objects.create_user( + username=self.username, + email=self.email, + password=self.password, + ) + + tokens = User.create_jwt_tokens(self.user) + self.client.cookies = SimpleCookie({ + 'access_token': tokens.get('access_token'), + 'refresh_token': tokens.get('refresh_token'), + }) + + self.lang = Language.objects.create( + title='Russia', + locale='ru-RU' + ) + + self.country_ru = Country.objects.create( + name={'en-GB': 'Russian'}, + code='RU', + ) + + self.test_review = Review.objects.create( + reviewer=self.user, + status=Review.READY, + language=self.lang, + vintage=2020, + country=self.country_ru, + text={'en-GB': 'Text review'}, + created_by=self.user, + modified_by=self.user, + object_id=1, + content_type_id=1, + ) + + self.test_inquiry = Inquiries.objects.create( + review=self.test_review, + author=self.user, + comment='Test comment', + ) + + self.test_grid = GridItems.objects.create( + inquiry=self.test_inquiry, + name='Test name', + ) + + +class InquiriesTestCase(BaseTestCase): + def setUp(self): + super().setUp() + + def test_inquiry_list(self): + response = self.client.get('/api/back/review/inquiries/') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_inquiry_list_by_review_id(self): + response = self.client.get(f'/api/back/review/{self.test_review.id}/inquiries/') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_inquiry_post(self): + test_inquiry = { + 'review': self.test_review.pk, + 'author': self.user.pk, + 'comment': 'New test comment', + } + response = self.client.post('/api/back/review/inquiries/', data=test_inquiry) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + def test_inquiry_detail(self): + response = self.client.get(f'/api/back/review/inquiries/{self.test_inquiry.id}/') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_inquiry_detail_put(self): + data = { + 'id': self.test_inquiry.id, + 'review': self.test_review.pk, + 'author': self.user.pk, + 'comment': 'New test comment 2', + } + + response = self.client.put(f'/api/back/review/inquiries/{self.test_inquiry.id}/', data=data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + +class GridItemsTestCase(BaseTestCase): + def setUp(self): + super().setUp() + + def test_grid_list(self): + response = self.client.get('/api/back/review/inquiries/grid/') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_grid_list_by_inquiry_id(self): + response = self.client.get(f'/api/back/review/inquiries/{self.test_inquiry.id}/grid/') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_grid_post(self): + test_grid = { + 'inquiry': self.test_inquiry.pk, + 'name': 'New test name', + } + response = self.client.post('/api/back/review/inquiries/grid/', data=test_grid) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + def test_grid_detail(self): + response = self.client.get(f'/api/back/review/inquiries/grid/{self.test_grid.id}/') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_grid_detail_put(self): + data = { + 'id': self.test_grid.id, + 'inquiry': self.test_inquiry.pk, + 'name': 'New test name 2', + } + + response = self.client.put(f'/api/back/review/inquiries/grid/{self.test_inquiry.id}/', data=data) + self.assertEqual(response.status_code, status.HTTP_200_OK) From 9dde868828d5d6d38e420fa9f2c27362d66e87d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=20=D0=93=D0=BB=D0=B0?= =?UTF-8?q?=D0=B4=D0=BA=D0=B8=D1=85?= Date: Wed, 13 Nov 2019 12:29:27 +0300 Subject: [PATCH 08/11] Fix --- apps/product/management/commands/add_product_tag.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/product/management/commands/add_product_tag.py b/apps/product/management/commands/add_product_tag.py index b93a5672..e8bb2f3f 100644 --- a/apps/product/management/commands/add_product_tag.py +++ b/apps/product/management/commands/add_product_tag.py @@ -91,7 +91,7 @@ class Command(BaseCommand): products = Product.objects.filter(old_id=t.product_id) if products.exists(): for p in products: - p.tags.add(tag) + p.tags.add(*list(tag)) p.save() self.stdout.write(self.style.WARNING(f'Add or get tag objects.')) From d6126856b510c2a140755b52c5031046cd2134e8 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 13 Nov 2019 12:31:19 +0300 Subject: [PATCH 09/11] some tag migrations --- apps/tag/migrations/0013_auto_20191113_0930.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 apps/tag/migrations/0013_auto_20191113_0930.py diff --git a/apps/tag/migrations/0013_auto_20191113_0930.py b/apps/tag/migrations/0013_auto_20191113_0930.py new file mode 100644 index 00000000..0cea4780 --- /dev/null +++ b/apps/tag/migrations/0013_auto_20191113_0930.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.7 on 2019-11-13 09:30 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('tag', '0012_merge_20191112_1552'), + ] + + operations = [ + migrations.AlterField( + model_name='tagcategory', + name='value_type', + field=models.CharField(choices=[('string', 'string'), ('list', 'list'), ('integer', 'integer'), ('float', 'float'), ('percentage', 'percentage')], default='list', max_length=255, verbose_name='value type'), + ), + ] From 00d7e410ba36f148adc686fc74ec3663bd3cae71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=20=D0=93=D0=BB=D0=B0?= =?UTF-8?q?=D0=B4=D0=BA=D0=B8=D1=85?= Date: Wed, 13 Nov 2019 12:37:54 +0300 Subject: [PATCH 10/11] Elastic on --- apps/search_indexes/__init__.py | 2 +- apps/search_indexes/signals.py | 154 ++++++++++++++++---------------- project/settings/base.py | 6 +- 3 files changed, 81 insertions(+), 81 deletions(-) diff --git a/apps/search_indexes/__init__.py b/apps/search_indexes/__init__.py index c45cbc38..6c812219 100644 --- a/apps/search_indexes/__init__.py +++ b/apps/search_indexes/__init__.py @@ -1 +1 @@ -# from search_indexes.signals import update_document +from search_indexes.signals import update_document diff --git a/apps/search_indexes/signals.py b/apps/search_indexes/signals.py index 6cf109fb..3da50fb8 100644 --- a/apps/search_indexes/signals.py +++ b/apps/search_indexes/signals.py @@ -1,77 +1,77 @@ -# """Search indexes app signals.""" -# from django.db.models.signals import post_save -# from django.dispatch import receiver -# from django_elasticsearch_dsl.registries import registry -# -# -# @receiver(post_save) -# def update_document(sender, **kwargs): -# from establishment.models import Establishment -# app_label = sender._meta.app_label -# model_name = sender._meta.model_name -# instance = kwargs['instance'] -# -# if app_label == 'location': -# if model_name == 'country': -# establishments = Establishment.objects.filter( -# address__city__country=instance) -# for establishment in establishments: -# registry.update(establishment) -# if model_name == 'city': -# establishments = Establishment.objects.filter( -# address__city=instance) -# for establishment in establishments: -# registry.update(establishment) -# if model_name == 'address': -# establishments = Establishment.objects.filter( -# address=instance) -# for establishment in establishments: -# registry.update(establishment) -# -# if app_label == 'establishment': -# # todo: remove after migration -# from establishment import models as establishment_models -# if model_name == 'establishmenttype': -# if isinstance(instance, establishment_models.EstablishmentType): -# establishments = Establishment.objects.filter( -# establishment_type=instance) -# for establishment in establishments: -# registry.update(establishment) -# if model_name == 'establishmentsubtype': -# if isinstance(instance, establishment_models.EstablishmentSubType): -# establishments = Establishment.objects.filter( -# establishment_subtypes=instance) -# for establishment in establishments: -# registry.update(establishment) -# -# if app_label == 'tag': -# if model_name == 'tag': -# establishments = Establishment.objects.filter(tags=instance) -# for establishment in establishments: -# registry.update(establishment) -# -# -# @receiver(post_save) -# def update_news(sender, **kwargs): -# from news.models import News -# app_label = sender._meta.app_label -# model_name = sender._meta.model_name -# instance = kwargs['instance'] -# -# if app_label == 'location': -# if model_name == 'country': -# qs = News.objects.filter(country=instance) -# for news in qs: -# registry.update(news) -# -# if app_label == 'news': -# if model_name == 'newstype': -# qs = News.objects.filter(news_type=instance) -# for news in qs: -# registry.update(news) -# -# if app_label == 'tag': -# if model_name == 'tag': -# qs = News.objects.filter(tags=instance) -# for news in qs: -# registry.update(news) +"""Search indexes app signals.""" +from django.db.models.signals import post_save +from django.dispatch import receiver +from django_elasticsearch_dsl.registries import registry + + +@receiver(post_save) +def update_document(sender, **kwargs): + from establishment.models import Establishment + app_label = sender._meta.app_label + model_name = sender._meta.model_name + instance = kwargs['instance'] + + if app_label == 'location': + if model_name == 'country': + establishments = Establishment.objects.filter( + address__city__country=instance) + for establishment in establishments: + registry.update(establishment) + if model_name == 'city': + establishments = Establishment.objects.filter( + address__city=instance) + for establishment in establishments: + registry.update(establishment) + if model_name == 'address': + establishments = Establishment.objects.filter( + address=instance) + for establishment in establishments: + registry.update(establishment) + + if app_label == 'establishment': + # todo: remove after migration + from establishment import models as establishment_models + if model_name == 'establishmenttype': + if isinstance(instance, establishment_models.EstablishmentType): + establishments = Establishment.objects.filter( + establishment_type=instance) + for establishment in establishments: + registry.update(establishment) + if model_name == 'establishmentsubtype': + if isinstance(instance, establishment_models.EstablishmentSubType): + establishments = Establishment.objects.filter( + establishment_subtypes=instance) + for establishment in establishments: + registry.update(establishment) + + if app_label == 'tag': + if model_name == 'tag': + establishments = Establishment.objects.filter(tags=instance) + for establishment in establishments: + registry.update(establishment) + + +@receiver(post_save) +def update_news(sender, **kwargs): + from news.models import News + app_label = sender._meta.app_label + model_name = sender._meta.model_name + instance = kwargs['instance'] + + if app_label == 'location': + if model_name == 'country': + qs = News.objects.filter(country=instance) + for news in qs: + registry.update(news) + + if app_label == 'news': + if model_name == 'newstype': + qs = News.objects.filter(news_type=instance) + for news in qs: + registry.update(news) + + if app_label == 'tag': + if model_name == 'tag': + qs = News.objects.filter(tags=instance) + for news in qs: + registry.update(news) diff --git a/project/settings/base.py b/project/settings/base.py index 50756ff2..5e3017c7 100644 --- a/project/settings/base.py +++ b/project/settings/base.py @@ -66,7 +66,7 @@ PROJECT_APPS = [ 'partner.apps.PartnerConfig', 'product.apps.ProductConfig', 'recipe.apps.RecipeConfig', - # 'search_indexes.apps.SearchIndexesConfig', + 'search_indexes.apps.SearchIndexesConfig', 'translation.apps.TranslationConfig', 'configuration.apps.ConfigurationConfig', 'timetable.apps.TimetableConfig', @@ -79,8 +79,8 @@ PROJECT_APPS = [ EXTERNAL_APPS = [ 'corsheaders', - # 'django_elasticsearch_dsl', - # 'django_elasticsearch_dsl_drf', + 'django_elasticsearch_dsl', + 'django_elasticsearch_dsl_drf', 'django_filters', 'drf_yasg', 'fcm_django', From 97cd3b7ae00c3aa818623018076984b93f2e9210 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 13 Nov 2019 12:40:55 +0300 Subject: [PATCH 11/11] newsletter_subscriber legacy model --- apps/notification/transfer_data.py | 11 +++++++---- apps/review/tests.py | 1 - apps/transfer/models.py | 17 +++++++++++++++-- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/apps/notification/transfer_data.py b/apps/notification/transfer_data.py index 3dd69f56..49ae6887 100644 --- a/apps/notification/transfer_data.py +++ b/apps/notification/transfer_data.py @@ -1,9 +1,8 @@ -from transfer.serializers.notification import SubscriberSerializer -from notification.models import Subscriber -from transfer.models import EmailAddresses -from django.db.models import Value, IntegerField, F from pprint import pprint +from transfer.models import EmailAddresses +from transfer.serializers.notification import SubscriberSerializer + def transfer_subscriber(): queryset = EmailAddresses.objects.filter(state="usable") @@ -16,6 +15,10 @@ def transfer_subscriber(): pprint(f"News serializer errors: {serialized_data.errors}") +def transfer_newsletter_subscriber(): + pass + + data_types = { "subscriber": [transfer_subscriber] } diff --git a/apps/review/tests.py b/apps/review/tests.py index 2dc6d86e..5f17b0f2 100644 --- a/apps/review/tests.py +++ b/apps/review/tests.py @@ -1,6 +1,5 @@ from http.cookies import SimpleCookie -from django.urls import reverse from rest_framework import status from rest_framework.test import APITestCase diff --git a/apps/transfer/models.py b/apps/transfer/models.py index 079e788a..b03536d3 100644 --- a/apps/transfer/models.py +++ b/apps/transfer/models.py @@ -1156,7 +1156,6 @@ class GridItems(MigrateMixin): class Assemblages(MigrateMixin): - using = 'legacy' percent = models.FloatField() @@ -1169,7 +1168,6 @@ class Assemblages(MigrateMixin): class Cepages(MigrateMixin): - using = 'legacy' name = models.CharField(max_length=255) @@ -1177,3 +1175,18 @@ class Cepages(MigrateMixin): class Meta: managed = False db_table = 'cepages' + + +class NewsletterSubscriber(MigrateMixin): + using = 'legacy' + + site = models.ForeignKey(Sites, models.DO_NOTHING, blank=True, null=True) + email_address = models.ForeignKey(EmailAddresses, models.DO_NOTHING, blank=True, null=True) + state = models.CharField(max_length=255, blank=True, null=True) + consent_at = models.DateTimeField() + created_at = models.DateTimeField() + updated_at = models.DateTimeField() + + class Meta: + managed = False + db_table = 'newsletter_subscriber'