python类Serializer()的实例源码

test_serializers.py 文件源码 项目:drf-friendly-errors 作者: FutureMind 项目源码 文件源码 阅读 25 收藏 0 点赞 0 评论 0
def test_char_field_error_content(self):
        # Too long string
        self.data_set['title'] = 'Too Long Title For Defined Serializer'
        s = run_is_valid(SnippetSerializer, data=self.data_set)
        code = settings.FRIENDLY_FIELD_ERRORS['CharField']['max_length']
        self.assertEqual(s.errors['errors'][0]['code'], code)
        self.assertEqual(s.errors['errors'][0]['field'], 'title')

        # Empty string
        self.data_set['title'] = ''
        s = run_is_valid(SnippetSerializer, data=self.data_set)
        code = settings.FRIENDLY_FIELD_ERRORS['CharField']['blank']
        self.assertEqual(s.errors['errors'][0]['code'], code)
        self.assertEqual(s.errors['errors'][0]['field'], 'title')

        # No data provided
        self.data_set.pop('title')
        s = run_is_valid(SnippetSerializer, data=self.data_set)
        code = settings.FRIENDLY_FIELD_ERRORS['CharField']['required']
        self.assertEqual(s.errors['errors'][0]['code'], code)
        self.assertEqual(s.errors['errors'][0]['field'], 'title')
serializers.py 文件源码 项目:django-chemtrails 作者: inonit 项目源码 文件源码 阅读 24 收藏 0 点赞 0 评论 0
def _get_default_field_kwargs(property_class):
        """
        Return default kwargs used to initialize
        the Serializer field with.
        :param property_class: Neomodel property class
        """
        defaults = property_class.__dict__.copy()
        delete_attrs = [
            'db_property',
            'choices',
            'has_default',
            'index',
            'unique_index'
        ]
        for attr in delete_attrs:
            if attr in defaults:
                del defaults[attr]

        return defaults
entities.py 文件源码 项目:drf_openapi 作者: limdauto 项目源码 文件源码 阅读 21 收藏 0 点赞 0 评论 0
def get_paginator_serializer(self, view, child_serializer_class):
        class BaseFakeListSerializer(serializers.Serializer):
            results = child_serializer_class(many=True)

        class FakePrevNextListSerializer(BaseFakeListSerializer):
            next = URLField()
            previous = URLField()

        # Validate if the view has a pagination_class
        if not (hasattr(view, 'pagination_class')) or view.pagination_class is None:
            return BaseFakeListSerializer

        pager = view.pagination_class
        if hasattr(pager, 'default_pager'):
            # Must be a ProxyPagination
            pager = pager.default_pager

        if issubclass(pager, (PageNumberPagination, LimitOffsetPagination)):
            class FakeListSerializer(FakePrevNextListSerializer):
                count = IntegerField()
            return FakeListSerializer
        elif issubclass(pager, CursorPagination):
            return FakePrevNextListSerializer

        return BaseFakeListSerializer
makers.py 文件源码 项目:django-openapi-gen 作者: Ecognize 项目源码 文件源码 阅读 27 收藏 0 点赞 0 评论 0
def __init__(self, oftype = None, model = None, fields = ['__all__']):
        assert oftype is not None, ('You should specify a type for the serializer')
        assert type(fields) is list, ('Serializer fields should be listed')
        assert len(fields) > 0, ('Serializer fields should not be an empty list')

        self.fields = fields
        self.oftype = oftype
        self.model = model
        self.serializer = LazyClass('SwaggerDefaultSerializer', self.oftype)

        self.serializer.set_attr('Meta', self.make_meta())
meta.py 文件源码 项目:drf-metadata 作者: night-crawler 项目源码 文件源码 阅读 26 收藏 0 点赞 0 评论 0
def get_NAME_serializer(self, field: models.Field, qs: models.QuerySet, obj=None) -> Serializer:
        """
        Returns serializer <NAME> field. This method (`get_NAME_serializer`) is not supposed to use directly.
        :param obj: optional obj passed to method
        :param field: model field
        :param qs: queryset
        :return: Serializer
        """
        raise Exception()

    # noinspection PyPep8Naming,PyMethodMayBeStatic
schemas.py 文件源码 项目:sdining 作者: Lurance 项目源码 文件源码 阅读 29 收藏 0 点赞 0 评论 0
def get_serializer_fields(self, path, method, view):
        """
        Return a list of `coreapi.Field` instances corresponding to any
        request body input, as determined by the serializer class.
        """
        if method not in ('PUT', 'PATCH', 'POST'):
            return []

        if not hasattr(view, 'get_serializer'):
            return []

        serializer = view.get_serializer()

        if isinstance(serializer, serializers.ListSerializer):
            return [
                coreapi.Field(
                    name='data',
                    location='body',
                    required=True,
                    schema=coreschema.Array()
                )
            ]

        if not isinstance(serializer, serializers.Serializer):
            return []

        fields = []
        for field in serializer.fields.values():
            if field.read_only or isinstance(field, serializers.HiddenField):
                continue

            required = field.required and method != 'PATCH'
            field = coreapi.Field(
                name=field.field_name,
                location='form',
                required=required,
                schema=field_to_schema(field)
            )
            fields.append(field)

        return fields
response.py 文件源码 项目:sdining 作者: Lurance 项目源码 文件源码 阅读 24 收藏 0 点赞 0 评论 0
def __init__(self, data=None, status=None,
                 template_name=None, headers=None,
                 exception=False, content_type=None):
        """
        Alters the init arguments slightly.
        For example, drop 'template_name', and instead use 'data'.

        Setting 'renderer' and 'media_type' will typically be deferred,
        For example being set automatically by the `APIView`.
        """
        super(Response, self).__init__(None, status=status)

        if isinstance(data, Serializer):
            msg = (
                'You passed a Serializer instance as data, but '
                'probably meant to pass serialized `.data` or '
                '`.error`. representation.'
            )
            raise AssertionError(msg)

        self.data = data
        self.template_name = template_name
        self.exception = exception
        self.content_type = content_type

        if headers:
            for name, value in six.iteritems(headers):
                self[name] = value
disponibility.py 文件源码 项目:django-open-volunteering-platform 作者: OpenVolunteeringPlatform 项目源码 文件源码 阅读 23 收藏 0 点赞 0 评论 0
def add_disponibility_representation(func):
  @wraps(func)
  def _impl(self, instance):
    # We pop disponibility field to avoid AttributeError on default Serializer.to_representation
    for i, field in enumerate(self._readable_fields):
      if field.field_name == "disponibility":
        disponibility = self._readable_fields.pop(i)

    ret = func(self, instance)
    self._readable_fields.insert(i, disponibility) # Put disp back

    # Add disponibility representation
    obj = None
    ret["disponibility"] = None

    try:
      type = "job"
      obj = JobSerializer().to_representation(instance.job)
    except models.Job.DoesNotExist:
      try:
        type = "work"
        obj = WorkSerializer().to_representation(instance.work)
      except models.Work.DoesNotExist: # pragma: no cover
        pass

    if obj:
      ret["disponibility"] = {
        "type": type,
        type: obj
      }


    return ret
  return _impl
serializers.py 文件源码 项目:drf_tweaks 作者: ArabellaTech 项目源码 文件源码 阅读 21 收藏 0 点赞 0 评论 0
def __init__(self, field, parent, only_fields, include_fields):
        self.field = field
        self.parent = parent
        self.is_many = isinstance(field, serializers.ListSerializer) and isinstance(field.child, serializers.Serializer)
        self.has_context = isinstance(field, serializers.Serializer) or self.is_many
        if self.has_context:
            self.old_context = None
            self.only_fields = self.filter_fields(field.field_name, only_fields)
            self.include_fields = self.filter_fields(field.field_name, include_fields)
            self.on_exit_delete_fields = False
            self.on_exit_delete_include_fields = False
            self.old_fields = None
            self.old_include_fields = None
stats_serializer.py 文件源码 项目:fieldsight-kobocat 作者: awemulya 项目源码 文件源码 阅读 29 收藏 0 点赞 0 评论 0
def data(self):
        return super(serializers.Serializer, self).data
response.py 文件源码 项目:jianshu-api 作者: strugglingyouth 项目源码 文件源码 阅读 22 收藏 0 点赞 0 评论 0
def __init__(self, data=None, status=None,
                 template_name=None, headers=None,
                 exception=False, content_type=None):
        """
        Alters the init arguments slightly.
        For example, drop 'template_name', and instead use 'data'.

        Setting 'renderer' and 'media_type' will typically be deferred,
        For example being set automatically by the `APIView`.
        """
        super(Response, self).__init__(None, status=status)

        if isinstance(data, Serializer):
            msg = (
                'You passed a Serializer instance as data, but '
                'probably meant to pass serialized `.data` or '
                '`.error`. representation.'
            )
            raise AssertionError(msg)

        self.data = data
        self.template_name = template_name
        self.exception = exception
        self.content_type = content_type

        if headers:
            for name, value in six.iteritems(headers):
                self[name] = value
views.py 文件源码 项目:munch-core 作者: crunchmail 项目源码 文件源码 阅读 22 收藏 0 点赞 0 评论 0
def paginated_response(queryset, serializer_class, request):
    """
    Pagination helper for a @detail route.
    http://stackoverflow.com/a/29144786/1377500

    :type serializer_class: rest_framework.serializers.Serializer
    :rtype:                 rest_framework.response.Response
    """
    paginator = CountedPageNumberPagination()
    page = paginator.paginate_queryset(queryset, request)
    serializer = serializer_class(
        page, many=True, context={'request': request})
    return paginator.get_paginated_response(serializer.data)
test_serializers.py 文件源码 项目:django-chemtrails 作者: inonit 项目源码 文件源码 阅读 26 收藏 0 点赞 0 评论 0
def setUp(self):

        class TestSerializer(serializers.Serializer):
            ctype = ContentTypeIdentityField(queryset=ContentType.objects.all())

        self.Serializer = TestSerializer
        self.ctype = ContentType.objects.get(app_label='auth', model='user')
test_serializers.py 文件源码 项目:django-chemtrails 作者: inonit 项目源码 文件源码 阅读 29 收藏 0 点赞 0 评论 0
def test_serialize_valid_input(self):
        serializer = self.Serializer(data={'ctype': 'auth.user'})
        self.assertTrue(serializer.is_valid())
        self.assertEqual(serializer.validated_data['ctype'], self.ctype)
test_serializers.py 文件源码 项目:django-chemtrails 作者: inonit 项目源码 文件源码 阅读 27 收藏 0 点赞 0 评论 0
def test_serialize_invalid_data_type(self):
        serializer = self.Serializer(data={'ctype': 1})
        self.assertFalse(serializer.is_valid())
        self.assertTrue('ctype' in serializer.errors)

        try:
            serializer.is_valid(raise_exception=True)
            self.fail('Did not raise ValidationError when serializing invalid data type using `raise_exception=True`')
        except serializers.ValidationError as e:
            self.assertEqual(
                str(e), "{'ctype': ['Incorrect type. Expected content type string identifier, received int.']}")
test_serializers.py 文件源码 项目:django-chemtrails 作者: inonit 项目源码 文件源码 阅读 31 收藏 0 点赞 0 评论 0
def test_serialize_invalid_length_content_type_string(self):
        serializer = self.Serializer(data={'ctype': 'auth'})
        self.assertFalse(serializer.is_valid())
        self.assertTrue('ctype' in serializer.errors)

        try:
            serializer.is_valid(raise_exception=True)
            self.fail('Did not raise ValidationError when serializing invalid content '
                      'type string using `raise_exception=True`')
        except serializers.ValidationError as e:
            self.assertEqual(str(e), "{'ctype': ['Incorrect length. Expected content type string, "
                                     "separated by punctuation. Received \"auth\".']}")
test_serializers.py 文件源码 项目:django-chemtrails 作者: inonit 项目源码 文件源码 阅读 25 收藏 0 点赞 0 评论 0
def test_serializer_non_existent_content_type(self):
        serializer = self.Serializer(data={'ctype': 'non.existent'})
        self.assertFalse(serializer.is_valid())
        self.assertTrue('ctype' in serializer.errors)

        try:
            serializer.is_valid(raise_exception=True)
            self.fail('Did not raise exception when serializing non-existent content '
                      'type string using using `raise_exception=True`')
        except serializers.ValidationError as e:
            self.assertEqual(str(e), "{'ctype': ['Invalid content type \"non.existent\" - object does not exist.']}")
test_serializers.py 文件源码 项目:django-chemtrails 作者: inonit 项目源码 文件源码 阅读 24 收藏 0 点赞 0 评论 0
def test_serialize_valid_permission_input(self):
        serializer = self.Serializer(data={'perm': self.perm_string})
        self.assertTrue(serializer.is_valid())
        self.assertEqual(serializer.validated_data['perm'], self.permission)
test_serializers.py 文件源码 项目:django-chemtrails 作者: inonit 项目源码 文件源码 阅读 25 收藏 0 点赞 0 评论 0
def test_serialize_invalid_permission_data_type(self):
        serializer = self.Serializer(data={'perm': 1})
        self.assertFalse(serializer.is_valid())
        self.assertTrue('perm' in serializer.errors)

        try:
            serializer.is_valid(raise_exception=True)
            self.fail('Did not raise ValidationError when serializing invalid data type using `raise_exception=True`')
        except serializers.ValidationError as e:
            self.assertEqual(
                str(e), "{'perm': ['Incorrect type. Expected permission string identifier, received int.']}")
test_serializers.py 文件源码 项目:django-chemtrails 作者: inonit 项目源码 文件源码 阅读 26 收藏 0 点赞 0 评论 0
def test_serialize_invalid_length_permission_string(self):
        serializer = self.Serializer(data={'perm': 'add_user'})
        self.assertFalse(serializer.is_valid())
        self.assertTrue('perm' in serializer.errors)

        try:
            serializer.is_valid(raise_exception=True)
            self.fail('Did not raise ValidationError when serializing invalid permission '
                      'string using `raise_exception=True`')
        except serializers.ValidationError as e:
            self.assertEqual(str(e), "{'perm': ['Incorrect length. Expected permission string identifier, "
                                     "separated by punctuation. Received \"add_user\".']}")
test_serializers.py 文件源码 项目:django-chemtrails 作者: inonit 项目源码 文件源码 阅读 25 收藏 0 点赞 0 评论 0
def test_serializer_non_existent_permission(self):
        serializer = self.Serializer(data={'perm': 'auth.can_levitate'})
        self.assertFalse(serializer.is_valid())
        self.assertTrue('perm' in serializer.errors)

        try:
            serializer.is_valid(raise_exception=True)
            self.fail('Did not raise exception when serializing non-existent permission '
                      'string using using `raise_exception=True`')
        except serializers.ValidationError as e:
            self.assertEqual(str(e), "{'perm': ['Invalid permission \"auth.can_levitate\" "
                                     "- object does not exist.']}")
views.py 文件源码 项目:drf-swagger-missing 作者: tovmeod 项目源码 文件源码 阅读 31 收藏 0 点赞 0 评论 0
def get_serializer_class(self):
        if self.action == 'review':
            return serializers.Serializer
        return super().get_serializer_class()
serializers.py 文件源码 项目:django-rest-witchcraft 作者: shosca 项目源码 文件源码 阅读 23 收藏 0 点赞 0 评论 0
def build_nested_field(self, field_name, info, relationship, nested_depth):
        """
        Builds nested serializer to handle relationshipped model
        """
        target_model = relationship.mapper.class_
        nested_fields = self.get_nested_relationship_fields(target_model, info, relationship, nested_depth)

        field_kwargs = self.get_relationship_kwargs(relationship, nested_depth)
        field_kwargs = self.include_extra_kwargs(field_kwargs, self._extra_kwargs.get(field_name))
        nested_extra_kwargs = {}

        nested_info = model_info(target_model)
        if not field_kwargs.get('required', True):
            for nested_field in nested_info.primary_keys:
                nested_extra_kwargs.setdefault(nested_field, {}).setdefault('required', False)

        if not field_kwargs.get('allow_nested_updates', True):
            nested_depth = 0
            for nested_field in nested_info.properties:
                nested_extra_kwargs.setdefault(nested_field, {}).setdefault('read_only', True)
                nested_extra_kwargs.setdefault(nested_field, {}).pop('required', None)

        class NestedSerializer(ModelSerializer):

            class Meta:
                model = target_model
                session = self.session
                depth = max(0, nested_depth - 1)
                fields = nested_fields
                extra_kwargs = nested_extra_kwargs

        return type(target_model.__name__ + 'Serializer', (NestedSerializer, ), {})(**field_kwargs)
test_dump.py 文件源码 项目:django-returnfields 作者: podhmo 项目源码 文件源码 阅读 23 收藏 0 点赞 0 评论 0
def _makeSerializer(self):
        class CommentSerializer(serializers.Serializer):
            name = serializers.CharField()
            content = serializers.CharField()

        class ArticleSerializer(serializers.Serializer):
            name = serializers.CharField()
            content = serializers.CharField()
            comments = CommentSerializer(many=True)
        return ArticleSerializer
test_dump.py 文件源码 项目:django-returnfields 作者: podhmo 项目源码 文件源码 阅读 30 收藏 0 点赞 0 评论 0
def test_it(self):
        Serializer = self._makeOne(self._makeSerializer())
        article = self._makeArticle()
        result = Serializer(article).data

        expected = '{"name": "hello", "content": "hello world", "comments": [{"name": "title0", "content": "hmm"}, {"name": "title1", "content": "hmm"}, {"name": "title2", "content": "hmm"}]}'  # NOQA
        actual = json.dumps(result)
        self.assertEqual(actual, expected)
test_dump.py 文件源码 项目:django-returnfields 作者: podhmo 项目源码 文件源码 阅读 23 收藏 0 点赞 0 评论 0
def test_it__filtering(self):
        Serializer = self._makeOne(self._makeSerializer())
        article = self._makeArticle()
        request = self._makeDummyRequest({"skip_fields": "content,comments__content"})
        result = Serializer(article, context={"request": request}).data

        expected = '{"name": "hello", "comments": [{"name": "title0"}, {"name": "title1"}, {"name": "title2"}]}'  # NOQA
        actual = json.dumps(result)
        self.assertEqual(actual, expected)
test_dump.py 文件源码 项目:django-returnfields 作者: podhmo 项目源码 文件源码 阅读 22 收藏 0 点赞 0 评论 0
def test_it__filtering__from_list__cached(self):
        Serializer = self._makeOne(self._makeSerializer())

        articles = [self._makeArticle(), self._makeArticle(), self._makeArticle()]
        request = self._makeDummyRequest({"skip_fields": "content,comments__content"})
        result = Serializer(articles, context={"request": request}, many=True).data
        expected = '[{"name": "hello", "comments": [{"name": "title0"}, {"name": "title1"}, {"name": "title2"}]}, {"name": "hello", "comments": [{"name": "title0"}, {"name": "title1"}, {"name": "title2"}]}, {"name": "hello", "comments": [{"name": "title0"}, {"name": "title1"}, {"name": "title2"}]}]'  # NOQA

        actual = json.dumps(result)
        self.assertEqual(actual, expected)
test_drf.py 文件源码 项目:pydantic 作者: samuelcolvin 项目源码 文件源码 阅读 30 收藏 0 点赞 0 评论 0
def __init__(self, allow_extra):
        class Model(serializers.Serializer):
            id = serializers.IntegerField()
            client_name = serializers.CharField(max_length=255)
            sort_index = serializers.FloatField()
            # client_email = serializers.EmailField(required=False, allow_null=True)
            client_phone = serializers.CharField(max_length=255, required=False, allow_null=True)

            class Location(serializers.Serializer):
                latitude = serializers.FloatField(required=False, allow_null=True)
                longitude = serializers.FloatField(required=False, allow_null=True)
            location = Location(required=False, allow_null=True)

            contractor = serializers.IntegerField(required=False, allow_null=True, min_value=0)
            upstream_http_referrer = serializers.CharField(max_length=1023, required=False, allow_null=True)
            grecaptcha_response = serializers.CharField(min_length=20, max_length=1000)
            last_updated = serializers.DateTimeField(required=False, allow_null=True)

            class Skill(serializers.Serializer):
                subject = serializers.CharField()
                subject_id = serializers.IntegerField()
                category = serializers.CharField()
                qual_level = serializers.CharField()
                qual_level_id = serializers.IntegerField()
                qual_level_ranking = serializers.FloatField(default=0)
            skills = serializers.ListField(child=Skill())

        self.allow_extra = allow_extra  # unused
        self.serializer = Model
response.py 文件源码 项目:fog 作者: fogf 项目源码 文件源码 阅读 23 收藏 0 点赞 0 评论 0
def __init__(self, data=None, status=None,
                 template_name=None, headers=None,
                 exception=False, content_type=None,
                 err_code=0, err_msg=''):
        """
        Alters the init arguments slightly.
        For example, drop 'template_name', and instead use 'data'.

        Setting 'renderer' and 'media_type' will typically be deferred,
        For example being set automatically by the `APIView`.
        """
        super(Response, self).__init__(None, status=status)

        if isinstance(data, Serializer):
            msg = (
                'You passed a Serializer instance as data, but '
                'probably meant to pass serialized `.data` or '
                '`.error`. representation.'
            )
            raise AssertionError(msg)

        self.data = data
        self.template_name = template_name
        self.exception = exception
        self.content_type = content_type
        self.wrapper = {
            'code': err_code,
            'message': err_msg,
            'data': self.data
        }

        if headers:
            for name, value in six.iteritems(headers):
                self[name] = value
django_rest.py 文件源码 项目:apimas 作者: grnet 项目源码 文件源码 阅读 21 收藏 0 点赞 0 评论 0
def get_serializers(self):
        """ Get `Serializer`classes for every collection. """
        return self.serializers


问题


面经


文章

微信
公众号

扫码关注公众号