From 86e29173ba940acb82e9d146bc2a5d595f8d61fe Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 21 Nov 2019 16:45:27 +0300 Subject: [PATCH] transfer partner --- apps/partner/transfer_data.py | 5 +++ apps/product/transfer_data.py | 50 +++++++++------------- apps/transfer/serializers/partner.py | 62 +++++++++++++++++++--------- 3 files changed, 67 insertions(+), 50 deletions(-) diff --git a/apps/partner/transfer_data.py b/apps/partner/transfer_data.py index 868345a8..acda6c2c 100644 --- a/apps/partner/transfer_data.py +++ b/apps/partner/transfer_data.py @@ -1,11 +1,15 @@ from pprint import pprint from establishment.models import Establishment +from partner.models import Partner from transfer.models import EstablishmentBacklinks from transfer.serializers.partner import PartnerSerializer def transfer_partner(): + """ + Transfer data to Partner model only after transfer Establishment + """ establishments = Establishment.objects.filter(old_id__isnull=False).values_list('old_id', flat=True) queryset = EstablishmentBacklinks.objects.filter( establishment_id__in=list(establishments), @@ -24,6 +28,7 @@ def transfer_partner(): serialized_data = PartnerSerializer(data=list(queryset), many=True) if serialized_data.is_valid(): + Partner.objects.all().delete() # TODO: закоментить, если требуется сохранить старые записи serialized_data.save() else: pprint(f"Partner serializer errors: {serialized_data.errors}") diff --git a/apps/product/transfer_data.py b/apps/product/transfer_data.py index 8e4a26fa..84a8a524 100644 --- a/apps/product/transfer_data.py +++ b/apps/product/transfer_data.py @@ -2,17 +2,6 @@ from pprint import pprint from transfer import models as transfer_models from transfer.serializers import product as product_serializers -from transfer.serializers.partner import PartnerSerializer - - -def transfer_partner(): - queryset = transfer_models.EstablishmentBacklinks.objects.filter(type="Partner") - - serialized_data = PartnerSerializer(data=list(queryset.values()), many=True) - if serialized_data.is_valid(): - serialized_data.save() - else: - pprint(f"News serializer errors: {serialized_data.errors}") def transfer_wine_color(): @@ -50,8 +39,8 @@ def transfer_wine_bottles_produced(): ) queryset = [vars(query) for query in raw_queryset] serialized_data = product_serializers.WineBottlesProducedSerializer( - data=queryset, - many=True) + data=queryset, + many=True) if serialized_data.is_valid(): serialized_data.save() else: @@ -69,8 +58,8 @@ def transfer_wine_classification_type(): ) queryset = [vars(query) for query in raw_queryset] serialized_data = product_serializers.WineClassificationTypeSerializer( - data=queryset, - many=True) + data=queryset, + many=True) if serialized_data.is_valid(): serialized_data.save() else: @@ -79,10 +68,10 @@ def transfer_wine_classification_type(): def transfer_wine_standard(): queryset = transfer_models.ProductClassification.objects.filter(parent_id__isnull=True) \ - .exclude(type='Classification') + .exclude(type='Classification') serialized_data = product_serializers.ProductStandardSerializer( - data=list(queryset.values()), - many=True) + data=list(queryset.values()), + many=True) if serialized_data.is_valid(): serialized_data.save() else: @@ -92,8 +81,8 @@ def transfer_wine_standard(): def transfer_wine_classifications(): queryset = transfer_models.ProductClassification.objects.filter(type='Classification') serialized_data = product_serializers.ProductClassificationSerializer( - data=list(queryset.values()), - many=True) + data=list(queryset.values()), + many=True) if serialized_data.is_valid(): serialized_data.save() else: @@ -104,8 +93,8 @@ def transfer_product(): errors = [] queryset = transfer_models.Products.objects.all() serialized_data = product_serializers.ProductSerializer( - data=list(queryset.values()), - many=True) + data=list(queryset.values()), + many=True) if serialized_data.is_valid(): serialized_data.save() else: @@ -117,8 +106,8 @@ def transfer_product_note(): errors = [] queryset = transfer_models.ProductNotes.objects.exclude(text='') serialized_data = product_serializers.ProductNoteSerializer( - data=list(queryset.values()), - many=True) + data=list(queryset.values()), + many=True) if serialized_data.is_valid(): serialized_data.save() else: @@ -130,8 +119,8 @@ def transfer_plate(): errors = [] queryset = transfer_models.Merchandise.objects.all() serialized_data = product_serializers.PlateSerializer( - data=list(queryset.values()), - many=True) + data=list(queryset.values()), + many=True) if serialized_data.is_valid(): serialized_data.save() else: @@ -143,8 +132,8 @@ def transfer_plate_image(): errors = [] queryset = transfer_models.Merchandise.objects.all() serialized_data = product_serializers.PlateImageSerializer( - data=list(queryset.values()), - many=True) + data=list(queryset.values()), + many=True) if serialized_data.is_valid(): serialized_data.save() else: @@ -153,7 +142,6 @@ def transfer_plate_image(): data_types = { - "partner": [transfer_partner], "wine_characteristics": [ transfer_wine_sugar_content, transfer_wine_color, @@ -161,12 +149,12 @@ data_types = { transfer_wine_classification_type, transfer_wine_standard, transfer_wine_classifications, - ], + ], "product": [ transfer_product, ], "product_note": [ - transfer_product_note, + transfer_product_note, ], "souvenir": [ transfer_plate, diff --git a/apps/transfer/serializers/partner.py b/apps/transfer/serializers/partner.py index 69cf308e..61f56dea 100644 --- a/apps/transfer/serializers/partner.py +++ b/apps/transfer/serializers/partner.py @@ -1,29 +1,53 @@ from rest_framework import serializers + +from establishment.models import Establishment from partner.models import Partner class PartnerSerializer(serializers.Serializer): - pass - # 'id', - # 'establishment_id', - # 'partnership_name', - # 'partnership_icon', - # 'backlink_url', - # 'created_at', - # 'type', - # 'starting_date', - # 'expiry_date', - # 'price_per_month', + id = serializers.IntegerField() + establishment_id = serializers.IntegerField() + partnership_name = serializers.CharField(allow_null=True) + partnership_icon = serializers.CharField(allow_null=True) + backlink_url = serializers.CharField(allow_null=True) + created_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S') + type = serializers.CharField(allow_null=True) + starting_date = serializers.DateField(allow_null=True) + expiry_date = serializers.DateField(allow_null=True) + price_per_month = serializers.DecimalField(max_digits=10, decimal_places=2, allow_null=True) + def validate(self, data): + data.update({ + 'old_id': data.pop('id'), + 'name': data['partnership_name'], + 'url': data.pop('backlink_url'), + 'image': self.get_image(data), + 'establishment': self.get_establishment(data), + 'type': Partner.PARTNER if data['type'] == 'Partner' else Partner.SPONSOR, + 'created': data.pop('created_at'), + }) + data.pop('partnership_icon') + data.pop('partnership_name') + data.pop('establishment_id') + return data - # def validate(self, data): - # data["image"] = partnership_to_image_url.get(data["partnership_name"]).get(data["partnership_icon"]) - # data.pop("partnership_name") - # data.pop("partnership_icon") - # return data - # - # def create(self, validated_data): - # return Partner.objects.create(**validated_data) + @staticmethod + def get_image(data): + return partnership_to_image_url.get(data['partnership_name']).get(data['partnership_icon']) + + @staticmethod + def get_establishment(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 + + def create(self, validated_data): + obj, _ = Partner.objects.update_or_create( + old_id=validated_data['old_id'], + defaults=validated_data, + ) + return obj partnership_to_image_url = {