예제 #1
0
class PizzaSerializer(DynamicModelSerializer):
    cost = SerializerMethodField()

    toppings = DynamicRelationField(ToppingSerializer,
                                    many=True,
                                    required=False)
    groups = DynamicRelationField('PizzaGroupSerializer',
                                  many=True,
                                  required=False)
    menu = DynamicRelationField(MenuSerializer, many=False, required=False)

    class Meta:
        model = Pizza
        name = 'pizza'
        fields = (
            'id',
            'name',
            'price',
            'from_date',
            'to_date',
            'cost',
            'toppings',
            'menu',
            'groups',
        )
        defered_fields = (
            'toppings',
            'groups',
            'menu',
        )

    def get_cost(self, obj):
        return obj.toppings.aggregate(cost=Sum('cost'))['cost']
예제 #2
0
class MapLayerDatasetSerializer(ResourceBaseToRepresentationSerializerMixin):
    default_style = DynamicRelationField(StyleSerializer,
                                         embed=True,
                                         many=False,
                                         read_only=True)
    styles = DynamicRelationField(StyleSerializer,
                                  embed=True,
                                  many=True,
                                  read_only=True)
    featureinfo_custom_template = FeatureInfoTemplateField()

    class Meta:
        model = Dataset
        name = "dataset"
        fields = (
            "alternate",
            "featureinfo_custom_template",
            "title",
            "perms",
            "pk",
            "has_time",
            "default_style",
            "styles",
            "ptype",
        )
예제 #3
0
class LayerSerializer(ResourceBaseSerializer):

    def __init__(self, *args, **kwargs):
        # Instantiate the superclass normally
        super(LayerSerializer, self).__init__(*args, **kwargs)

    class Meta:
        model = Layer
        name = 'layer'
        view_name = 'layers-list'
        fields = (
            'pk', 'uuid', 'name', 'workspace', 'store', 'storeType', 'charset',
            'is_mosaic', 'has_time', 'has_elevation', 'time_regex', 'elevation_regex',
            'use_featureinfo_custom_template', 'featureinfo_custom_template',
            'default_style', 'styles', 'attribute_set',
            'ptype', 'ows_url'
        )

    name = serializers.CharField(read_only=True)
    workspace = serializers.CharField(read_only=True)
    store = serializers.CharField(read_only=True)
    storeType = serializers.CharField(read_only=True)
    charset = serializers.CharField(read_only=True)

    default_style = DynamicRelationField(StyleSerializer, embed=True, many=False, read_only=True)
    styles = DynamicRelationField(StyleSerializer, embed=True, many=True, read_only=True)

    attribute_set = DynamicRelationField(AttributeSerializer, embed=True, many=True, read_only=True)
예제 #4
0
class BBSerializer(DynamicModelSerializer):
    b = DynamicRelationField(BSerializer, many=True)
    a = DynamicRelationField(ASerializer, many=False)

    class Meta:
        model = BB
        name = 'bb'
        fields = ('id', 'name', 'b', 'a')
예제 #5
0
class PizzaToppingsSerializer(DynamicModelSerializer):
    class Meta:
        model = Pizza._meta.get_field('toppings').rel.through
        name = 'Pizza_topping'
        fields = ('id', 'pizza', 'topping',)

    topping = DynamicRelationField('ToppingSerializer', many=False, required=False)
    pizza = DynamicRelationField('PizzaSerializer', many=False, required=False)
예제 #6
0
class PizzaGroupSerializer(DynamicModelSerializer):

    pizzas = DynamicRelationField(PizzaSerializer, many=True)

    children = DynamicRelationField('PizzaGroupSerializer', many=True)
    parent = DynamicRelationField('PizzaGroupSerializer', many=False)

    class Meta:
        model = PizzaGroup
        name = 'pizzagroup'
        fields = ('id', 'name', 'pizzas', 'children', 'parent')
예제 #7
0
    def __init__(self, *args, **kwargs):
        # Instantiate the superclass normally
        super(ResourceBaseSerializer, self).__init__(*args, **kwargs)

        self.fields['pk'] = serializers.CharField(read_only=True)
        self.fields['uuid'] = serializers.CharField(read_only=True)
        self.fields['resource_type'] = serializers.CharField(read_only=True)
        self.fields['polymorphic_ctype_id'] = serializers.CharField(read_only=True)
        self.fields['owner'] = DynamicRelationField(UserSerializer, embed=True, many=False, read_only=True)
        self.fields['poc'] = ContactRoleField('poc', read_only=True)
        self.fields['metadata_author'] = ContactRoleField('metadata_author', read_only=True)
        self.fields['title'] = serializers.CharField()
        self.fields['abstract'] = serializers.CharField()
        self.fields['attribution'] = serializers.CharField()
        self.fields['doi'] = serializers.CharField()
        self.fields['alternate'] = serializers.CharField(read_only=True)
        self.fields['date'] = serializers.DateTimeField()
        self.fields['date_type'] = serializers.CharField()
        self.fields['temporal_extent_start'] = serializers.DateTimeField()
        self.fields['temporal_extent_end'] = serializers.DateTimeField()
        self.fields['edition'] = serializers.CharField()
        self.fields['purpose'] = serializers.CharField()
        self.fields['maintenance_frequency'] = serializers.CharField()
        self.fields['constraints_other'] = serializers.CharField()
        self.fields['language'] = serializers.CharField()
        self.fields['supplemental_information'] = serializers.CharField()
        self.fields['data_quality_statement'] = serializers.CharField()
        self.fields['bbox_polygon'] = fields.GeometryField()
        self.fields['srid'] = serializers.CharField()
        self.fields['group'] = DynamicRelationField(GroupSerializer, embed=True, many=False)
        self.fields['popular_count'] = serializers.CharField()
        self.fields['share_count'] = serializers.CharField()
        self.fields['rating'] = serializers.CharField()
        self.fields['featured'] = serializers.BooleanField()
        self.fields['is_published'] = serializers.BooleanField()
        self.fields['is_approved'] = serializers.BooleanField()
        self.fields['detail_url'] = serializers.CharField(read_only=True)
        self.fields['created'] = serializers.DateTimeField(read_only=True)
        self.fields['last_updated'] = serializers.DateTimeField(read_only=True)
        self.fields['raw_abstract'] = serializers.CharField(read_only=True)
        self.fields['raw_purpose'] = serializers.CharField(read_only=True)
        self.fields['raw_constraints_other'] = serializers.CharField(read_only=True)
        self.fields['raw_supplemental_information'] = serializers.CharField(read_only=True)
        self.fields['raw_data_quality_statement'] = serializers.CharField(read_only=True)

        self.fields['embed_url'] = EmbedUrlField()
        self.fields['thumbnail_url'] = ThumbnailUrlField()
        self.fields['keywords'] = DynamicRelationField(
            HierarchicalKeywordSerializer, embed=False, many=True)
        self.fields['regions'] = DynamicRelationField(
            RegionSerializer, embed=True, many=True, read_only=True)
        self.fields['category'] = DynamicRelationField(
            TopicCategorySerializer, embed=True, many=False)
        self.fields['restriction_code_type'] = DynamicRelationField(
            RestrictionCodeTypeSerializer, embed=True, many=False)
        self.fields['license'] = DynamicRelationField(
            LicenseSerializer, embed=True, many=False)
        self.fields['spatial_representation_type'] = DynamicRelationField(
            SpatialRepresentationTypeSerializer, embed=True, many=False)
예제 #8
0
class UploadSerializer(DynamicModelSerializer):
    def __init__(self, *args, **kwargs):
        # Instantiate the superclass normally
        super(UploadSerializer, self).__init__(*args, **kwargs)

        if 'request' in self.context and \
                self.context['request'].query_params.get('full'):
            self.fields['layer'] = DynamicRelationField(LayerSerializer,
                                                        embed=True,
                                                        many=False,
                                                        read_only=True)
            self.fields['session'] = SessionSerializer(source='get_session',
                                                       read_only=True)

    class Meta:
        model = Upload
        name = 'upload'
        fields = ('id', 'name', 'date', 'create_date', 'user', 'state',
                  'progress', 'complete', 'import_id', 'uploadfile_set',
                  'resume_url', 'delete_url', 'import_url', 'detail_url')

    progress = ProgressField(read_only=True)
    resume_url = ProgressUrlField('resume', read_only=True)
    delete_url = ProgressUrlField('delete', read_only=True)
    import_url = ProgressUrlField('import', read_only=True)
    detail_url = ProgressUrlField('detail', read_only=True)
    uploadfile_set = DynamicRelationField(UploadFileSerializer,
                                          embed=True,
                                          many=True,
                                          read_only=True)
예제 #9
0
class ASerializer(DynamicModelSerializer):
    bb = DynamicRelationField('BBSerializer', many=True)

    class Meta:
        model = A
        name = 'a'
        fields = ('id', 'name', 'bb')
예제 #10
0
class AASerializer(DynamicModelSerializer):
    a = DynamicRelationField(ASerializer, many=False)

    class Meta:
        model = AA
        name = 'aa'
        fields = ('id', 'name', 'a')
class QuestionSerializer(DynamicModelSerializer):
    choices = DynamicRelationField('ChoiceSerializer', many=True, required=False)

    class Meta:
        model = Question
        name = 'question'
        fields = ('id', 'question_text', 'pub_date', 'choices')
        deferred_fields = ('choices', )
예제 #12
0
class MenuSerializer(DynamicModelSerializer):
    pizzas = DynamicRelationField('PizzaSerializer', many=True)

    class Meta:
        model = Menu
        name = 'menu'
        fields = ('id', 'code', 'name', 'pizzas')
        deferred_fields = ('pizza_set', )
class ChoiceSerializer(DynamicModelSerializer):
    question = DynamicRelationField(
        QuestionSerializer, many=False, required=False)

    class Meta:
        model = Choice
        name = 'choice'
        fields = ('id', 'choice_text', 'votes', 'question')
        defered_fields = ('question')
예제 #14
0
class ToppingSerializer(DynamicModelSerializer):
    class Meta:
        model = Topping
        name = 'topping'
        fields = ('id', 'name', 'taxed_cost', 'pizzas',)
        defered_fields = ('pizzas',)
    pizzas = DynamicRelationField('PizzaSerializer', many=True, required=False)

    taxed_cost = IntegerField(source='cost')
예제 #15
0
class GroupProfileSerializer(DynamicModelSerializer):

    class Meta:
        model = GroupProfile
        name = 'group_profile'
        fields = ('pk', 'title', 'group', 'slug', 'logo', 'description',
                  'email', 'keywords', 'access', 'categories')

    group = DynamicRelationField(GroupSerializer, embed=True, many=False)
    keywords = serializers.SlugRelatedField(many=True, slug_field='slug', read_only=True)
    categories = serializers.SlugRelatedField(
        many=True, slug_field='slug', queryset=GroupCategory.objects.all())
예제 #16
0
    def __init__(self, *args, **kwargs):
        # Instantiate the superclass normally
        super().__init__(*args, **kwargs)

        if 'request' in self.context and \
                self.context['request'].query_params.get('full'):
            self.fields['resource'] = DynamicRelationField(DatasetSerializer,
                                                           embed=True,
                                                           many=False,
                                                           read_only=True)
            self.fields['session'] = SessionSerializer(source='get_session',
                                                       read_only=True)
예제 #17
0
class MapLayerSerializer(DynamicModelSerializer):
    dataset = DynamicRelationField(MapLayerDatasetSerializer, embed=True)

    class Meta:
        model = MapLayer
        name = "maplayer"
        fields = (
            "pk",
            "extra_params",
            "current_style",
            "dataset",
            "name",
        )
예제 #18
0
class MapSerializer(ResourceBaseSerializer):
    maplayers = DynamicRelationField(MapLayerSerializer,
                                     source="dataset_set",
                                     embed=True,
                                     many=True)

    class Meta:
        model = Map
        name = "map"
        view_name = "maps-list"
        fields = (
            "pk",
            "uuid",
            "zoom",
            "projection",
            "center_x",
            "center_y",
            "urlsuffix",
            "featuredurl",
            "data",
            "maplayers",
        )
예제 #19
0
class ResourceBaseSerializer(
        ResourceBaseToRepresentationSerializerMixin,
        BaseDynamicModelSerializer,
):
    def __init__(self, *args, **kwargs):
        # Instantiate the superclass normally
        super().__init__(*args, **kwargs)

        self.fields['pk'] = serializers.CharField(read_only=True)
        self.fields['uuid'] = serializers.CharField(read_only=True)
        self.fields['resource_type'] = serializers.CharField(required=False)
        self.fields['polymorphic_ctype_id'] = serializers.CharField(
            read_only=True)
        self.fields['owner'] = DynamicRelationField(UserSerializer,
                                                    embed=True,
                                                    many=False,
                                                    read_only=True,
                                                    required=False)
        self.fields['poc'] = ContactRoleField('poc', read_only=True)
        self.fields['metadata_author'] = ContactRoleField('metadata_author',
                                                          read_only=True)
        self.fields['title'] = serializers.CharField()
        self.fields['abstract'] = serializers.CharField(required=False)
        self.fields['attribution'] = serializers.CharField(required=False)
        self.fields['doi'] = serializers.CharField(required=False)
        self.fields['alternate'] = serializers.CharField(read_only=True)
        self.fields['date'] = serializers.DateTimeField(required=False)
        self.fields['date_type'] = serializers.CharField(required=False)
        self.fields['temporal_extent_start'] = serializers.DateTimeField(
            required=False)
        self.fields['temporal_extent_end'] = serializers.DateTimeField(
            required=False)
        self.fields['edition'] = serializers.CharField(required=False)
        self.fields['purpose'] = serializers.CharField(required=False)
        self.fields['maintenance_frequency'] = serializers.CharField(
            required=False)
        self.fields['constraints_other'] = serializers.CharField(
            required=False)
        self.fields['language'] = serializers.CharField(required=False)
        self.fields['supplemental_information'] = serializers.CharField(
            required=False)
        self.fields['data_quality_statement'] = serializers.CharField(
            required=False)
        self.fields['bbox_polygon'] = fields.GeometryField(required=False)
        self.fields['ll_bbox_polygon'] = fields.GeometryField(required=False)
        self.fields['srid'] = serializers.CharField(required=False)
        self.fields['group'] = DynamicRelationField(GroupSerializer,
                                                    embed=True,
                                                    many=False)
        self.fields['popular_count'] = serializers.CharField(required=False)
        self.fields['share_count'] = serializers.CharField(required=False)
        self.fields['rating'] = serializers.CharField(required=False)
        self.fields['featured'] = serializers.BooleanField(required=False)
        self.fields['is_published'] = serializers.BooleanField(required=False)
        self.fields['is_approved'] = serializers.BooleanField(required=False)
        self.fields['detail_url'] = DetailUrlField(read_only=True)
        self.fields['created'] = serializers.DateTimeField(read_only=True)
        self.fields['last_updated'] = serializers.DateTimeField(read_only=True)
        self.fields['raw_abstract'] = serializers.CharField(read_only=True)
        self.fields['raw_purpose'] = serializers.CharField(read_only=True)
        self.fields['raw_constraints_other'] = serializers.CharField(
            read_only=True)
        self.fields['raw_supplemental_information'] = serializers.CharField(
            read_only=True)
        self.fields['raw_data_quality_statement'] = serializers.CharField(
            read_only=True)
        self.fields['metadata_only'] = serializers.BooleanField(required=False)
        self.fields['processed'] = serializers.BooleanField(read_only=True)
        self.fields['state'] = serializers.CharField(read_only=True)
        self.fields['sourcetype'] = serializers.CharField(read_only=True)

        self.fields['embed_url'] = EmbedUrlField(required=False)
        self.fields['thumbnail_url'] = ThumbnailUrlField(read_only=True)
        self.fields['keywords'] = DynamicRelationField(
            SimpleHierarchicalKeywordSerializer, embed=False, many=True)
        self.fields['tkeywords'] = DynamicRelationField(
            SimpleThesaurusKeywordSerializer, embed=False, many=True)
        self.fields['regions'] = DynamicRelationField(SimpleRegionSerializer,
                                                      embed=True,
                                                      many=True,
                                                      read_only=True)
        self.fields['category'] = DynamicRelationField(
            SimpleTopicCategorySerializer, embed=True, many=False)
        self.fields['restriction_code_type'] = DynamicRelationField(
            RestrictionCodeTypeSerializer, embed=True, many=False)
        self.fields['license'] = DynamicRelationField(LicenseSerializer,
                                                      embed=True,
                                                      many=False)
        self.fields['spatial_representation_type'] = DynamicRelationField(
            SpatialRepresentationTypeSerializer, embed=True, many=False)
        self.fields['blob'] = serializers.JSONField(required=False,
                                                    write_only=True)
        self.fields['is_copyable'] = serializers.BooleanField(read_only=True)

        self.fields['download_url'] = DownloadLinkField(read_only=True)

    metadata = DynamicRelationField(ExtraMetadataSerializer,
                                    embed=False,
                                    many=True,
                                    deferred=True)

    class Meta:
        model = ResourceBase
        name = 'resource'
        view_name = 'base-resources-list'
        fields = (
            'pk', 'uuid', 'resource_type', 'polymorphic_ctype_id', 'perms',
            'owner', 'poc', 'metadata_author', 'keywords', 'tkeywords',
            'regions', 'category', 'title', 'abstract', 'attribution',
            'alternate', 'doi', 'bbox_polygon', 'll_bbox_polygon', 'srid',
            'date', 'date_type', 'edition', 'purpose', 'maintenance_frequency',
            'restriction_code_type', 'constraints_other', 'license',
            'language', 'spatial_representation_type', 'temporal_extent_start',
            'temporal_extent_end', 'supplemental_information',
            'data_quality_statement', 'group', 'popular_count', 'share_count',
            'rating', 'featured', 'is_published', 'is_approved', 'detail_url',
            'embed_url', 'created', 'last_updated', 'raw_abstract',
            'raw_purpose', 'raw_constraints_other',
            'raw_supplemental_information', 'raw_data_quality_statement',
            'metadata_only', 'processed', 'state', 'data', 'subtype',
            'sourcetype', 'is_copyable', 'blob', "metadata", 'executions'
            # TODO
            # csw_typename, csw_schema, csw_mdsource, csw_insert_date, csw_type, csw_anytext, csw_wkt_geometry,
            # metadata_uploaded, metadata_uploaded_preserve, metadata_xml,
            # users_geolimits, groups_geolimits
        )
        extra_kwargs = {
            "abstract": {
                "required": False
            },
            "attribution": {
                "required": False
            },
            "doi": {
                "required": False
            },
            "date": {
                "required": False
            },
            "date_type": {
                "required": False
            },
            "temporal_extent_start": {
                "required": False
            },
            "temporal_extent_end": {
                "required": False
            },
            "edition": {
                "required": False
            },
            "purpose": {
                "required": False
            },
            "maintenance_frequency": {
                "required": False
            },
            "constraints_other": {
                "required": False
            },
            "language": {
                "required": False
            },
            "supplemental_information": {
                "required": False
            },
            "data_quality_statement": {
                "required": False
            },
            "bbox_polygon": {
                "required": False
            },
            "ll_bbox_polygon": {
                "required": False
            },
            "srid": {
                "required": False
            },
            "popular_count": {
                "required": False
            },
            "share_count": {
                "required": False
            },
            "rating": {
                "required": False
            },
            "featured": {
                "required": False
            },
            "is_published": {
                "required": False
            },
            "is_approved": {
                "required": False
            },
            "metadata_only": {
                "required": False
            },
            "embed_url": {
                "required": False
            },
            "thumbnail_url": {
                "required": False
            },
            "blob": {
                "required": False,
                "write_only": True
            },
            "executions": {
                "required": False,
                "embed": False,
                "deferred": True,
                "read_only": True
            },
            "owner": {
                "required": False
            },
            "resource_type": {
                "required": False
            },
            "download_url": {
                "required": False
            },
            "is_copyable": {
                "required": False
            },
        }

    def to_internal_value(self, data):
        if isinstance(data, str):
            data = json.loads(data)
        if 'data' in data:
            data['blob'] = data.pop('data')
        data = super(ResourceBaseSerializer, self).to_internal_value(data)
        return data

    """
     - Deferred / not Embedded --> ?include[]=data
    """
    data = DataBlobField(
        DataBlobSerializer,
        source='id',
        many=False,
        embed=False,
        deferred=True,
        required=False,
    )
    """
     - Deferred / not Embedded --> ?include[]=executions
    """
    executions = DynamicRelationField(
        ResourceExecutionRequestSerializer,
        source='id',
        embed=False,
        deferred=True,
        required=False,
        read_only=True,
    )