From 418ef2769485139a561b8b2c9298a634db577605 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 15 Nov 2019 10:21:28 +0300 Subject: [PATCH 1/5] transfer newsletter_subscriber --- apps/notification/transfer_data.py | 32 ++++++++++--- apps/transfer/management/commands/transfer.py | 1 + apps/transfer/serializers/notification.py | 45 +++++++++++++++++++ 3 files changed, 72 insertions(+), 6 deletions(-) diff --git a/apps/notification/transfer_data.py b/apps/notification/transfer_data.py index 49ae6887..dcc5b395 100644 --- a/apps/notification/transfer_data.py +++ b/apps/notification/transfer_data.py @@ -1,24 +1,44 @@ from pprint import pprint -from transfer.models import EmailAddresses -from transfer.serializers.notification import SubscriberSerializer +from account.models import User +from transfer.models import EmailAddresses, NewsletterSubscriber +from transfer.serializers.notification import SubscriberSerializer, NewsletterSubscriberSerializer def transfer_subscriber(): - queryset = EmailAddresses.objects.filter(state="usable") + queryset = EmailAddresses.objects.filter(state='usable') serialized_data = SubscriberSerializer(data=list(queryset.values()), many=True) if serialized_data.is_valid(): serialized_data.save() else: - pprint(f"News serializer errors: {serialized_data.errors}") + pprint(f'News serializer errors: {serialized_data.errors}') def transfer_newsletter_subscriber(): - pass + users = User.objects.filter(old_id__isnull=False).values_list('old_id', flat=True) + queryset = NewsletterSubscriber.objects.filter( + email_address__account_id__in=list(users) + ).values( + 'id', + 'email_address__email', + 'email_address__account_id', + 'email_address__ip', + 'email_address__country_code', + 'email_address__locale', + 'state', + 'created_at', + ) + + serialized_data = NewsletterSubscriberSerializer(data=list(queryset.values()), many=True) + if serialized_data.is_valid(): + serialized_data.save() + else: + pprint(f'NewsletterSubscriber serializer errors: {serialized_data.errors}') data_types = { - "subscriber": [transfer_subscriber] + 'subscriber': [transfer_subscriber], + 'newsletter_subscriber': [transfer_newsletter_subscriber], } diff --git a/apps/transfer/management/commands/transfer.py b/apps/transfer/management/commands/transfer.py index 28e40c50..f30a8467 100644 --- a/apps/transfer/management/commands/transfer.py +++ b/apps/transfer/management/commands/transfer.py @@ -38,6 +38,7 @@ class Command(BaseCommand): 'assemblage', 'rating_count', 'product_review', + 'newsletter_subscriber', # подписчики на рассылку - переносить после переноса пользователей №1 ] def handle(self, *args, **options): diff --git a/apps/transfer/serializers/notification.py b/apps/transfer/serializers/notification.py index c179dd2a..bd568239 100644 --- a/apps/transfer/serializers/notification.py +++ b/apps/transfer/serializers/notification.py @@ -33,3 +33,48 @@ class SubscriberSerializer(serializers.ModelSerializer): def get_country_code(self, obj): return obj["country_code"] + + +class NewsletterSubscriberSerializer(serializers.Serializer): + pass + # vintage = serializers.IntegerField() + # mark = serializers.FloatField(allow_null=True) + # establishment_id = serializers.IntegerField() + # created_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S') + # aasm_state = serializers.CharField(allow_null=True) + # reviewer_id = serializers.IntegerField() + # id = serializers.IntegerField() + # + # def validate(self, data): + # data.update({ + # 'reviewer': self.get_reviewer(data), + # 'status': Review.READY if data['aasm_state'] == 'published' else Review.TO_INVESTIGATE, + # 'published_at': data.pop('created_at'), + # 'old_id': data.pop('id'), + # 'content_object': self.get_establishment(data), + # }) + # data.pop('reviewer_id') + # data.pop('establishment_id') + # data.pop('aasm_state') + # return data + # + # def create(self, validated_data): + # obj, _ = Review.objects.update_or_create( + # old_id=validated_data['old_id'], + # defaults=validated_data, + # ) + # return obj + # + # @staticmethod + # def get_reviewer(data): + # user = User.objects.filter(old_id=data['reviewer_id']).first() + # if not user: + # raise ValueError(f"User account not found with old_id {data['reviewer_id']}") + # return user + # + # @staticmethod + # def get_establishment(data): + # establishment = Establishment.objects.filter(old_id=data['establishment_id']).first() + # if not establishment: + # raise ValueError(f"Establishment not found with old_id {data['establishment_id']}: ") + # return establishment From 8951de7399f9662c630bf8afd5365ddeb17b95eb Mon Sep 17 00:00:00 2001 From: evgeniy-st Date: Fri, 15 Nov 2019 10:23:16 +0300 Subject: [PATCH 2/5] updated requirements, updated ES task --- apps/establishment/tasks.py | 2 +- requirements/base.txt | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/apps/establishment/tasks.py b/apps/establishment/tasks.py index fdc10933..80d9cca8 100644 --- a/apps/establishment/tasks.py +++ b/apps/establishment/tasks.py @@ -27,5 +27,5 @@ def recalculate_price_levels_by_country(country_id): @periodic_task(run_every=crontab(minute=59)) def rebuild_establishment_indices(): - management.call_command(search_index.Command(), action='rebuild', models=[models.Establishment.__name__], + management.call_command(search_index.Command(), action='populate', models=[models.Establishment.__name__], force=True) diff --git a/requirements/base.txt b/requirements/base.txt index d7050a29..b4f25189 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -50,7 +50,5 @@ PyYAML==5.1.2 # temp solution redis==3.2.0 -amqp>=2.4.0 - -kombu==4.5.0 -celery==4.3.0rc2 +kombu==4.3.0 +celery==4.2.2 From b8df1643698809cc626d140e22aee081d93403ab Mon Sep 17 00:00:00 2001 From: evgeniy-st Date: Fri, 15 Nov 2019 10:33:33 +0300 Subject: [PATCH 3/5] update celery to 4.3.0 --- requirements/base.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements/base.txt b/requirements/base.txt index b4f25189..4489d755 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -50,5 +50,5 @@ PyYAML==5.1.2 # temp solution redis==3.2.0 -kombu==4.3.0 -celery==4.2.2 +kombu==4.6.6 +celery==4.3.0 From 1348a1def6ed767bc70eebb8fb1728788f6a2832 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 15 Nov 2019 10:36:23 +0300 Subject: [PATCH 4/5] notification serializer start --- apps/notification/transfer_data.py | 7 +------ apps/transfer/serializers/notification.py | 17 ++++++++--------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/apps/notification/transfer_data.py b/apps/notification/transfer_data.py index dcc5b395..cc5542b4 100644 --- a/apps/notification/transfer_data.py +++ b/apps/notification/transfer_data.py @@ -1,6 +1,5 @@ from pprint import pprint -from account.models import User from transfer.models import EmailAddresses, NewsletterSubscriber from transfer.serializers.notification import SubscriberSerializer, NewsletterSubscriberSerializer @@ -17,17 +16,13 @@ def transfer_subscriber(): def transfer_newsletter_subscriber(): - users = User.objects.filter(old_id__isnull=False).values_list('old_id', flat=True) - queryset = NewsletterSubscriber.objects.filter( - email_address__account_id__in=list(users) - ).values( + queryset = NewsletterSubscriber.objects.all().values( 'id', 'email_address__email', 'email_address__account_id', 'email_address__ip', 'email_address__country_code', 'email_address__locale', - 'state', 'created_at', ) diff --git a/apps/transfer/serializers/notification.py b/apps/transfer/serializers/notification.py index bd568239..dc685a0c 100644 --- a/apps/transfer/serializers/notification.py +++ b/apps/transfer/serializers/notification.py @@ -36,15 +36,14 @@ class SubscriberSerializer(serializers.ModelSerializer): class NewsletterSubscriberSerializer(serializers.Serializer): - pass - # vintage = serializers.IntegerField() - # mark = serializers.FloatField(allow_null=True) - # establishment_id = serializers.IntegerField() - # created_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S') - # aasm_state = serializers.CharField(allow_null=True) - # reviewer_id = serializers.IntegerField() - # id = serializers.IntegerField() - # + id = serializers.IntegerField() + email_address__email = serializers.CharField() + email_address__account_id = serializers.IntegerField(allow_null=True) + email_address__ip = serializers.CharField(allow_null=True) + email_address__country_code = serializers.CharField(allow_null=True) + email_address__locale = serializers.CharField(allow_null=True) + created_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S') + # def validate(self, data): # data.update({ # 'reviewer': self.get_reviewer(data), From 0dbb2c64cd0949748aba3c47dfc905e2a4f3ae65 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 15 Nov 2019 10:46:21 +0300 Subject: [PATCH 5/5] fix new in_fav detail --- apps/news/views.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/news/views.py b/apps/news/views.py index 9c0a17e5..fbc0e455 100644 --- a/apps/news/views.py +++ b/apps/news/views.py @@ -44,10 +44,10 @@ class NewsDetailView(NewsMixinView, generics.RetrieveAPIView): lookup_field = 'slug' serializer_class = serializers.NewsDetailWebSerializer - queryset = models.News.objects.all() - def get_queryset(self): - return self.queryset + """Override get_queryset method.""" + qs = models.News.objects.all().annotate_in_favorites(self.request.user) + return qs class NewsTypeListView(generics.ListAPIView):