From 79a65ab17933df5190ab27d9a3e6f0b338a0c712 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 8 Nov 2019 12:26:51 +0300 Subject: [PATCH] fix ads --- .../migrations/0005_auto_20191108_0923.py | 27 ++++++++ apps/advertisement/models.py | 9 +-- apps/advertisement/transfer_data.py | 6 +- .../migrations/0007_auto_20191108_0923.py | 66 +++++++++++++++++++ apps/review/models.py | 30 +++------ apps/review/transfer_data.py | 18 ++++- apps/transfer/management/commands/transfer.py | 1 + apps/transfer/models.py | 11 ++-- apps/transfer/serializers/advertisement.py | 41 ++++-------- apps/transfer/serializers/inquiries.py | 39 +++++++++++ 10 files changed, 183 insertions(+), 65 deletions(-) create mode 100644 apps/advertisement/migrations/0005_auto_20191108_0923.py create mode 100644 apps/review/migrations/0007_auto_20191108_0923.py create mode 100644 apps/transfer/serializers/inquiries.py diff --git a/apps/advertisement/migrations/0005_auto_20191108_0923.py b/apps/advertisement/migrations/0005_auto_20191108_0923.py new file mode 100644 index 00000000..e3e3f54b --- /dev/null +++ b/apps/advertisement/migrations/0005_auto_20191108_0923.py @@ -0,0 +1,27 @@ +# Generated by Django 2.2.4 on 2019-11-08 09:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('advertisement', '0004_auto_20191025_0903'), + ] + + operations = [ + migrations.RemoveField( + model_name='advertisement', + name='image', + ), + migrations.AddField( + model_name='advertisement', + name='image_url', + field=models.URLField(blank=True, default=None, null=True, verbose_name='Image URL path'), + ), + migrations.AddField( + model_name='advertisement', + name='old_id', + field=models.PositiveIntegerField(blank=True, default=None, null=True, verbose_name='old id'), + ), + ] diff --git a/apps/advertisement/models.py b/apps/advertisement/models.py index 62b41428..3822522d 100644 --- a/apps/advertisement/models.py +++ b/apps/advertisement/models.py @@ -5,16 +5,17 @@ from django.db import models from django.utils.translation import gettext_lazy as _ from translation.models import Language -from utils.models import ProjectBaseMixin, ImageMixin, PlatformMixin +from utils.models import ProjectBaseMixin, ImageMixin, PlatformMixin, URLImageMixin -class Advertisement(ImageMixin, ProjectBaseMixin, PlatformMixin): +class Advertisement(URLImageMixin, ProjectBaseMixin, PlatformMixin): """Advertisement model.""" + old_id = models.PositiveIntegerField(_('old id'), blank=True, null=True, default=None) uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True) url = models.URLField(verbose_name=_('Ad URL')) - width = models.PositiveIntegerField(verbose_name=_('Block width')) - height = models.PositiveIntegerField(verbose_name=_('Block height')) + width = models.PositiveIntegerField(verbose_name=_('Block width')) # 300 + height = models.PositiveIntegerField(verbose_name=_('Block height')) # 250 block_level = models.CharField(verbose_name=_('Block level'), max_length=10, blank=True, null=True) target_languages = models.ManyToManyField(Language) diff --git a/apps/advertisement/transfer_data.py b/apps/advertisement/transfer_data.py index 3af16286..64e715ce 100644 --- a/apps/advertisement/transfer_data.py +++ b/apps/advertisement/transfer_data.py @@ -1,11 +1,11 @@ from pprint import pprint -from django.db.models import Value, IntegerField, F + from transfer.models import Ads from transfer.serializers.advertisement import AdvertisementSerializer def transfer_advertisement(): - queryset = Ads.objects.filter(href__isnull=False) + queryset = Ads.objects.filter(href__isnull=False).values_list('id', 'href', 'attachment_suffix_url') serialized_data = AdvertisementSerializer(data=list(queryset.values()), many=True) @@ -17,4 +17,4 @@ def transfer_advertisement(): data_types = { "commercial": [transfer_advertisement] -} \ No newline at end of file +} diff --git a/apps/review/migrations/0007_auto_20191108_0923.py b/apps/review/migrations/0007_auto_20191108_0923.py new file mode 100644 index 00000000..2d3be086 --- /dev/null +++ b/apps/review/migrations/0007_auto_20191108_0923.py @@ -0,0 +1,66 @@ +# Generated by Django 2.2.4 on 2019-11-08 09:23 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('review', '0006_griditems_incuiries_incuiryphoto'), + ] + + operations = [ + migrations.CreateModel( + name='Inquiries', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='Date created')), + ('modified', models.DateTimeField(auto_now=True, verbose_name='Date updated')), + ('old_id', models.PositiveIntegerField(blank=True, default=None, null=True, verbose_name='old id')), + ('comment', models.TextField(blank=True, null=True, verbose_name='comment')), + ('final_comment', models.TextField(blank=True, null=True, verbose_name='final comment')), + ('mark', models.PositiveIntegerField(blank=True, default=None, null=True, verbose_name='mark')), + ('attachment_file', models.URLField(blank=True, default=None, max_length=255, null=True, verbose_name='attachment')), + ('bill_file', models.URLField(blank=True, default=None, max_length=255, null=True, verbose_name='bill')), + ('price', models.DecimalField(blank=True, decimal_places=2, max_digits=7, null=True, verbose_name='price')), + ('moment', models.PositiveSmallIntegerField(choices=[(0, 'none'), (1, 'diner'), (2, 'lanch')], default=0)), + ('decibels', models.CharField(blank=True, max_length=255, null=True)), + ('nomination', models.CharField(blank=True, max_length=255, null=True)), + ('nominee', models.CharField(blank=True, max_length=255, null=True)), + ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='incuiries', to=settings.AUTH_USER_MODEL, verbose_name='author')), + ('review', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='inquiries', to='review.Review', verbose_name='review')), + ], + options={ + 'verbose_name': 'Inquiry', + 'verbose_name_plural': 'Inquiries', + }, + ), + migrations.RemoveField( + model_name='incuiryphoto', + name='incuiry', + ), + migrations.AlterModelOptions( + name='griditems', + options={'verbose_name': 'inquiry grid', 'verbose_name_plural': 'inquiry grids'}, + ), + migrations.RemoveField( + model_name='griditems', + name='incuiry', + ), + migrations.DeleteModel( + name='Incuiries', + ), + migrations.DeleteModel( + name='IncuiryPhoto', + ), + migrations.AddField( + model_name='griditems', + name='inquiry', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='grids', to='review.Inquiries', verbose_name='inquiry'), + preserve_default=False, + ), + ] diff --git a/apps/review/models.py b/apps/review/models.py index 13ddeb9b..936ad58c 100644 --- a/apps/review/models.py +++ b/apps/review/models.py @@ -79,7 +79,7 @@ class Review(BaseAttributes, TranslatedFieldsMixin): verbose_name_plural = _('Reviews') -class Incuiries(ProjectBaseMixin): +class Inquiries(ProjectBaseMixin): NONE = 0 DINER = 1 LUNCH = 2 @@ -89,7 +89,7 @@ class Incuiries(ProjectBaseMixin): (LUNCH, _('lanch')), ) old_id = models.PositiveIntegerField(_('old id'), blank=True, null=True, default=None) - review = models.ForeignKey(Review, verbose_name=_('review'), related_name='incuiries', on_delete=models.CASCADE) + review = models.ForeignKey(Review, verbose_name=_('review'), related_name='inquiries', on_delete=models.CASCADE) comment = models.TextField(_('comment'), blank=True, null=True) final_comment = models.TextField(_('final comment'), blank=True, null=True) @@ -103,32 +103,20 @@ class Incuiries(ProjectBaseMixin): price = models.DecimalField(_('price'), max_digits=7, decimal_places=2, blank=True, null=True) moment = models.PositiveSmallIntegerField(choices=MOMENTS, default=NONE) - decibles = models.CharField(max_length=255, blank=True, null=True) + decibels = models.CharField(max_length=255, blank=True, null=True) nomination = models.CharField(max_length=255, blank=True, null=True) nominee = models.CharField(max_length=255, blank=True, null=True) class Meta: - verbose_name = _('Incuiry') - verbose_name_plural = _('Incuiries') + verbose_name = _('Inquiry') + verbose_name_plural = _('Inquiries') def __str__(self): return f'id: {self.id}, review: {self.review.id}, author: {self.author.id}' -class IncuiryPhoto(ProjectBaseMixin): - incuiry = models.ForeignKey(Incuiries, verbose_name=_('incuiry'), on_delete=models.CASCADE, related_name='photos') - attachment_file = models.URLField(verbose_name=_('attachment'), max_length=255) - - class Meta: - verbose_name = _('incuiry photo') - verbose_name_plural = _('incuiry photos') - - def __str__(self): - return f'incuiry: {self.incuiry.id}, file: {self.attachment_file}' - - class GridItems(ProjectBaseMixin): - incuiry = models.ForeignKey(Incuiries, verbose_name=_('incuiry'), on_delete=models.CASCADE, related_name='grids') + inquiry = models.ForeignKey(Inquiries, verbose_name=_('inquiry'), on_delete=models.CASCADE, related_name='grids') sub_name = models.CharField(_('sub name'), max_length=255, blank=True, null=True) name = models.CharField(_('name'), max_length=255, blank=True, null=True) value = models.FloatField(_('value'), blank=True, null=True) @@ -136,8 +124,8 @@ class GridItems(ProjectBaseMixin): dish_title = models.CharField(_('dish title'), max_length=255, blank=True, null=True) class Meta: - verbose_name = _('incuiry grid') - verbose_name_plural = _('incuiry grids') + verbose_name = _('inquiry grid') + verbose_name_plural = _('inquiry grids') def __str__(self): - return f'incuiry: {self.incuiry.id}, grid id: {self.id}' + return f'inquiry: {self.inquiry.id}, grid id: {self.id}' diff --git a/apps/review/transfer_data.py b/apps/review/transfer_data.py index b3a0e833..ea33c22e 100644 --- a/apps/review/transfer_data.py +++ b/apps/review/transfer_data.py @@ -1,4 +1,5 @@ -from transfer.models import Reviews, ReviewTexts +from transfer.models import Reviews, ReviewTexts, Inquiries +from transfer.serializers.inquiries import InquiriesSerializer from transfer.serializers.reviews import LanguageSerializer, ReviewSerializer, Establishment from pprint import pprint import json @@ -71,7 +72,7 @@ def transfer_reviews(): ] else: establishments_mark_list[query['establishment_id']] = int(query['mark']) - del(query['mark']) + del (query['mark']) queryset_result.append(query) serialized_data = ReviewSerializer(data=queryset_result, many=True) @@ -93,9 +94,20 @@ def transfer_reviews(): pprint(serialized_data.errors) +def transfer_inquiries(): + inquiries = Inquiries.objects.all() + + serialized_data = InquiriesSerializer(data=list(inquiries.values()), many=True) + if serialized_data.is_valid(): + serialized_data.save() + else: + pprint(f"Inquiries serializer errors: {serialized_data.errors}") + + data_types = { "overlook": [ transfer_languages, transfer_reviews - ] + ], + 'query': [transfer_inquiries] } diff --git a/apps/transfer/management/commands/transfer.py b/apps/transfer/management/commands/transfer.py index d2387d0d..62817b79 100644 --- a/apps/transfer/management/commands/transfer.py +++ b/apps/transfer/management/commands/transfer.py @@ -24,6 +24,7 @@ class Command(BaseCommand): 'location_establishment', 'whirligig', 'identities', + 'query', ] LONG_DATA_TYPES = [ diff --git a/apps/transfer/models.py b/apps/transfer/models.py index 7a412034..f087198e 100644 --- a/apps/transfer/models.py +++ b/apps/transfer/models.py @@ -835,6 +835,7 @@ class Ads(MigrateMixin): attachment_content_type = models.CharField(max_length=255, blank=True, null=True) attachment_file_size = models.IntegerField(blank=True, null=True) attachment_updated_at = models.DateTimeField(blank=True, null=True) + attachment_suffix_url = models.TextField(blank=True, null=True) geometries = models.CharField(max_length=1024, blank=True, null=True) created_at = models.DateTimeField() updated_at = models.DateTimeField() @@ -1003,7 +1004,7 @@ class Identities(MigrateMixin): db_table = 'identities' -class Incuiries(MigrateMixin): +class Inquiries(MigrateMixin): using = 'legacy' visited_at = models.DateField() @@ -1029,7 +1030,7 @@ class Incuiries(MigrateMixin): published = models.PositiveSmallIntegerField(blank=True, null=True) menu_id = models.IntegerField(blank=True, null=True) final_comment = models.TextField(blank=True, null=True) - decibles = models.CharField(max_length=255, blank=True, null=True) + decibels = models.CharField(max_length=255, blank=True, null=True) nomination = models.CharField(max_length=255, blank=True, null=True) nominee = models.CharField(max_length=255, blank=True, null=True) @@ -1038,10 +1039,10 @@ class Incuiries(MigrateMixin): db_table = 'inquiries' -class IncuiryPhotos(MigrateMixin): +class InquiryPhotos(MigrateMixin): using = 'legacy' - incuiry = models.ForeignKey(Incuiries, models.DO_NOTHING, blank=True, null=True) + inquiry = models.ForeignKey(Inquiries, models.DO_NOTHING, blank=True, null=True) created_at = models.DateTimeField() updated_at = models.DateTimeField() attachment_file_name = models.CharField(max_length=255, blank=True, null=True) @@ -1058,7 +1059,7 @@ class IncuiryPhotos(MigrateMixin): class GridItems(MigrateMixin): using = 'legacy' - incuiry = models.ForeignKey(Incuiries, models.DO_NOTHING, blank=True, null=True) + inquiry = models.ForeignKey(Inquiries, models.DO_NOTHING, blank=True, null=True) created_at = models.DateTimeField() updated_at = models.DateTimeField() sub_item_name = models.CharField(max_length=255, blank=True, null=True) diff --git a/apps/transfer/serializers/advertisement.py b/apps/transfer/serializers/advertisement.py index 2e3a488f..a25ee51e 100644 --- a/apps/transfer/serializers/advertisement.py +++ b/apps/transfer/serializers/advertisement.py @@ -1,39 +1,22 @@ from rest_framework import serializers + from advertisement.models import Advertisement -import yaml -class AdvertisementSerializer(serializers.ModelSerializer): +class AdvertisementSerializer(serializers.Serializer): + id = serializers.IntegerField() href = serializers.CharField() - geometries = serializers.CharField(max_length=1024) - - class Meta: - model = Advertisement - fields = ( - "href", - "geometries" - ) + attachment_suffix_url = serializers.CharField(allow_null=True) def validate(self, data): - data["url"] = data["href"] - data["width"] = self.get_width(data["geometries"]) - data["height"] = self.get_height(data["geometries"]) - data.pop("href") - data.pop("geometries") + data.update({ + 'old_id': data.pop('id'), + 'url': data.pop('href'), + 'image_url': data.pop('attachment_suffix_url'), + 'width': 300, + 'height': 250, + }) return data def create(self, validated_data): - return Advertisement.objects.create(**validated_data) - - def get_width(self, data): - data = self.parse_geometries(data) - return int(float(data["width"])) - - def get_height(self, data): - data = self.parse_geometries(data) - return int(float(data["height"])) - - def parse_geometries(self, geo_str): - clear_str = "!ruby/object:Paperclip::Geometry" - content_dict = yaml.safe_load(geo_str.replace(clear_str, '')) - return content_dict[':original'] \ No newline at end of file + return Advertisement.objects.create(**validated_data) \ No newline at end of file diff --git a/apps/transfer/serializers/inquiries.py b/apps/transfer/serializers/inquiries.py new file mode 100644 index 00000000..289f3ab8 --- /dev/null +++ b/apps/transfer/serializers/inquiries.py @@ -0,0 +1,39 @@ +from rest_framework import serializers + +from review.models import Inquiries + + +class InquiriesSerializer(serializers.Serializer): + id = serializers.IntegerField() + comment = serializers.CharField() + mark = serializers.DecimalField(max_digits=4, decimal_places=2) + locale = serializers.CharField() + account_id = serializers.IntegerField() + establishment_id = serializers.CharField() + + def validate(self, data): + data.update({ + 'old_id': data.pop('id'), + 'text': data.pop('comment'), + 'mark': data['mark'] * -1 if data['mark'] < 0 else data['mark'], + 'content_object': self.get_content_object(data), + 'user': self.get_account(data), + 'country': self.get_country(data), + }) + data.pop('establishment_id') + data.pop('account_id') + data.pop('locale') + return data + + def create(self, validated_data): + try: + return Inquiries.objects.create(**validated_data) + except Exception as e: + raise ValueError(f"Error creating Inquiries with {validated_data}: {e}") + + # @staticmethod + # def get_content_object(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