from rest_framework import serializers from advertisement.models import Advertisement import yaml class AdvertisementSerializer(serializers.ModelSerializer): href = serializers.CharField() geometries = serializers.CharField(max_length=1024) class Meta: model = Advertisement fields = ( "href", "geometries" ) def validate(self, data): data["url"] = data["href"] data["width"] = self.get_width(data["geometries"]) data["height"] = self.get_height(data["geometries"]) data.pop("href") data.pop("geometries") return data def create(self, validated_data): return Advertisement.objects.create(**validated_data) def get_width(self, data): data = self.parse_geometries(data) return int(float(data["width"])) def get_height(self, data): data = self.parse_geometries(data) return int(float(data["height"])) def parse_geometries(self, geo_str): clear_str = "!ruby/object:Paperclip::Geometry" content_dict = yaml.safe_load(geo_str.replace(clear_str, '')) return content_dict[':original']