This commit is contained in:
alex 2019-11-08 12:26:51 +03:00
parent 117604f060
commit 79a65ab179
10 changed files with 183 additions and 65 deletions

View File

@ -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'),
),
]

View File

@ -5,16 +5,17 @@ from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from translation.models import Language 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.""" """Advertisement model."""
old_id = models.PositiveIntegerField(_('old id'), blank=True, null=True, default=None)
uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True) uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
url = models.URLField(verbose_name=_('Ad URL')) url = models.URLField(verbose_name=_('Ad URL'))
width = models.PositiveIntegerField(verbose_name=_('Block width')) width = models.PositiveIntegerField(verbose_name=_('Block width')) # 300
height = models.PositiveIntegerField(verbose_name=_('Block height')) height = models.PositiveIntegerField(verbose_name=_('Block height')) # 250
block_level = models.CharField(verbose_name=_('Block level'), max_length=10, blank=True, null=True) block_level = models.CharField(verbose_name=_('Block level'), max_length=10, blank=True, null=True)
target_languages = models.ManyToManyField(Language) target_languages = models.ManyToManyField(Language)

View File

@ -1,11 +1,11 @@
from pprint import pprint from pprint import pprint
from django.db.models import Value, IntegerField, F
from transfer.models import Ads from transfer.models import Ads
from transfer.serializers.advertisement import AdvertisementSerializer from transfer.serializers.advertisement import AdvertisementSerializer
def transfer_advertisement(): 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) serialized_data = AdvertisementSerializer(data=list(queryset.values()), many=True)

View File

@ -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,
),
]

View File

@ -79,7 +79,7 @@ class Review(BaseAttributes, TranslatedFieldsMixin):
verbose_name_plural = _('Reviews') verbose_name_plural = _('Reviews')
class Incuiries(ProjectBaseMixin): class Inquiries(ProjectBaseMixin):
NONE = 0 NONE = 0
DINER = 1 DINER = 1
LUNCH = 2 LUNCH = 2
@ -89,7 +89,7 @@ class Incuiries(ProjectBaseMixin):
(LUNCH, _('lanch')), (LUNCH, _('lanch')),
) )
old_id = models.PositiveIntegerField(_('old id'), blank=True, null=True, default=None) 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) comment = models.TextField(_('comment'), blank=True, null=True)
final_comment = models.TextField(_('final 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) price = models.DecimalField(_('price'), max_digits=7, decimal_places=2, blank=True, null=True)
moment = models.PositiveSmallIntegerField(choices=MOMENTS, default=NONE) 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) nomination = models.CharField(max_length=255, blank=True, null=True)
nominee = models.CharField(max_length=255, blank=True, null=True) nominee = models.CharField(max_length=255, blank=True, null=True)
class Meta: class Meta:
verbose_name = _('Incuiry') verbose_name = _('Inquiry')
verbose_name_plural = _('Incuiries') verbose_name_plural = _('Inquiries')
def __str__(self): def __str__(self):
return f'id: {self.id}, review: {self.review.id}, author: {self.author.id}' 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): 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) sub_name = models.CharField(_('sub name'), max_length=255, blank=True, null=True)
name = models.CharField(_('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) 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) dish_title = models.CharField(_('dish title'), max_length=255, blank=True, null=True)
class Meta: class Meta:
verbose_name = _('incuiry grid') verbose_name = _('inquiry grid')
verbose_name_plural = _('incuiry grids') verbose_name_plural = _('inquiry grids')
def __str__(self): def __str__(self):
return f'incuiry: {self.incuiry.id}, grid id: {self.id}' return f'inquiry: {self.inquiry.id}, grid id: {self.id}'

View File

@ -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 transfer.serializers.reviews import LanguageSerializer, ReviewSerializer, Establishment
from pprint import pprint from pprint import pprint
import json import json
@ -71,7 +72,7 @@ def transfer_reviews():
] ]
else: else:
establishments_mark_list[query['establishment_id']] = int(query['mark']) establishments_mark_list[query['establishment_id']] = int(query['mark'])
del(query['mark']) del (query['mark'])
queryset_result.append(query) queryset_result.append(query)
serialized_data = ReviewSerializer(data=queryset_result, many=True) serialized_data = ReviewSerializer(data=queryset_result, many=True)
@ -93,9 +94,20 @@ def transfer_reviews():
pprint(serialized_data.errors) 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 = { data_types = {
"overlook": [ "overlook": [
transfer_languages, transfer_languages,
transfer_reviews transfer_reviews
] ],
'query': [transfer_inquiries]
} }

View File

@ -24,6 +24,7 @@ class Command(BaseCommand):
'location_establishment', 'location_establishment',
'whirligig', 'whirligig',
'identities', 'identities',
'query',
] ]
LONG_DATA_TYPES = [ LONG_DATA_TYPES = [

View File

@ -835,6 +835,7 @@ class Ads(MigrateMixin):
attachment_content_type = models.CharField(max_length=255, blank=True, null=True) attachment_content_type = models.CharField(max_length=255, blank=True, null=True)
attachment_file_size = models.IntegerField(blank=True, null=True) attachment_file_size = models.IntegerField(blank=True, null=True)
attachment_updated_at = models.DateTimeField(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) geometries = models.CharField(max_length=1024, blank=True, null=True)
created_at = models.DateTimeField() created_at = models.DateTimeField()
updated_at = models.DateTimeField() updated_at = models.DateTimeField()
@ -1003,7 +1004,7 @@ class Identities(MigrateMixin):
db_table = 'identities' db_table = 'identities'
class Incuiries(MigrateMixin): class Inquiries(MigrateMixin):
using = 'legacy' using = 'legacy'
visited_at = models.DateField() visited_at = models.DateField()
@ -1029,7 +1030,7 @@ class Incuiries(MigrateMixin):
published = models.PositiveSmallIntegerField(blank=True, null=True) published = models.PositiveSmallIntegerField(blank=True, null=True)
menu_id = models.IntegerField(blank=True, null=True) menu_id = models.IntegerField(blank=True, null=True)
final_comment = models.TextField(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) nomination = models.CharField(max_length=255, blank=True, null=True)
nominee = 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' db_table = 'inquiries'
class IncuiryPhotos(MigrateMixin): class InquiryPhotos(MigrateMixin):
using = 'legacy' 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() created_at = models.DateTimeField()
updated_at = models.DateTimeField() updated_at = models.DateTimeField()
attachment_file_name = models.CharField(max_length=255, blank=True, null=True) attachment_file_name = models.CharField(max_length=255, blank=True, null=True)
@ -1058,7 +1059,7 @@ class IncuiryPhotos(MigrateMixin):
class GridItems(MigrateMixin): class GridItems(MigrateMixin):
using = 'legacy' 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() created_at = models.DateTimeField()
updated_at = models.DateTimeField() updated_at = models.DateTimeField()
sub_item_name = models.CharField(max_length=255, blank=True, null=True) sub_item_name = models.CharField(max_length=255, blank=True, null=True)

View File

@ -1,39 +1,22 @@
from rest_framework import serializers from rest_framework import serializers
from advertisement.models import Advertisement from advertisement.models import Advertisement
import yaml
class AdvertisementSerializer(serializers.ModelSerializer): class AdvertisementSerializer(serializers.Serializer):
id = serializers.IntegerField()
href = serializers.CharField() href = serializers.CharField()
geometries = serializers.CharField(max_length=1024) attachment_suffix_url = serializers.CharField(allow_null=True)
class Meta:
model = Advertisement
fields = (
"href",
"geometries"
)
def validate(self, data): def validate(self, data):
data["url"] = data["href"] data.update({
data["width"] = self.get_width(data["geometries"]) 'old_id': data.pop('id'),
data["height"] = self.get_height(data["geometries"]) 'url': data.pop('href'),
data.pop("href") 'image_url': data.pop('attachment_suffix_url'),
data.pop("geometries") 'width': 300,
'height': 250,
})
return data return data
def create(self, validated_data): def create(self, validated_data):
return Advertisement.objects.create(**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']

View File

@ -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