gault-millau/apps/review/transfer_data.py
2019-11-14 15:33:46 +03:00

118 lines
4.2 KiB
Python

from pprint import pprint
from django.db.models import Q
from account.models import User
from account.transfer_data import STOP_LIST
from establishment.models import Establishment
from review.models import Inquiries as NewInquiries, Review
from transfer.models import Reviews, ReviewTexts, Inquiries, GridItems, InquiryPhotos
from transfer.serializers.grid import GridItemsSerializer
from transfer.serializers.inquiries import InquiriesSerializer
from transfer.serializers.inquiry_gallery import InquiryGallerySerializer
from transfer.serializers.reviews import LanguageSerializer, ReviewSerializer, ReviewTextSerializer
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():
establishments = Establishment.objects.filter(old_id__isnull=False).values_list('old_id', flat=True)
users = User.objects.filter(old_id__isnull=False).values_list('old_id', flat=True)
queryset = Reviews.objects.filter(
establishment_id__in=list(establishments),
reviewer_id__in=list(users),
).values('id', 'reviewer_id', 'aasm_state', 'created_at', 'establishment_id', 'mark', 'vintage')
serialized_data = ReviewSerializer(data=list(queryset.values()), many=True)
if serialized_data.is_valid():
serialized_data.save()
else:
pprint(f"ReviewSerializer serializer errors: {serialized_data.errors}")
def transfer_text_review():
reviews = Review.objects.filter(old_id__isnull=False).values_list('old_id', flat=True)
queryset = ReviewTexts.objects.filter(
review_id__in=list(reviews),
).exclude(
Q(text__isnull=True) | Q(text='')
).values('review_id', 'locale', 'text')
serialized_data = ReviewTextSerializer(data=list(queryset.values()), many=True)
if serialized_data.is_valid():
serialized_data.save()
else:
pprint(f"ReviewTextSerializer serializer errors: {serialized_data.errors}")
for review in Review.objects.filter(old_id__isnull=False):
text = review.text
if text and 'en-GB' not in text:
text.update({
'en-GB': next(iter(text.values()))
})
review.text = text
review.save()
def transfer_inquiries():
reviews = Review.objects.all().values_list('old_id', flat=True)
inquiries = Inquiries.objects.exclude(
Q(account__confirmed_at__isnull=True) |
Q(account__email__in=STOP_LIST)
).filter(review_id__in=list(reviews))
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}")
def transfer_grid():
inquiries = NewInquiries.objects.all().values_list('old_id', flat=True)
grids = GridItems.objects.filter(inquiry_id__in=list(inquiries))
serialized_data = GridItemsSerializer(data=list(grids.values()), many=True)
if serialized_data.is_valid():
serialized_data.save()
else:
pprint(f"GridItems serializer errors: {serialized_data.errors}")
def transfer_inquiry_photos():
inquiries = NewInquiries.objects.all().values_list('old_id', flat=True)
grids = InquiryPhotos.objects.filter(inquiry_id__in=list(inquiries), attachment_suffix_url__isnull=False)
serialized_data = InquiryGallerySerializer(data=list(grids.values()), many=True)
if serialized_data.is_valid():
serialized_data.save()
else:
pprint(f"InquiryGallery serializer errors: {serialized_data.errors}")
data_types = {
"overlook": [
# transfer_languages,
transfer_reviews,
transfer_text_review,
],
'inquiries': [
transfer_inquiries,
transfer_grid,
transfer_inquiry_photos,
]
}