Add reviews transfer
Add language transfer Fix comment transfer
This commit is contained in:
parent
c564f4fd67
commit
86e0699c8c
|
|
@ -1,5 +1,5 @@
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
from transfer.models import Comments, Accounts, Establishments
|
from transfer.models import Comments
|
||||||
from transfer.serializers.comments import CommentSerializer
|
from transfer.serializers.comments import CommentSerializer
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -16,6 +16,6 @@ def transfer_comments():
|
||||||
|
|
||||||
data_types = {
|
data_types = {
|
||||||
"tmp": [
|
"tmp": [
|
||||||
transfer_comments
|
# transfer_comments
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
75
apps/review/transfer_data.py
Normal file
75
apps/review/transfer_data.py
Normal file
|
|
@ -0,0 +1,75 @@
|
||||||
|
from transfer.models import Reviews, ReviewTexts
|
||||||
|
from transfer.serializers.reviews import LanguageSerializer, ReviewSerializer, Establishment
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
|
||||||
|
def transfer_languages():
|
||||||
|
queryset = ReviewTexts.objects.raw("""SELECT id, locale
|
||||||
|
FROM review_texts
|
||||||
|
WHERE CHAR_LENGTH(locale) = 5
|
||||||
|
AND review_texts.locale IS NOT NULL GROUP BY locale""")
|
||||||
|
|
||||||
|
queryset = [vars(query) for query in queryset]
|
||||||
|
|
||||||
|
serialized_data = LanguageSerializer(data=queryset, many=True)
|
||||||
|
if serialized_data.is_valid():
|
||||||
|
serialized_data.save()
|
||||||
|
else:
|
||||||
|
pprint(f"Language serializer errors: {serialized_data.errors}")
|
||||||
|
|
||||||
|
|
||||||
|
def transfer_reviews():
|
||||||
|
queryset = Reviews.objects.raw("""SELECT reviews.id, reviews.vintage, reviews.establishment_id,
|
||||||
|
reviews.reviewer_id, review_texts.text AS text, reviews.mark,
|
||||||
|
review_texts.created_at AS published, review_texts.locale AS locale
|
||||||
|
FROM reviews
|
||||||
|
LEFT OUTER JOIN review_texts
|
||||||
|
ON (reviews.id = review_texts.review_id)
|
||||||
|
WHERE reviews.reviewer_id > 0
|
||||||
|
AND reviews.reviewer_id IS NOT NULL
|
||||||
|
AND review_texts.text IS NOT NULL
|
||||||
|
AND reviews.reviewer_id IN (
|
||||||
|
SELECT accounts.id
|
||||||
|
FROM accounts
|
||||||
|
WHERE accounts.confirmed_at IS NOT NULL
|
||||||
|
AND NOT accounts.email IN (
|
||||||
|
"cyril@tomatic.net",
|
||||||
|
"cyril2@tomatic.net",
|
||||||
|
"cyril2@tomatic.net",
|
||||||
|
"d.sadykova@id-east.ru",
|
||||||
|
"d.sadykova@octopod.ru",
|
||||||
|
"n.yurchenko@id-east.ru"
|
||||||
|
)
|
||||||
|
) ORDER BY review_texts.created_at DESC
|
||||||
|
""")
|
||||||
|
|
||||||
|
queryset_result = []
|
||||||
|
establishments_mark_list = {}
|
||||||
|
|
||||||
|
for query in queryset:
|
||||||
|
query = vars(query)
|
||||||
|
if query['establishment_id'] not in establishments_mark_list.keys():
|
||||||
|
establishments_mark_list[query['establishment_id']] = query['mark']
|
||||||
|
del(query['mark'])
|
||||||
|
queryset_result.append(query)
|
||||||
|
|
||||||
|
serialized_data = ReviewSerializer(data=queryset_result, many=True)
|
||||||
|
|
||||||
|
if serialized_data.is_valid():
|
||||||
|
serialized_data.save()
|
||||||
|
for establishment_id, mark in establishments_mark_list.items():
|
||||||
|
establishment = Establishment.objects.get(old_id=establishment_id)
|
||||||
|
establishment.public_mark = mark
|
||||||
|
establishment.save()
|
||||||
|
else:
|
||||||
|
pprint(serialized_data.errors)
|
||||||
|
|
||||||
|
|
||||||
|
data_types = {
|
||||||
|
"mention": [
|
||||||
|
transfer_languages
|
||||||
|
],
|
||||||
|
"tmp": [
|
||||||
|
transfer_reviews
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -18,6 +18,7 @@ class Command(BaseCommand):
|
||||||
'establishment',
|
'establishment',
|
||||||
'gallery',
|
'gallery',
|
||||||
'commercial',
|
'commercial',
|
||||||
|
'mention',
|
||||||
'tmp'
|
'tmp'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
||||||
191
apps/transfer/serializers/reviews.py
Normal file
191
apps/transfer/serializers/reviews.py
Normal file
|
|
@ -0,0 +1,191 @@
|
||||||
|
from rest_framework import serializers
|
||||||
|
from review.models import Review
|
||||||
|
from account.models import User
|
||||||
|
from translation.models import Language
|
||||||
|
from establishment.models import Establishment
|
||||||
|
|
||||||
|
|
||||||
|
class ReviewSerializer(serializers.ModelSerializer):
|
||||||
|
id = serializers.IntegerField()
|
||||||
|
reviewer_id = serializers.IntegerField()
|
||||||
|
vintage = serializers.IntegerField()
|
||||||
|
published = serializers.DateTimeField()
|
||||||
|
establishment_id = serializers.IntegerField()
|
||||||
|
text = serializers.CharField()
|
||||||
|
locale = serializers.CharField()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Review
|
||||||
|
fields = (
|
||||||
|
"id", "reviewer_id", "published", "vintage", "establishment_id", "text", "locale"
|
||||||
|
)
|
||||||
|
|
||||||
|
def validate(self, data):
|
||||||
|
data = self.set_old_id(data)
|
||||||
|
data = self.set_reviewer(data)
|
||||||
|
data = self.set_establishment(data)
|
||||||
|
data = self.set_language(data)
|
||||||
|
return data
|
||||||
|
|
||||||
|
def set_old_id(self, data):
|
||||||
|
data['old_id'] = data.pop("id")
|
||||||
|
return data
|
||||||
|
|
||||||
|
def set_reviewer(self, data):
|
||||||
|
try:
|
||||||
|
data['reviewer'] = User.objects.get(old_id=data['reviewer_id'])
|
||||||
|
except User.DoesNotExist as e:
|
||||||
|
raise ValueError(f"Cannot find reviewer with {data}: {e}")
|
||||||
|
del(data['reviewer_id'])
|
||||||
|
return data
|
||||||
|
|
||||||
|
def set_establishment(self, data):
|
||||||
|
try:
|
||||||
|
data['establishment'] = Establishment.objects.get(old_id=data.pop('old_id'))
|
||||||
|
except Establishment.DoesNotExist as e:
|
||||||
|
raise ValueError(f"Cannot find establishment with {data}: {e}")
|
||||||
|
return data
|
||||||
|
|
||||||
|
def set_language(self, data):
|
||||||
|
try:
|
||||||
|
data['language'] = Language.objects.get(locale=data['locale'])
|
||||||
|
except Language.DoesNotExist as e:
|
||||||
|
raise ValueError(f"Cannot find language with {data}: {e}")
|
||||||
|
|
||||||
|
del(data['locale'])
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
class LanguageSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
|
LANGUAGES = {
|
||||||
|
"be-BE": "Belarusian - Belarusia",
|
||||||
|
"el-GR": "Greek - Greek",
|
||||||
|
"he-IL": "Israel - Hebrew",
|
||||||
|
"hr-HR": "Croatia - Croatian",
|
||||||
|
"hu-HU": "Hangarian - Hungary",
|
||||||
|
"ja-JP": "Japanese - Japan",
|
||||||
|
"ka-GE": "Georgian - Georgia",
|
||||||
|
"pl-PL": "Polish - Poland",
|
||||||
|
"ro-RO": "Romainian - Romania",
|
||||||
|
"ru-RU": "Russian - Russia",
|
||||||
|
"sl-SI": "Slovenian - Slovenia",
|
||||||
|
"ar-DZ": "Arabic - Algeria",
|
||||||
|
"ar-BH": "Arabic - Bahrain",
|
||||||
|
"ar-EG": "Arabic - Egypt",
|
||||||
|
"ar-IQ": "Arabic - Iraq",
|
||||||
|
"ar-JO": "Arabic - Jordan",
|
||||||
|
"ar-KW": "Arabic - Kuwait",
|
||||||
|
"ar-LB": "Arabic - Lebanon",
|
||||||
|
"ar-LY": "Arabic - Libya",
|
||||||
|
"ar-MA": "Arabic - Morocco",
|
||||||
|
"ar-OM": "Arabic - Oman",
|
||||||
|
"ar-QA": "Arabic - Qatar",
|
||||||
|
"ar-SA": "Arabic - Saudi Arabia",
|
||||||
|
"ar-SY": "Arabic - Syria",
|
||||||
|
"ar-TN": "Arabic - Tunisia",
|
||||||
|
"ar-AE": "Arabic - United Arab Emirates",
|
||||||
|
"ar-YE": "Arabic - Yemen",
|
||||||
|
"az-AZ": "Azeri - Cyrillic",
|
||||||
|
"zh-CN": "Chinese - China",
|
||||||
|
"zh-HK": "Chinese - Hong Kong SAR",
|
||||||
|
"zh-MO": "Chinese - Macau SAR",
|
||||||
|
"zh-SG": "Chinese - Singapore",
|
||||||
|
"zh-TW": "Chinese - Taiwan",
|
||||||
|
"nl-BE": "Dutch - Belgium",
|
||||||
|
"nl-NL": "Dutch - Netherlands",
|
||||||
|
"en-AU": "English - Australia",
|
||||||
|
"en-BZ": "English - Belize",
|
||||||
|
"en-CA": "English - Canada",
|
||||||
|
"en-CB": "English - Caribbean",
|
||||||
|
"en-GB": "English - Great Britain",
|
||||||
|
"en-IN": "English - India",
|
||||||
|
"en-IE": "English - Ireland",
|
||||||
|
"en-JM": "English - Jamaica",
|
||||||
|
"en-NZ": "English - New Zealand",
|
||||||
|
"en-PH": "English - Phillippines",
|
||||||
|
"en-ZA": "English - Southern Africa",
|
||||||
|
"en-TT": "English - Trinidad",
|
||||||
|
"en-US": "English - United States",
|
||||||
|
"fr-BE": "French - Belgium",
|
||||||
|
"fr-CA": "French - Canada",
|
||||||
|
"fr-FR": "French - France",
|
||||||
|
"fr-LU": "French - Luxembourg",
|
||||||
|
"fr-CH": "French - Switzerland",
|
||||||
|
"fr-MA": "French - Morocco",
|
||||||
|
"gd-IE": "Gaelic - Ireland",
|
||||||
|
"de-AT": "German - Austria",
|
||||||
|
"de-DE": "German - Germany",
|
||||||
|
"de-LI": "German - Liechtenstein",
|
||||||
|
"de-LU": "German - Luxembourg",
|
||||||
|
"de-CH": "German - Switzerland",
|
||||||
|
"it-IT": "Italian - Italy",
|
||||||
|
"it-CH": "Italian - Switzerland",
|
||||||
|
"ms-BN": "Malay - Brunei",
|
||||||
|
"ms-MY": "Malay - Malaysia",
|
||||||
|
"no-NO": "Norwegian - Bokml",
|
||||||
|
"pt-BR": "Portuguese - Brazil",
|
||||||
|
"pt-PT": "Portuguese - Portugal",
|
||||||
|
"ro-MO": "Romanian - Moldova",
|
||||||
|
"ru-MO": "Russian - Moldova",
|
||||||
|
"sr-SP": "Serbian - Cyrillic",
|
||||||
|
"es-AR": "Spanish - Argentina",
|
||||||
|
"es-BO": "Spanish - Bolivia",
|
||||||
|
"es-CL": "Spanish - Chile",
|
||||||
|
"es-CO": "Spanish - Colombia",
|
||||||
|
"es-CR": "Spanish - Costa Rica",
|
||||||
|
"es-DO": "Spanish - Dominican Republic",
|
||||||
|
"es-EC": "Spanish - Ecuador",
|
||||||
|
"es-SV": "Spanish - El Salvador",
|
||||||
|
"es-GT": "Spanish - Guatemala",
|
||||||
|
"es-HN": "Spanish - Honduras",
|
||||||
|
"es-MX": "Spanish - Mexico",
|
||||||
|
"es-NI": "Spanish - Nicaragua",
|
||||||
|
"es-PA": "Spanish - Panama",
|
||||||
|
"es-PY": "Spanish - Paraguay",
|
||||||
|
"es-PE": "Spanish - Peru",
|
||||||
|
"es-PR": "Spanish - Puerto Rico",
|
||||||
|
"es-ES": "Spanish - Spain (Traditional)",
|
||||||
|
"es-UY": "Spanish - Uruguay",
|
||||||
|
"es-VE": "Spanish - Venezuela",
|
||||||
|
"sv-FI": "Swedish - Finland",
|
||||||
|
"sv-SE": "Swedish - Sweden",
|
||||||
|
"uz-UZ": "Uzbek - Cyrillic",
|
||||||
|
}
|
||||||
|
|
||||||
|
id = serializers.CharField()
|
||||||
|
locale = serializers.CharField()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Language
|
||||||
|
fields = ("locale", "id")
|
||||||
|
|
||||||
|
def validate(self, data):
|
||||||
|
data = self.set_old_id(data)
|
||||||
|
data = self.set_locale(data)
|
||||||
|
return data
|
||||||
|
|
||||||
|
def create(self, validated_data):
|
||||||
|
try:
|
||||||
|
locale = Language.objects.filter(locale=validated_data['locale']).first()
|
||||||
|
if locale is None:
|
||||||
|
raise Language.DoesNotExist
|
||||||
|
locale.old_id = validated_data['old_id']
|
||||||
|
locale.save()
|
||||||
|
except Language.DoesNotExist:
|
||||||
|
locale = Language.objects.create(**validated_data)
|
||||||
|
|
||||||
|
return locale
|
||||||
|
|
||||||
|
def set_locale(self, data):
|
||||||
|
data['locale'] = data['locale'].replace("_", "-")
|
||||||
|
try:
|
||||||
|
data['title'] = self.LANGUAGES[data['locale']]
|
||||||
|
except Exception as e:
|
||||||
|
raise ValueError(f"{data}: {e}")
|
||||||
|
return data
|
||||||
|
|
||||||
|
def set_old_id(self, data):
|
||||||
|
data['old_id'] = data.pop("id")
|
||||||
|
return data
|
||||||
18
apps/translation/migrations/0006_language_old_id.py
Normal file
18
apps/translation/migrations/0006_language_old_id.py
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 2.2.4 on 2019-10-30 05:54
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('translation', '0005_auto_20191021_1201'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='language',
|
||||||
|
name='old_id',
|
||||||
|
field=models.IntegerField(blank=True, default=None, null=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -25,6 +25,8 @@ class Language(models.Model):
|
||||||
locale = models.CharField(max_length=10,
|
locale = models.CharField(max_length=10,
|
||||||
verbose_name=_('Locale identifier'))
|
verbose_name=_('Locale identifier'))
|
||||||
|
|
||||||
|
old_id = models.IntegerField(null=True, blank=True, default=None)
|
||||||
|
|
||||||
objects = LanguageQuerySet.as_manager()
|
objects = LanguageQuerySet.as_manager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user