Skip to content

data_catalog_serializer#

GetOrCreateGroupField#

Bases: SlugRelatedField

Group serializer field that creates Group if it does not exist.

Source code in src/apps/core/serializers/data_catalog_serializer.py
class GetOrCreateGroupField(serializers.SlugRelatedField):
    """Group serializer field that creates Group if it does not exist."""

    def __init__(self, **kwargs):
        kwargs["slug_field"] = "name"
        kwargs["queryset"] = Group.objects.all()
        super().__init__(**kwargs)

    def to_internal_value(self, data):
        queryset = self.get_queryset()
        try:
            group, created = queryset.get_or_create(**{self.slug_field: data})
            return group
        except (TypeError, ValueError):
            self.fail("invalid")

DataCatalogModelSerializer#

Bases: CommonNestedModelSerializer

Source code in src/apps/core/serializers/data_catalog_serializer.py
class DataCatalogModelSerializer(CommonNestedModelSerializer):
    publisher = DatasetPublisherModelSerializer(required=False)
    language = Language.get_serializer_field(required=False, many=True)
    dataset_groups_create = GetOrCreateGroupField(required=False, many=True)
    dataset_groups_admin = GetOrCreateGroupField(required=False, many=True)

    class Meta:
        model = DataCatalog
        fields = (
            "id",
            "description",
            "publisher",
            "logo",
            "language",
            "title",
            "dataset_versioning_enabled",
            "harvested",
            "dataset_groups_create",
            "dataset_groups_admin",
            "allow_remote_resources",
            "storage_services",
        )