Пример #1
0
def change_point_thumbnail(picture: Picture, context):
    """
    Change the point thumbnail of the given Picture instance. The context is mandatory as it will be used to determine
    the picture location.

    :param Picture picture: Picture instance used to update its related point thumbnail property.
    :param context: The context containing the original request instance.
    :return:
    """
    """ Change the picture's point thumbnail """

    terra_opp_versatile_serializer = VersatileImageFieldSerializer("terra_opp")
    terra_opp_versatile_serializer._context = context
    last_picture_sizes = terra_opp_versatile_serializer.to_representation(picture.file)

    # Use best image thumbnail
    with Image.open(picture.file) as pic:
        width, height = pic.size
        if width < height:
            picture.viewpoint.point.properties[
                "viewpoint_picture"
            ] = last_picture_sizes["thumbnail_vertical"]
        else:
            picture.viewpoint.point.properties[
                "viewpoint_picture"
            ] = last_picture_sizes["thumbnail"]

    picture.viewpoint.point.save()
Пример #2
0
class OfferImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = OfferImage
        fields = (
            'id',
            'position',
            'image',
            'image_urls',
            '_removed',
        )

    id = serializers.IntegerField(required=False)
    _removed = serializers.BooleanField(required=False)

    image = VersatileImageFieldSerializer(
        sizes='offer_image',
        required=True,
        allow_null=False,
        write_only=True,
    )
    image_urls = VersatileImageFieldSerializer(
        sizes='offer_image',
        source='image',
        read_only=True,
    )
Пример #3
0
class AuthUserSerializer(serializers.ModelSerializer):
    photo = VersatileImageFieldSerializer(sizes='user_profile', required=False, allow_null=True, write_only=True)
    photo_urls = VersatileImageFieldSerializer(sizes='user_profile', read_only=True, source='photo')

    class Meta:
        model = get_user_model()
        fields = [
            'id', 'display_name', 'email', 'unverified_email', 'password', 'mobile_number', 'address', 'latitude',
            'longitude', 'description', 'mail_verified', 'current_group', 'language', 'photo', 'photo_urls'
        ]
        read_only_fields = ('unverified_email', 'mail_verified')
        extra_kwargs = {
            'password': {
                'write_only': True
            },
            'description': {
                'trim_whitespace': False,
                'max_length': settings.DESCRIPTION_MAX_LENGTH
            },
            'mail_verified': {
                'default': False
            },
        }

    def validate_email(self, email):
        if self.context['request'].method != 'POST':
            return email

        similar = get_user_model().objects.filter_by_similar_email(email)
        if similar.exists():
            raise serializers.ValidationError(_('Similar e-mail exists: ') + similar.first().email)
        return email

    def validate_current_group(self, group):
        user = self.context['request'].user
        if group and not group.is_member(user):
            raise serializers.ValidationError()
        return group

    def create(self, validated_data):
        try:
            user = self.Meta.model.objects.create_user(**validated_data)
        except AnymailAPIError:
            raise serializers.ValidationError(_('We could not send you an e-mail.'))
        return user

    def update(self, user, validated_data):
        if 'password' in validated_data:
            del validated_data['password']
        if 'email' in validated_data:
            del validated_data['email']
        if 'language' in validated_data and validated_data['language'] != user.language:
            user.update_language(validated_data.pop('language'))
        if 'photo' in validated_data and validated_data['photo'] is None:
            user.delete_photo()

        return super().update(user, validated_data)
Пример #4
0
class VersatileImageTestModelSerializer(ModelSerializer):
    """Serializes VersatileImageTestModel instances"""
    image = VersatileImageFieldSerializer(sizes='test_set')
    optional_image = VersatileImageFieldSerializer(sizes='test_set')

    class Meta:
        model = VersatileImageTestModel
        exclude = ('img_type', 'height', 'width', 'optional_image_2',
                   'optional_image_3')
Пример #5
0
class VersatileImageTestModelSerializer(ModelSerializer):
    """Serializes VersatileImageTestModel instances"""
    image = VersatileImageFieldSerializer(sizes='test_set')
    optional_image = VersatileImageFieldSerializer(sizes='test_set')

    class Meta:
        model = VersatileImageTestModel
        fields = (
            'image',
            'optional_image',
        )
Пример #6
0
class AktuelModelSerializer(serializers.ModelSerializer):
    image_aktuel = VersatileImageFieldSerializer(sizes='image_aktuel')
    image_aktuel_comp = VersatileImageFieldSerializer(sizes='image_aktuel_comp')

    class Meta:
        model = Aktuel
        fields = [
            'id',
            'slug',
            'image_aktuel',
            'image_aktuel_comp'
        ]
Пример #7
0
class ProductImageSerializer(FlexFieldsModelSerializer):
    """Serializer for :model:`product.ProductImage`:

    `**Fields:**`
        01. `alt`                         : `CharField`
        02. `id`                          : `AutoField`
        03. `image`                       : `FileField`
        04. `ppoi`                        : `CharField`
        05. `product`                     : `ForeignKey` [:model:`product.Product`]
        06. `sort_order`                  : `PositiveIntegerField`

    `**Reverse Fields:**`
        01. `productvariant`              : `ManyToManyField` [:model:`product.ProductVariant`]
        02. `variant_images`              : `ForeignKey` [:model:`product.VariantImage`]
    """
    image = VersatileImageFieldSerializer(sizes=get_rendition_keys())

    class Meta:
        model = ProductImage
        fields = [
            # Fields
            'alt',
            'id',
            'image',
            'ppoi',
            'product',
            'sort_order',

            # Reverse Fields
            # 'productvariant',
            # 'variant_images',
        ]
        read_only_fields = []
class UserSerializer(serializers.ModelSerializer):
    """Serializes User instances"""
    profile_pic = VersatileImageFieldSerializer(sizes=[(
        'full_size',
        'url'), ('thumbnail',
                 'thumbnail__100x100'), (
                     'medium_square_crop',
                     'crop__400x400'), ('small_square_crop', 'crop__50x50')])
    addresses = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = User
        fields = (
            'username',
            'first_name',
            'last_name',
            'profile_pic',
            'email',
            'addresses',
        )

    def get_addresses(self, obj):
        adresses = Address.objects.filter(user=obj)
        serializer = AddressSerializer(adresses, many=True)
        return serializer.data
class CreateUserSerializer(serializers.ModelSerializer):
    profile_picture = VersatileImageFieldSerializer(required=False,
                                                    allow_null=True,
                                                    sizes='profile_picture')

    def create(self, validated_data):
        # call create_user on user object. Without this
        # the password will be stored in plain text.
        user = User.objects.create_user(**validated_data)
        return user

    class Meta:
        model = User
        fields = (
            'id',
            'username',
            'password',
            'first_name',
            'last_name',
            'email',
            'auth_token',
            'profile_picture',
        )
        read_only_fields = ('auth_token', )
        extra_kwargs = {'password': {'write_only': True}}
Пример #10
0
class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category

    icon = VersatileImageFieldSerializer(
        required=False,
        sizes=[
            ('full_size', 'url'),
            ('thumbnail', 'thumbnail__150x150'),
            ('medium_square_crop', 'crop__555x238'),
        ]
    )

    @staticmethod
    def get_size(size, instance):
        if size == 'url':
            return instance.url
        kind, size = size.split("__")
        return getattr(instance, kind)[size].url

    def to_representation(self, instance):
        data = super(CategorySerializer, self).to_representation(instance)

        if not data['icon']:
            data['icon'] = dict(
                map(lambda args: (args[0], self.get_size(args[1], instance.icon),),
                    self.fields['icon'].sizes)
            )
        return data
Пример #11
0
class BenefitSerializer(FlexFieldsModelSerializer):
    """Serializer for :model:`widget.Benefit`:

    `**Fields:**`
        01. `id`                          : `AutoField`
        02. `image`                       : `FileField`
        03. `is_active`                   : `BooleanField`
        04. `name`                        : `CharField`
        05. `text`                        : `TextField`

    `**Reverse Fields:**`
        01. `translations`                : `ForeignKey` [:model:`widget.BenefitTranslation`]
    """

    image = VersatileImageFieldSerializer(sizes=get_rendition_keys())

    class Meta:
        model = Benefit
        fields = [
            # Fields
            'id',
            'image',
            'is_active',
            'name',
            'text',

            # Reverse Fields
            # 'translations',
        ]
        read_only_fields = []
Пример #12
0
class CommentSerializer(serializers.ModelSerializer):

    content_type = ContentTypeField()

    image = VersatileImageFieldSerializer(required=False,
                                          allow_null=True,
                                          sizes='image_size')

    user = UserSerializer(read_only=True, many=False)

    user_id = serializers.IntegerField(
        default=serializers.CreateOnlyDefault(CurrentUserDefault()))

    child = serializers.SerializerMethodField()

    class Meta:
        model = Comment
        fields = '__all__'

    def get_child(self, obj):
        queryset = Comment.objects.filter(object_id=obj.id,
                                          content_type__model='comment')
        serializers = CommentSerializer(queryset,
                                        many=True,
                                        context=self.context)
        return serializers.data
Пример #13
0
class MoleCreateSerializer(MoleSerializer):
    photo = VersatileImageFieldSerializer(sizes='main_set',
                                          required=True,
                                          write_only=True)
    age = serializers.IntegerField(required=False, allow_null=True)
    study = serializers.PrimaryKeyRelatedField(queryset=Study.objects.all(),
                                               write_only=True,
                                               required=False)

    class Meta(MoleSerializer.Meta):
        fields = ('anatomical_site', 'patient_anatomical_site',
                  'position_info', 'photo', 'age', 'study')

    validate_position_info = validate_position_info
    validate = validate

    def create(self, validated_data):
        photo = validated_data.pop('photo')
        age = validated_data.pop('age', None)
        study = validated_data.pop('study', None)

        mole = super(MoleCreateSerializer, self).create(validated_data)

        MoleImage.objects.create(mole=mole, photo=photo, age=age, study=study)

        return mole
Пример #14
0
class TableListSerializer(serializers.ModelSerializer):
    update_url = serializers.HyperlinkedIdentityField(
        view_name='student:update')
    delete_url = serializers.HyperlinkedIdentityField(
        view_name='student:api-delete')
    adm_no = serializers.SerializerMethodField()
    course = serializers.SerializerMethodField()
    image = VersatileImageFieldSerializer(sizes=[(
        'full_size',
        'url'), ('thumbnail',
                 'thumbnail__100x100'), (
                     'medium_square_crop',
                     'crop__400x400'), ('small_square_crop', 'crop__50x50')])

    class Meta:
        model = Table
        fields = ('id', 'adm_no', 'course', 'first_name', 'middle_name',
                  'last_name', 'nationality', 'dob', 'pob', 'gender',
                  'religion', 'parents', 'image', 'update_url', 'delete_url')

    def get_adm_no(self, obj):
        try:
            return obj.student_official.first().adm_no
        except:
            return ''

    def get_course(self, obj):
        try:
            return obj.student_official.first().course.name
        except:
            return ''
Пример #15
0
class GroupPreviewSerializer(GroupBaseSerializer):
    """
    Public information for all visitors
    should be readonly
    """
    application_questions = serializers.SerializerMethodField()
    photo_urls = VersatileImageFieldSerializer(sizes='group_logo',
                                               read_only=True,
                                               source='photo')

    class Meta:
        model = GroupModel
        fields = [
            'id',
            'name',
            'public_description',
            'application_questions',
            'address',
            'latitude',
            'longitude',
            'members',
            'status',
            'theme',
            'is_open',
            'photo_urls',
        ]

    def get_application_questions(self, group):
        return group.get_application_questions_or_default()
Пример #16
0
class AppSerializer(serializers.ModelSerializer):

    image = VersatileImageFieldSerializer(sizes='app_size')

    class Meta:
        model = App
        fields = '__all__'
Пример #17
0
class PhotoCreateSerializer(serializers.ModelSerializer):
    photo = VersatileImageFieldSerializer(
        sizes=VERSATILEIMAGEFIELD_SETTINGS['sizes'], required=False)
    tags = TagListField(many=True)

    class Meta:
        model = models.Photo
        fields = ('photo', 'motive', 'date_taken', 'security_level',
                  'category', 'media', 'album', 'place', 'image_number',
                  'page', 'tags', 'scanned', 'on_home_page', 'splash', 'lapel')

    def create(self, validated_data):
        tags = validated_data.pop('tags')
        photo = models.Photo.objects.create(**validated_data)

        tags = tags if isinstance(tags, list) else [tags]  # works

        for tag_name in tags:
            if not len(tag_name):
                continue
            tag, _ = models.Tag.objects.get_or_create(name=tag_name)
            photo.tags.add(tag)
        photo.save()

        return photo
Пример #18
0
class SlideSerializer(FlexFieldsModelSerializer):
    """Serializer for :model:`widget.Slide`:

    `**Fields:**`
        01. `alt`                         : `CharField`
        02. `id`                          : `AutoField`
        03. `image`                       : `FileField`
        04. `ppoi`                        : `CharField`
        05. `slider`                      : `ForeignKey` [:model:`widget.Slider`]
        06. `sort_order`                  : `PositiveIntegerField`

    `**Reverse Fields:**`
    """
    image = VersatileImageFieldSerializer(sizes=get_rendition_keys())

    class Meta:
        model = Slide
        fields = [
            # Fields
            'alt',
            'id',
            'image',
            # 'ppoi',
            'slider',
            'sort_order',

            # Reverse Fields
        ]
        read_only_fields = []
Пример #19
0
class ProfessionalSerializer(serializers.ModelSerializer):
    user = UserSerializer(many=False)
    profile_picture = VersatileImageFieldSerializer(sizes=[(
        'full_size',
        'url'), ('thumbnail',
                 'thumbnail__100x100'), (
                     'medium_square_crop',
                     'crop__400x400'), ('small_square_crop', 'crop__50x50')])

    class Meta:
        model = Professional
        fields = ("id", "average", "count", "user", "experience", "rut",
                  "region", "city", "street", "house_number", "phone_number",
                  "identification", "profile_picture")
        depth = 2

    def update(self, instance, validated_data):
        user_data = validated_data.pop('user', None)
        if user_data:
            for attr, value in user_data.items():
                setattr(instance.user, attr, value)
        for attr, value in validated_data.items():
            setattr(instance, attr, value)
        instance.user.save()
        instance.save()
        return instance

    def create(self, validated_data):
        user_data = validated_data.pop('user')
        password = user_data.pop('password')
        user, created = User.objects.get_or_create(**user_data)
        user.set_password(password)
        user.save()
        professional = Professional.objects.create(user=user, **validated_data)
        return professional
Пример #20
0
class ClientSerializer(serializers.ModelSerializer):
    user = UserSerializer(many=False)
    profile_picture = VersatileImageFieldSerializer(sizes=[(
        'full_size',
        'url'), ('thumbnail',
                 'thumbnail__100x100'), (
                     'medium_square_crop',
                     'crop__400x400'), ('small_square_crop', 'crop__50x50')])

    class Meta:
        model = Client
        fields = ("id", "user", "profile_picture")
        depth = 2

    def update(self, instance, validated_data):
        user_data = validated_data.pop('user', None)
        if user_data:
            for attr, value in user_data.items():
                setattr(instance.user, attr, value)
        for attr, value in validated_data.items():
            setattr(instance, attr, value)
        instance.user.save()
        instance.save()
        return instance

    def create(self, validated_data):
        user_data = validated_data.pop('user')
        password = user_data.pop('password')
        user, created = User.objects.get_or_create(**user_data)
        user.set_password(password)
        user.save()
        client = Client.objects.create(user=user, **validated_data)
        return client
Пример #21
0
class MoleImageSerializer(serializers.ModelSerializer):
    photo = VersatileImageFieldSerializer(sizes='main_set', required=True)

    class Meta:
        model = MoleImage
        fields = ('pk', 'date_created', 'date_modified', 'path_diagnosis',
                  'clinical_diagnosis', 'prediction', 'prediction_accuracy',
                  'photo', 'biopsy', 'biopsy_data', 'approved', 'age', 'study')
        extra_kwargs = {
            'age': {
                'read_only': True,
            },
        }

    def validate_biopsy_data(self, biopsy_data):
        if isinstance(biopsy_data, str):
            return json.loads(biopsy_data)
        return biopsy_data

    def validate_approved(self, data):
        if data != self.instance.approved and \
                not Coordinator.objects.filter(
                    doctor_ptr_id=self.context['request'].user.id).exists():
            raise serializers.ValidationError(
                "Only coordinator can approve images")
        return data

    def validate_study(self, study):
        validate_study_consent_for_patient(
            study, self.context['view'].kwargs['patient_pk'])
        return study
Пример #22
0
class NewsSerializer(serializers.ModelSerializer):
    image = VersatileImageFieldSerializer(sizes='news_image')
    category = CategorySerializer(read_only=True)

    class Meta:
        model = News
        fields = ('pk', 'title', 'description', 'category', 'created_at', 'updated_at', 'image', 'extra')
Пример #23
0
class ImageSerializer(ModelSerializer):
    image = VersatileImageFieldSerializer(sizes=[
        ('full_size', 'url'),
        ('thumbnail', 'thumbnail__100x100'),
        ('medium_square_crop', 'crop__400x400'),
        ('small_square_crop', 'crop__50x50'),
    ], )

    class Meta:
        model = Image
        fields = [
            'id',
            'creator',
            'title',
            'image',
            'created_at',
            'modified_at',
        ]
        read_only_fields = [
            'id',
            'creator',
            'image',
            'created_at',
            'modified_at',
        ]
Пример #24
0
class UserSerializer(serializers.ModelSerializer):

    # groups = GroupSerializer(required=False, many=True)

    # is_active = serializers.BooleanField(required=False)

    # is_superuser = serializers.BooleanField(required=False)

    # first_name = serializers.CharField(required=False)

    # last_name = serializers.CharField(required=False)

    photo = VersatileImageFieldSerializer(required=False,
                                          allow_null=True,
                                          sizes='image_size')

    groups_id = serializers.PrimaryKeyRelatedField(
        required=False,
        write_only=True,
        many=True,
        allow_null=True,
        queryset=Group.objects.all())

    name = serializers.SerializerMethodField()

    email = serializers.SerializerMethodField()

    class Meta:
        model = User
        exclude = ('password', )

    def get_name(self, obj):
        return obj.name

    def get_email(self, obj):
        try:
            email_address = obj.email_address.latest('join')
            serializers = EmailAddressSerializer(email_address,
                                                 context=self.context)
            return serializers.data
        except EmailAddress.DoesNotExist:
            return None

    # def get_photo(self, obj):
    #     photo = obj.images.all().filter(tag='photo').last()
    #     if photo:
    #         serializer = ImageSerializer(photo, context=self.context)
    #         return serializer.data

    def update(self, instance, validated_data):
        groups_id = validated_data.pop('groups_id', None)
        if groups_id is not None:
            for group in list(instance.groups.all()):
                instance.groups.remove(group)

            for id in groups_id:
                instance.groups.add(id)

        return super().update(instance, validated_data)
Пример #25
0
class UserProfileModelSerializer(serializers.ModelSerializer):
    userphoto = VersatileImageFieldSerializer(sizes='userphoto')

    class Meta:
        model = UserProfile
        fields = [
            'id', 'name', 'surname', 'birthday', 'gender', 'phone', 'userphoto'
        ]
Пример #26
0
class AlbumSerializer(serializers.ModelSerializer):
    main_image = VersatileImageFieldSerializer(sizes='album_image')
    images = ImageSerializer(many=True, read_only=True)
    event = GalleryEventSerializer(read_only=True)

    class Meta:
        model = Album
        fields = ('pk', 'name', 'description', 'event', 'main_image', 'images')
Пример #27
0
class EventSerializer(serializers.ModelSerializer):
    poster = VersatileImageFieldSerializer(sizes='event_poster')
    artists = ArtistSerializer(many=True, read_only=True)

    class Meta:
        model = Event
        fields = ('pk', 'name', 'artists', 'info', 'date', 'start',
                  'discounts', 'price', 'is_special', 'poster', 'extra')
Пример #28
0
class actorSerializer(serializers.HyperlinkedModelSerializer):
    owner = serializers.ReadOnlyField(source='owner.username')
    pic = VersatileImageFieldSerializer(sizes='image_cut')

    class Meta:
        model = actor
        fields = ('url', 'first_name', 'last_name', 'get_full_name', 'pic',
                  'gender', 'age', 'owner')
Пример #29
0
class SetSerializer(serializers.ModelSerializer):
    menu = MenuSetSerializer(source='menuset_set', many=True)
    photo = VersatileImageFieldSerializer(sizes='set_photo')
    prices = PriceSerializer(many=True, read_only=True)

    class Meta:
        model = Set
        fields = ('pk', 'name', 'description', 'created_at', 'menu', 'prices', 'photo')
Пример #30
0
class MenuSerializer(serializers.ModelSerializer):
    photo = VersatileImageFieldSerializer(sizes='menu_photo')
    prices = PriceSerializer(many=True, read_only=True)
    category = CategorySerializer(read_only=True)

    class Meta:
        model = Menu
        fields = ('pk', 'name', 'description', 'category', 'created_at', 'detail', 'prices', 'photo')