39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
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'] |