Esempio n. 1
0
class ResourceNestedSerializer(BasePKSerializer):
    """Serializer for :class:`apps.storage.models.Resource` used within other
    serializers that are connected (mostly through fk) to
    :class:`apps.storage.models.Resource` model instances"""
    class Meta:
        model = Resource
        fields = ('name', 'owner', 'url')

    owner = PrettyUserField()
    url = serializers.ReadOnlyField(source='get_absolute_url')
Esempio n. 2
0
class ClassificatorSerializer(BasePKSerializer):
    """Serializer for
    :class:`apps.media_classification.models.Classificator`
    Serializer contains urls for details/delete/update classificator if user
    has enough permissions
    """
    class Meta:
        model = Classificator
        fields = (
            'pk',
            'name',
            'owner',
            'owner_profile',
            'updated_date',
            'predefined_attrs',
            'static_attrs_order',
            'custom_attrs',
            'dynamic_attrs_order',
            'description',
            'classification_projects',

            # data for action columns
            'update_data',
            'detail_data',
            'delete_data',
        )

    owner = PrettyUserField()
    owner_profile = serializers.SerializerMethodField()
    classification_projects = serializers.ReadOnlyField(
        source='classification_projects.all.name')

    update_data = serializers.SerializerMethodField()
    detail_data = serializers.SerializerMethodField()
    delete_data = serializers.SerializerMethodField()

    def get_owner_profile(self, item):
        """Custom method for retrieving profile url"""
        return reverse('accounts:show_profile',
                       kwargs={'username': item.owner.username})

    def get_update_data(self, item):
        """Custom method for retrieving update url"""
        return Classificator.objects.api_update_context(
            item=item, user=self.context['request'].user)

    def get_detail_data(self, item):
        """Custom method for retrieving detail url"""
        return Classificator.objects.api_detail_context(
            item=item, user=self.context['request'].user)

    def get_delete_data(self, item):
        """Custom method for retrieving delete url"""
        return Classificator.objects.api_delete_context(
            item=item, user=self.context['request'].user)
Esempio n. 3
0
class DeploymentSerializer(BasePKSerializer):
    class Meta:
        model = Deployment
        fields = (
            'pk',
            'deployment_code',
            'deployment_id',
            'location',
            'location_id',
            'start_date',
            'end_date',
            'owner',
            'owner_profile',
            'research_project',
            'tags',
            'correct_setup',
            'correct_tstamp',

            # data for action columns
            'detail_data',
            'update_data',
            'delete_data')

    owner = PrettyUserField()
    location_id = serializers.ReadOnlyField(source='location.location_id')
    start_date = serializers.ReadOnlyField(source='start_date_tz')
    end_date = serializers.ReadOnlyField(source='end_date_tz')
    research_project = serializers.ReadOnlyField(
        source='research_project.acronym')
    tags = serializers.SerializerMethodField()
    owner_profile = serializers.SerializerMethodField()
    detail_data = serializers.SerializerMethodField()
    update_data = serializers.SerializerMethodField()
    delete_data = serializers.SerializerMethodField()

    def get_owner_profile(self, item):
        return reverse('accounts:show_profile',
                       kwargs={'username': item.owner.username})

    def get_tags(self, obj):
        """Custom method for retrieving depoyment tags"""
        return [k.name for k in obj.tags.all()]

    def get_detail_data(self, item):
        return Deployment.objects.api_detail_context(
            item=item, user=self.context['request'].user)

    def get_update_data(self, item):
        return Deployment.objects.api_update_context(
            item=item, user=self.context['request'].user)

    def get_delete_data(self, item):
        return Deployment.objects.api_delete_context(
            item=item, user=self.context['request'].user)
Esempio n. 4
0
class CollectionSerializer(BasePKSerializer):
    """Serializer for :class:`storage.Collection`

    Serializer contains urls for details/delete/update collection if user
    has enough permissions
    """
    class Meta:
        model = Collection
        fields = (
            'pk',
            'name',
            'owner',
            'owner_profile',
            'status',
            'description',
            'update_data',
            'detail_data',
            'delete_data',
            'ask_access_data',
        )

    owner = PrettyUserField()
    owner_profile = serializers.SerializerMethodField()

    update_data = serializers.SerializerMethodField()
    detail_data = serializers.SerializerMethodField()
    delete_data = serializers.SerializerMethodField()
    ask_access_data = serializers.SerializerMethodField()

    def get_owner_profile(self, item):
        """Custom method for retrieving profile url"""
        return reverse('accounts:show_profile',
                       kwargs={'username': item.owner.username})

    def get_update_data(self, item):
        """Custom method for retrieving update url"""
        return Collection.objects.api_update_context(
            item=item, user=self.context['request'].user)

    def get_detail_data(self, item):
        """Custom method for retrieving detail url"""
        return Collection.objects.api_detail_context(
            item=item, user=self.context['request'].user)

    def get_delete_data(self, item):
        """Custom method for retrieving delete url"""
        return Collection.objects.api_delete_context(
            item=item, user=self.context['request'].user)

    def get_ask_access_data(self, item):
        """Custom method for retrieving collection request url"""
        return Collection.objects.api_ask_access_context(
            item=item, user=self.context['request'].user)
Esempio n. 5
0
class MapSerializer(BasePKSerializer):
    class Meta:
        model = Map
        fields = (
            'pk',
            'slug',
            'description',
            'center',
            'zoom',
            'locate',
            'licence',
            'modified_at',
            'tilelayer',
            'owner',
            'owner_profile',
            'edit_status',
            'share_status',
            'settings',
            'delete_data',
            'detail_data',
        )

    owner = PrettyUserField()
    owner_profile = serializers.SerializerMethodField()
    licence = serializers.ReadOnlyField(source='licence.name')
    edit_status = serializers.ReadOnlyField(source='get_edit_status_display')
    share_status = serializers.ReadOnlyField(source='get_share_status_display')
    tilelayer = serializers.ReadOnlyField(source='tilelayer.url_template')

    delete_data = serializers.SerializerMethodField()
    detail_data = serializers.SerializerMethodField()

    def get_delete_data(self, item):
        user = self.context['request'].user
        if item.owner == user:
            return reverse('geomap:map_delete', kwargs={'pk': item.pk})

    def get_detail_data(self, item):
        user = self.context['request'].user
        if item.owner == user or user in item.editors.all():
            return reverse('geomap:map',
                           kwargs={
                               'pk': item.pk,
                               'slug': item.slug
                           })

    def get_owner_profile(self, item):
        return reverse('accounts:show_profile',
                       kwargs={'username': item.owner.username})
Esempio n. 6
0
class LocationSerializer(BasePKSerializer):
    class Meta:
        model = Location
        fields = (
            'pk',
            'name',
            'date_created',
            'description',
            'location_id',
            'is_public',
            'coordinates',
            'owner',
            'owner_profile',
            'city',
            'county',
            'state',
            'country',
            'research_project',
            'timezone',

            # data for action columns
            'update_data',
            'delete_data',
        )

    owner = PrettyUserField()
    research_project = serializers.ReadOnlyField(
        source='research_project.acronym')
    timezone = serializers.ReadOnlyField(source='timezone.__str__')
    owner_profile = serializers.SerializerMethodField()
    update_data = serializers.SerializerMethodField()
    delete_data = serializers.SerializerMethodField()
    coordinates = serializers.SerializerMethodField()

    def get_coordinates(self, item):
        return '{}, {}'.format(round(item.get_x, 5), round(item.get_y, 5))

    def get_owner_profile(self, item):
        return reverse('accounts:show_profile',
                       kwargs={'username': item.owner.username})

    def get_update_data(self, item):
        return Location.objects.api_update_context(
            item=item, user=self.context['request'].user)

    def get_delete_data(self, item):
        return Location.objects.api_delete_context(
            item=item, user=self.context['request'].user)
Esempio n. 7
0
class ResearchProjectCollectionSerializer(BasePKSerializer):
    """Serializer for :class:`apps.storage.models.ResearchProjectCollection`
    Serializer contains urls for details/delete project collections if user
    has enough permissions
    """
    class Meta:
        model = ResearchProjectCollection
        fields = (
            'pk',
            'collection_pk',
            'name',
            'owner',
            'owner_profile',
            'status',
            'date_created',
            'description',
            'detail_data',
            'delete_data',
        )

    name = serializers.ReadOnlyField(source='collection.name')
    collection_pk = serializers.ReadOnlyField(source='collection.pk')
    status = serializers.ReadOnlyField(source='collection.status')
    date_created = serializers.ReadOnlyField(source='collection.date_created')
    description = serializers.ReadOnlyField(source='collection.description')
    owner = PrettyUserField(source='collection.owner')
    owner_profile = serializers.SerializerMethodField()
    detail_data = serializers.SerializerMethodField()
    delete_data = serializers.SerializerMethodField()

    def get_owner_profile(self, item):
        """Custom method for retrieving profile url"""
        return reverse('accounts:show_profile',
                       kwargs={'username': item.collection.owner.username})

    def get_detail_data(self, item):
        """Custom method for retrieving detail url"""
        return Collection.objects.api_detail_context(
            item=item.collection, user=self.context['request'].user)

    def get_delete_data(self, item):
        """Custom method for retrieving delete url"""
        return ResearchProjectCollection.objects.api_delete_context(
            item=item, user=self.context['request'].user)
Esempio n. 8
0
class ResearchProjectSerializer(BasePKSerializer):
    """Serializer for :class:`apps.research.models.ResearchProject`
    Serializer contains urls for details/delete/update project if user
    has enough permissions
    """
    class Meta:
        model = ResearchProject
        fields = (
            'pk',
            'name',
            'owner',
            'owner_profile',
            'acronym',
            'keywords',
            'date_created',
            'project_roles',
            'update_data',
            'detail_data',
            'delete_data',
            'status',
        )

    project_roles = serializers.SerializerMethodField('get_roles')
    keywords = serializers.SerializerMethodField()

    owner = PrettyUserField()
    owner_profile = serializers.SerializerMethodField()

    update_data = serializers.SerializerMethodField()
    detail_data = serializers.SerializerMethodField()
    delete_data = serializers.SerializerMethodField()

    def get_owner_profile(self, item):
        """Custom method for retrieving profile url"""
        return reverse('accounts:show_profile',
                       kwargs={'username': item.owner.username})

    def get_update_data(self, item):
        """Custom method for retrieving update url"""
        return ResearchProject.objects.api_update_context(
            item=item, user=self.context['request'].user)

    def get_detail_data(self, item):
        """Custom method for retrieving detail url"""
        return ResearchProject.objects.api_detail_context(
            item=item, user=self.context['request'].user)

    def get_delete_data(self, item):
        """Custom method for retrieving delete url"""
        return ResearchProject.objects.api_delete_context(
            item=item, user=self.context['request'].user)

    def get_roles(self, item):
        roles_list = []
        for user, role_list in item.get_roles().items():
            roles = [role.get_name_display() for role in role_list]
            roles.sort()
            roles_list.append({
                'user':
                get_pretty_username(user=user),
                'profile':
                reverse('accounts:show_profile',
                        kwargs={'username': user.username}),
                'roles':
                roles
            })
        roles_list.sort(key=lambda x: x['user'])
        return roles_list

    def get_keywords(self, obj):
        """Custom method for retrieving project keywords"""
        return [k.name for k in obj.keywords.all()]
Esempio n. 9
0
class ResourceSerializer(BasePKSerializer):
    """Serializer for :class:`apps.storage.models.Resource`
    Serializer contains urls for details/delete/update resource if user
    has enough permissions
    """
    class Meta:
        model = Resource
        fields = (
            'pk',
            'name',
            'owner',
            'owner_profile',
            'resource_type',
            'date_recorded',
            'tags',
            'url',
            'mime',
            'extra_url',
            'extra_mime',
            'thumbnail_url',

            # data for action columns
            'update_data',
            'detail_data',
            'delete_data',
            'date_recorded_correct')

    name = serializers.ReadOnlyField(source='prefixed_name')
    date_recorded = serializers.ReadOnlyField(source='date_recorded_tz')
    owner = PrettyUserField()
    owner_profile = serializers.SerializerMethodField('get_profile')
    url = serializers.ReadOnlyField(source='get_url')
    mime = serializers.ReadOnlyField(source='mime_type')
    extra_url = serializers.ReadOnlyField(source='get_extra_url')
    extra_mime = serializers.ReadOnlyField(source='extra_mime_type')
    thumbnail_url = serializers.ReadOnlyField(source='get_thumbnail_url')

    tags = serializers.SerializerMethodField()

    update_data = serializers.SerializerMethodField()
    detail_data = serializers.SerializerMethodField()
    delete_data = serializers.SerializerMethodField()
    date_recorded_correct = serializers.ReadOnlyField(
        source='check_date_recorded')

    def get_profile(self, item):
        """Custom method for retrieving profile url"""
        return reverse('accounts:show_profile',
                       kwargs={'username': item.owner.username})

    def get_update_data(self, item):
        """Custom method for retrieving update url"""
        return Resource.objects.api_update_context(
            item=item, user=self.context['request'].user)

    def get_detail_data(self, item):
        """Custom method for retrieving detail url"""
        return Resource.objects.api_detail_context(
            item=item, user=self.context['request'].user)

    def get_delete_data(self, item):
        """Custom method for retrieving delete url"""
        return Resource.objects.api_delete_context(
            item=item, user=self.context['request'].user)

    def get_tags(self, obj):
        """Custom method for retrieving resource tags"""
        if not getattr(self, 'tags_dict', None):
            pks = [k.pk for k in self.instance]
            tags_values = TaggedResource.objects.filter(
                content_object__pk__in=pks).values_list(
                    'content_object__pk', 'tag__name')
            self.tags_dict = {
                k: list(x[1] for x in v)
                for k, v in itertools.groupby(sorted(tags_values),
                                              key=lambda x: x[0])
            }
        tags = self.tags_dict.get(obj.pk)
        return tags
Esempio n. 10
0
class ClassificationProjectSerializer(BasePKSerializer):
    """Serializer for
    :class:`apps.media_classification.models.ClassificationProject`
    Serializer contains urls for details/delete/update classification project
    if user has enough permissions
    """
    class Meta:
        model = ClassificationProject
        fields = (
            'pk',
            'name',
            'owner',
            'owner_profile',
            'classificator',
            'research_project',
            'status',
            'is_active',
            'project_roles',
            'classificator_removed',
            # data for action columns
            'update_data',
            'detail_data',
            'delete_data',
        )

    owner = PrettyUserField()
    owner_profile = serializers.SerializerMethodField()
    research_project = serializers.ReadOnlyField(
        source="research_project.name")
    status = serializers.ReadOnlyField(source='get_status_display')
    classificator_removed = serializers.ReadOnlyField()
    is_active = serializers.ReadOnlyField()
    project_roles = serializers.SerializerMethodField('get_roles')

    update_data = serializers.SerializerMethodField()
    detail_data = serializers.SerializerMethodField()
    delete_data = serializers.SerializerMethodField()

    def get_owner_profile(self, item):
        """Custom method for retrieving profile url"""
        return reverse('accounts:show_profile',
                       kwargs={'username': item.owner.username})

    def get_update_data(self, item):
        """Custom method for retrieving update url"""
        return ClassificationProject.objects.api_update_context(
            item=item, user=self.context['request'].user)

    def get_detail_data(self, item):
        """Custom method for retrieving detail url"""
        return ClassificationProject.objects.api_detail_context(
            item=item, user=self.context['request'].user)

    def get_delete_data(self, item):
        """Custom method for retrieving delete url"""
        return ClassificationProject.objects.api_delete_context(
            item=item, user=self.context['request'].user)

    def get_roles(self, item):
        """Custom method for retrieving list of roles connected to given
        classification project. Each role contain:

        * user (prettified version)
        * profile url
        * list of role names that user has in project
        """
        roles_list = []
        for user, role_list in item.get_roles().items():
            roles = [role.get_name_display() for role in role_list]
            roles.sort()
            roles_list.append({
                'user':
                get_pretty_username(user=user),
                'profile':
                reverse('accounts:show_profile',
                        kwargs={'username': user.username}),
                'roles':
                roles
            })
        roles_list.sort(key=lambda x: x['user'])
        return roles_list
Esempio n. 11
0
class UserClassificationSerializer(BasePKSerializer):
    """Serializer for
    :class:`apps.media_classification.models.UserClassification`
    Serializer contains urls for details/delete user classification
    if user has enough permissions
    """
    class Meta:
        model = UserClassification
        fields = (
            'pk',
            'owner',
            'owner_profile',
            'classification',
            'resource',
            'collection',
            'updated_at',
            'approved',
            'created_at',
            'static_attrs',
            'dynamic_attrs',

            # data for action columns
            'detail_data',  #'delete_data',
        )

    owner = PrettyUserField()
    owner_profile = serializers.SerializerMethodField()
    resource = ResourceNestedSerializer(source='classification.resource')
    collection = serializers.ReadOnlyField(
        source='classification.collection_id')
    approved = serializers.SerializerMethodField()
    dynamic_attrs = serializers.SerializerMethodField()
    detail_data = serializers.SerializerMethodField()

    #delete_data = serializers.SerializerMethodField()

    def get_dynamic_attrs(self, item):
        """Custom method for retrieving dynamic attributes connected to given
        classification"""
        dynamic_attrs = item.dynamic_attrs.all()
        return_list = []
        for row in dynamic_attrs:
            return_list.append(row.attrs)
        return return_list

    def get_owner_profile(self, item):
        """Custom method for retrieving profile url"""
        return reverse('accounts:show_profile',
                       kwargs={'username': item.owner.username})

    def get_detail_data(self, item):
        """Custom method for retrieving detail url"""
        return UserClassification.objects.api_detail_context(
            item=item, user=self.context['request'].user)

    # def get_delete_data(self, item):
    #     """Custom method for retrieving delete url"""
    #     return UserClassification.objects.api_delete_context(
    #         item=item,
    #         user=self.context['request'].user
    #     )

    def get_approved(self, item):
        return item.classification.approved_source_id == item.pk