示例#1
0
class StoryImageSerializer(serializers.ModelSerializer):
    """ModelSerializer for StoryImage"""

    filename = serializers.CharField(read_only=True,
                                     source='imagefile.filename')

    thumb = AbsoluteURLField(source='imagefile.large.url')
    cropped = AbsoluteURLField(read_only=True)
    aspect_ratio = serializers.DecimalField(required=False,
                                            max_digits=5,
                                            decimal_places=4)
    crop_box = CropBoxField(read_only=True, source='imagefile.crop_box')

    class Meta:
        model = StoryImage
        fields = [
            'url',
            'id',
            'caption',
            'parent_story',
            'imagefile',
            'creditline',
            'thumb',
            'cropped',
            'filename',
            'ordering',
            'placement',
            'size',
            'aspect_ratio',
            'crop_box',
        ]
示例#2
0
class StorySerializer(serializers.HyperlinkedModelSerializer):
    """ModelSerializer for Story"""
    url_field_name = 'uri'

    class Meta:
        model = Story
        fields = [
            'id',
            'uri',
            'public_url',
            'edit_url',
            'modified',
            'created',
            'working_title',
            'publication_status',
            'kicker',
            'title',
            'lede',
            'theme_word',
            'bodytext_markup',
            'publication_date',
            'story_type',
            'story_type_name',
            'image_count',
        ]

    story_type_name = serializers.StringRelatedField(source='story_type')
    public_url = AbsoluteURLField(source='get_absolute_url')
    edit_url = AbsoluteURLField(source='get_edit_url')
    bodytext_markup = serializers.CharField(trim_whitespace=False)
    working_title = serializers.CharField(
        trim_whitespace=False, max_length=1000
    )
    story_type = serializers.PrimaryKeyRelatedField(
        queryset=StoryType.objects.all(), read_only=False
    )
    image_count = serializers.IntegerField(read_only=True)

    # url = serializers.HyperlinkedIdentityField()

    def validate_working_title(self, value):
        if 'Trump' in value:
            raise exceptions.ValidationError('🙍')
        return value

    def update(self, instance, validated_data):
        clean_model = (
            validated_data.pop('clean', False)
            or 'publication_status' in validated_data
        )

        story = super().update(instance, validated_data)
        if clean_model:
            story.full_clean()
            story.save()
        return story
示例#3
0
class ImageFileSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = ImageFile
        fields = [
            'id',
            'url',
            'filename',
            'filesize',
            'artist',
            'description',
            'category',
            'contributor',
            'small',
            'large',
            # 'thumb',
            'original',
            'width',
            'height',
            'mimetype',
            'cropping_method',
            'method',
            'created',
            'modified',
            'crop_box',
            'usage',
        ]
        read_only_fields = [
            'original',
            'artist',
        ]

    contributor = serializers.PrimaryKeyRelatedField(
        queryset=Contributor.objects.all(),
        allow_null=True,
    )
    width = serializers.IntegerField(source='full_width')
    height = serializers.IntegerField(source='full_height')
    usage = serializers.IntegerField(read_only=True)
    crop_box = CropBoxField()
    original = AbsoluteURLField()
    small = AbsoluteURLField()
    large = AbsoluteURLField()
    # thumb = AbsoluteURLField()
    mimetype = serializers.SerializerMethodField()
    method = serializers.SerializerMethodField()

    def get_method(self, instance):
        return instance.get_cropping_method_display()

    def get_mimetype(self, instance):
        return instance.stat.mimetype
示例#4
0
class ContributorSerializer(serializers.HyperlinkedModelSerializer):
    """ModelSerializer for Contributor"""

    class Meta:
        model = Contributor
        fields = [
            'id',
            'url',
            'status',
            'display_name',
            'phone',
            'email',
            'byline_photo',
            'thumb',
            'stint_set',
            'position',
            'first_position',
            'title',
            'username',
        ]
        extra_kwargs = {
            'display_name': {'min_length': 3, 'max_length': 50},
            'status': {'required': True},
            'email': {'required': False},
        }

    username = serializers.CharField(source='user', read_only=True)

    byline_photo = serializers.PrimaryKeyRelatedField(
        many=False,
        queryset=ImageFile.objects.profile_images(),
        allow_null=True,
        required=False,
    )
    stint_set = StintSerializer(many=True, read_only=True)
    phone = PhoneNumberField(required=False)
    thumb = AbsoluteURLField()

    first_position = serializers.IntegerField(
        allow_null=True, write_only=True, required=False
    )

    def validate_status(self, value):
        if not value:
            raise serializers.ValidationError('invalid choice')
        return value

    def create(self, validated_data):
        position = validated_data.pop('first_position', None)
        contributor = Contributor.objects.create(**validated_data)
        if position:
            Stint.objects.create(
                contributor=contributor,
                position_id=int(position),
            )
        if contributor.email and contributor.status == Contributor.ACTIVE:
            user = tasks.connect_contributor_to_user(contributor, True)
            assert user.is_active, 'should be active'

        return contributor
示例#5
0
class NestedPDFSerializer(serializers.ModelSerializer):

    cover = AbsoluteURLField(source='get_cover_page')

    class Meta:
        model = PrintIssue
        fields = [
            'url',
            'pages',
            'cover',
            'pdf',
        ]
示例#6
0
class PrintIssueSerializer(serializers.HyperlinkedModelSerializer):
    """ModelSerializer for PrintIssue"""

    cover = AbsoluteURLField(source='get_cover_page.url')

    class Meta:
        model = PrintIssue
        fields = [
            'url',
            'issue',
            'pages',
            'cover',
            'pdf',
        ]
示例#7
0
class BylineSerializer(serializers.ModelSerializer):
    class Meta:
        model = Byline
        fields = [
            'id',
            'ordering',
            'credit',
            'name',
            'title',
            'contributor',
            'thumb',
        ]

    name = serializers.StringRelatedField(source='contributor')
    thumb = AbsoluteURLField(source='contributor.thumb')