diff --git a/apps/advertisement/transfer_data.py b/apps/advertisement/transfer_data.py index b6e5ace5..f1a5ca38 100644 --- a/apps/advertisement/transfer_data.py +++ b/apps/advertisement/transfer_data.py @@ -1,7 +1,7 @@ from pprint import pprint from transfer.models import Ads -from transfer.serializers.advertisement import AdvertisementSerializer +from transfer.serializers.advertisement import AdvertisementSerializer, AdvertisementImageSerializer def transfer_advertisement(): @@ -19,6 +19,24 @@ def transfer_advertisement(): pprint(f"transfer_product errors: {errors}") +def transfer_page(): + errors = [] + queryset = Ads.objects.exclude(href__isnull=True) \ + .exclude(attachment_suffix_url__isnull=True) \ + .exclude(site_id__isnull=True) + + serialized_data = AdvertisementImageSerializer(data=list(queryset.values()), many=True) + + if serialized_data.is_valid(): + serialized_data.save() + else: + for d in serialized_data.errors: errors.append(d) if d else None + pprint(f"transfer_page errors: {errors}") + + data_types = { - "commercial": [transfer_advertisement] + "commercial": [ + transfer_advertisement, + transfer_page + ] } diff --git a/apps/transfer/serializers/advertisement.py b/apps/transfer/serializers/advertisement.py index 958e21a9..c7bd50f8 100644 --- a/apps/transfer/serializers/advertisement.py +++ b/apps/transfer/serializers/advertisement.py @@ -1,8 +1,11 @@ from rest_framework import serializers from main.models import SiteSettings -from transfer.models import Sites +from transfer.models import Sites, Ads from advertisement.models import Advertisement +from main.models import Page +import requests +from rest_framework import status class AdvertisementSerializer(serializers.ModelSerializer): @@ -48,3 +51,43 @@ class AdvertisementSerializer(serializers.ModelSerializer): qs = SiteSettings.objects.filter(subdomain=subdomain) if qs.exists(): return qs.first() + + +class AdvertisementImageSerializer(AdvertisementSerializer): + + attachment_suffix_url = serializers.CharField() + + class Meta(AdvertisementSerializer.Meta): + model = Page + fields = [ + 'id', + 'attachment_suffix_url', + ] + + def validate(self, data): + data.update({ + 'image_url': self.get_absolute_image_url(data.pop('attachment_suffix_url')), + 'advertisement': self.get_advertisement(data.pop('id')), + }) + return data + + def get_advertisement(self, old_id): + qs = Advertisement.objects.filter(old_id=old_id) + if qs.exists(): + return qs.first() + + def get_absolute_image_url(self, relative_path): + if relative_path: + absolute_image_url = f'https://1dc3f33f6d-3.optimicdn.com/gaultmillau.com/' \ + f'{relative_path}' + response = requests.head(absolute_image_url) + if response.status_code == status.HTTP_200_OK: + return absolute_image_url + + def create(self, validated_data): + advertisement = validated_data.get('advertisement') + image_url = validated_data.get('image_url') + + if advertisement and image_url: + Page.objects.get_or_create(advertisement=advertisement, image_url=image_url, source=Page.MOBILE) + Page.objects.get_or_create(advertisement=advertisement, image_url=image_url, source=Page.WEB) \ No newline at end of file