from transfer.models import Reviews, ReviewTexts 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) data_types = { "overlook": [ transfer_languages, transfer_reviews ] }