Пример #1
0
    def to_representation(self, instance):
        data = super(UserDetailSerializer, self).to_representation(instance)

        request = self.context['request']
        if not has_version(request, '1.2') or request.user.id != instance.id:
            del data['settings']

        return data
Пример #2
0
    def form(self):
        form = super(BaseFilterSet, self).form

        for version in getattr(self.Meta, 'versioned_fields', {}):
            if utils.has_version(self.request, version):
                continue

            for field in self.Meta.versioned_fields[version]:
                if field in form.fields:
                    del form.fields[field]

        return form
Пример #3
0
    def to_representation(self, instance):
        data = super(BaseHyperlinkedModelSerializer,
                     self).to_representation(instance)

        request = self.context.get('request')
        for version in getattr(self.Meta, 'versioned_fields', {}):
            # if the user has requested a version lower that than in which the
            # field was added, we drop it
            if not utils.has_version(request, version):
                for field in self.Meta.versioned_fields[version]:
                    data.pop(field)

        return data
Пример #4
0
    def update(self, instance, validated_data):
        settings_data = validated_data.pop('profile', None)

        request = self.context['request']
        if settings_data and has_version(request, '1.2') and (
                request.user.id == instance.id):
            # TODO(stephenfin): We ignore this field rather than raise an error
            # to be consistent with the rest of the API. We should change this
            # when we change the overall settings
            self.fields['settings'].update(instance.profile, settings_data)

        return super(UserDetailSerializer, self).update(
            instance, validated_data)
Пример #5
0
    def has_permission(self, request, view):
        # read-only permission for everything
        if request.method in permissions.SAFE_METHODS:
            return True

        if not utils.has_version(request, '1.2'):
            raise exceptions.MethodNotAllowed(request.method)

        if request.method == 'POST' and (not request.user
                                         or not request.user.is_authenticated):
            return False

        # we have more to do but we can't do that until we have an object
        return True
Пример #6
0
    def to_representation(self, instance):
        data = super(BaseHyperlinkedModelSerializer,
                     self).to_representation(instance)

        request = self.context.get('request')
        for version in getattr(self.Meta, 'versioned_fields', {}):
            # if the user has requested a version lower that than in which the
            # field was added, we drop it
            if not utils.has_version(request, version):
                for field in self.Meta.versioned_fields[version]:
                    # After a PATCH with an older API version, we may not see
                    # these fields. If they don't exist, don't panic, return
                    # (and then discard) None.
                    data.pop(field, None)

        return data