def test_serialization():
    from django.core.serializers.python import Serializer as PythonSerializer
    m = MyModel(color=MyModel.Color.RED, taste=MyModel.Taste.SALTY)
    ser = PythonSerializer()
    ser.serialize([m])
    fields = ser.getvalue()[0]["fields"]
    assert fields["color"] == m.color.value
    assert fields["taste"] == m.taste.value
Пример #2
0
def test_serialization():
    from django.core.serializers.python import Serializer as PythonSerializer
    m = MyModel(color=Color.RED, taste=Taste.SALTY)
    ser = PythonSerializer()
    ser.serialize([m])
    fields = ser.getvalue()[0]["fields"]
    assert fields["color"] == m.color.value
    assert fields["taste"] == m.taste.value
Пример #3
0
def get_dump_object(self, obj):
    """
    Serializer patch method to get access to model instance.
    Triggers instance media dump by sending the `pre_dump` signal.
    """
    pre_dump.send(sender=type(obj), instance=obj)
    return Serializer.get_dump_object(self, obj)
Пример #4
0
    def serialize(self, obj, fields):
        """
        Serializes a single model instance to a Python dict, based on the specified list of fields.
        """

        data = {}
        remaining_fields = []
        for field in fields:
            if callable(field):  # Callable
                data[field.__name__] = field(obj)
            elif hasattr(self, field) and callable(getattr(
                    self, field)):  # Method on the view
                data[field] = getattr(self, field)(obj)
            elif hasattr(obj, field):  # Callable/property/field on the model
                attr = getattr(obj, field)
                if isinstance(attr, Model):
                    data[field] = attr.pk
                elif isinstance(attr, Manager):
                    data[field] = [item['pk'] for item in attr.values('pk')]
                elif callable(attr):  # Callable on the model
                    data[field] = attr()
                else:
                    remaining_fields.append(field)
            else:
                raise AttributeError('Invalid field: %s' % field)

        # Add on db fields
        serializer = Serializer()
        serializer.serialize([obj], fields=list(remaining_fields))
        data.update(serializer.getvalue()[0]['fields'])

        # Any remaining fields should be properties on the model
        remaining_fields = set(remaining_fields) - set(data.keys())

        for field in remaining_fields:
            data[field] = getattr(obj, field)

        return data
Пример #5
0
    def serialize(self, obj, fields):
        """
        Serializes a single model instance to a Python dict, based on the specified list of fields.
        """

        data = {}
        remaining_fields = []
        for field in fields:
            if callable(field):  # Callable
                data[field.__name__] = field(obj)
            elif hasattr(self, field) and callable(getattr(self, field)):  # Method on the view
                data[field] = getattr(self, field)(obj)
            elif hasattr(obj, field):  # Callable/property/field on the model
                attr = getattr(obj, field)
                if isinstance(attr, Model):
                    data[field] = attr.pk
                elif isinstance(attr, Manager):
                    data[field] = [item['pk'] for item in attr.values('pk')]
                elif callable(attr):  # Callable on the model
                    data[field] = attr()
                else:
                    remaining_fields.append(field)
            else:
                raise AttributeError('Invalid field: %s' % field)

        # Add on db fields
        serializer = Serializer()
        serializer.serialize([obj], fields=list(remaining_fields))
        data.update(serializer.getvalue()[0]['fields'])

        # Any remaining fields should be properties on the model
        remaining_fields = set(remaining_fields) - set(data.keys())

        for field in remaining_fields:
            data[field] = getattr(obj, field)

        return data
Пример #6
0
from collections import Iterable

from typing import Sequence
from uuid import uuid4

from django.core.serializers.python import Serializer, Deserializer
from django.core.exceptions import ObjectDoesNotExist
from django.http import Http404
from django.db.models import Model
from django.shortcuts import get_object_or_404

from django_shift.resources import APIResource

from django.db import models

serializer = Serializer()

DJANGO_FIELD_TO_CERBERUS = {
    'default': 'string',
    models.BooleanField: 'boolean'
}


class APIModelResource(APIResource):
    model = None  # type: Model
    fields = None  # type: Sequence[str]

    def __init__(self, *args, **kwargs):
        super(APIModelResource, self).__init__(*args, **kwargs)
        if not self.pk_field:
            self.pk_field = self.model._meta.pk.name
Пример #7
0
 def start_serialization(self):
     self.options.pop('stream', None)
     self.options.pop('fields', None)
     PythonSerializer.start_serialization(self)
Пример #8
0
 def start_serialization(self):
     self.options.pop('stream', None)
     self.options.pop('fields', None)
     PythonSerializer.start_serialization(self)