|
| 1 | +from django.conf import settings |
1 | 2 | from django.contrib.auth import get_user_model
|
| 3 | +from django.shortcuts import get_object_or_404 |
2 | 4 | from rest_framework import serializers
|
3 | 5 | from rest_polymorphic.serializers import PolymorphicSerializer
|
4 | 6 | from rest_framework.exceptions import ValidationError
|
@@ -77,39 +79,56 @@ class Meta:
|
77 | 79 |
|
78 | 80 |
|
79 | 81 | class ProjectSerializer(serializers.ModelSerializer):
|
| 82 | + current_users_role = serializers.SerializerMethodField() |
| 83 | + |
| 84 | + def get_current_users_role(self, instance): |
| 85 | + role_abstractor = { |
| 86 | + "is_project_admin": settings.ROLE_PROJECT_ADMIN, |
| 87 | + "is_annotator": settings.ROLE_ANNOTATOR, |
| 88 | + "is_annotation_approver": settings.ROLE_ANNOTATION_APPROVER, |
| 89 | + } |
| 90 | + queryset = RoleMapping.objects.values("role_id__name") |
| 91 | + if queryset: |
| 92 | + users_role = get_object_or_404( |
| 93 | + queryset, project=instance.id, user=self.context.get("request").user.id |
| 94 | + ) |
| 95 | + for key, val in role_abstractor.items(): |
| 96 | + role_abstractor[key] = users_role["role_id__name"] == val |
| 97 | + return role_abstractor |
80 | 98 |
|
81 | 99 | class Meta:
|
82 | 100 | model = Project
|
83 |
| - fields = ('id', 'name', 'description', 'guideline', 'users', 'project_type', 'image', 'updated_at', |
84 |
| - 'randomize_document_order', 'collaborative_annotation') |
85 |
| - read_only_fields = ('image', 'updated_at') |
| 101 | + fields = ('id', 'name', 'description', 'guideline', 'users', 'current_users_role', 'project_type', 'image', |
| 102 | + 'updated_at', 'randomize_document_order', 'collaborative_annotation') |
| 103 | + read_only_fields = ('image', 'updated_at', 'current_users_role') |
86 | 104 |
|
87 | 105 |
|
88 |
| -class TextClassificationProjectSerializer(serializers.ModelSerializer): |
| 106 | +class TextClassificationProjectSerializer(ProjectSerializer): |
89 | 107 |
|
90 | 108 | class Meta:
|
91 | 109 | model = TextClassificationProject
|
92 |
| - fields = ('id', 'name', 'description', 'guideline', 'users', 'project_type', 'image', 'updated_at', |
93 |
| - 'randomize_document_order') |
94 |
| - read_only_fields = ('image', 'updated_at', 'users') |
| 110 | + fields = ('id', 'name', 'description', 'guideline', 'users', 'current_users_role', 'project_type', 'image', |
| 111 | + 'updated_at', 'randomize_document_order') |
| 112 | + read_only_fields = ('image', 'updated_at', 'users', 'current_users_role') |
95 | 113 |
|
96 | 114 |
|
97 |
| -class SequenceLabelingProjectSerializer(serializers.ModelSerializer): |
| 115 | +class SequenceLabelingProjectSerializer(ProjectSerializer): |
| 116 | + |
98 | 117 |
|
99 | 118 | class Meta:
|
100 | 119 | model = SequenceLabelingProject
|
101 |
| - fields = ('id', 'name', 'description', 'guideline', 'users', 'project_type', 'image', 'updated_at', |
102 |
| - 'randomize_document_order') |
103 |
| - read_only_fields = ('image', 'updated_at', 'users') |
| 120 | + fields = ('id', 'name', 'description', 'guideline', 'users', 'current_users_role', 'project_type', 'image', |
| 121 | + 'updated_at', 'randomize_document_order') |
| 122 | + read_only_fields = ('image', 'updated_at', 'users', 'current_users_role') |
104 | 123 |
|
105 | 124 |
|
106 |
| -class Seq2seqProjectSerializer(serializers.ModelSerializer): |
| 125 | +class Seq2seqProjectSerializer(ProjectSerializer): |
107 | 126 |
|
108 | 127 | class Meta:
|
109 | 128 | model = Seq2seqProject
|
110 |
| - fields = ('id', 'name', 'description', 'guideline', 'users', 'project_type', 'image', 'updated_at', |
111 |
| - 'randomize_document_order') |
112 |
| - read_only_fields = ('image', 'updated_at', 'users') |
| 129 | + fields = ('id', 'name', 'description', 'guideline', 'users', 'current_users_role', 'project_type', 'image', |
| 130 | + 'updated_at', 'randomize_document_order') |
| 131 | + read_only_fields = ('image', 'updated_at', 'users', 'current_users_role') |
113 | 132 |
|
114 | 133 |
|
115 | 134 | class ProjectPolymorphicSerializer(PolymorphicSerializer):
|
|
0 commit comments