gault-millau/apps/review/transfer_data.py
2019-11-11 09:43:27 +03:00

129 lines
5.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django.db.models import Q
from account.transfer_data import STOP_LIST
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
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, reviews.published_at,
review_texts.created_at AS published, review_texts.locale AS locale,
reviews.aasm_state
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 review_texts.locale IS NOT NULL
AND reviews.mark 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"
))
AND reviews.establishment_id IN (
SELECT establishments.id
FROM establishments
INNER JOIN locations
ON (establishments.location_id = locations.id)
INNER JOIN cities
ON (locations.city_id = cities.id)
WHERE UPPER(cities.name) LIKE UPPER("%%paris%%")
AND NOT establishments.type = "Wineyard"
AND establishments.type IS NOT NULL AND locations.timezone IS NOT NULL
)
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():
if "aasm_state" in query and query['aasm_state'] is not None and query['aasm_state'] == "published":
establishments_mark_list[query['establishment_id']] = [
int(query['mark']),
json.dumps({query['locale']: query['text']})
]
else:
establishments_mark_list[query['establishment_id']] = int(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():
try:
establishment = Establishment.objects.get(old_id=establishment_id)
except Establishment.DoesNotExist:
continue
if isinstance(mark, list):
mark, review_text = mark
establishment.public_mark = mark
establishment.save()
else:
pprint(serialized_data.errors)
def transfer_inquiries():
# отфильтровать по review, account, establishment
# TODO: нужно ли переносить данные у которых нет привязки к аккаунту? .filter(account__isnull=False)
inquiries = Inquiries.objects.exclude(
Q(review__reviewer_id__gt=0) |
Q(review__reviewer_id__isnull=True) |
Q(review__mark__isnull=True) |
Q(review__reviewtexts__text__isnull=True) |
Q(review__reviewtexts__locale__isnull=True) |
Q(review__establishment__type='Wineyard') |
Q(review__establishment__location__timezone__isnull=True) |
Q(account__confirmed_at__isnull=True) |
Q(account__email__in=STOP_LIST)
)
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
],
'inquiries': [transfer_inquiries]
}