1 import logging |
1 import logging |
2 |
2 |
3 from django.contrib.auth import get_user_model |
3 from django.contrib.auth import get_user_model |
4 from django.contrib.auth.models import Group |
4 from django.contrib.auth.models import Group |
|
5 from rest_auth.serializers import \ |
|
6 UserDetailsSerializer as RestAuthUserDetailsSerializer |
5 from rest_framework import serializers |
7 from rest_framework import serializers |
|
8 |
|
9 from notes.api.fields.category import ProtocolField |
6 |
10 |
7 logger = logging.getLogger(__name__) |
11 logger = logging.getLogger(__name__) |
8 |
12 |
9 User = get_user_model() |
13 User = get_user_model() |
10 |
14 |
11 class GroupSerializer(serializers.ModelSerializer): |
15 class GroupSerializer(serializers.ModelSerializer): |
12 owner = serializers.CharField(source='profile.owner.username', read_only=True) |
16 owner = serializers.CharField(source='profile.owner.username', read_only=True) |
13 is_personal = serializers.BooleanField(source='profile.is_personal', read_only=True) |
17 is_personal = serializers.BooleanField(source='profile.is_personal', read_only=True) |
14 description = serializers.CharField(source='profile.description') |
18 description = serializers.CharField(source='profile.description') |
|
19 protocol = ProtocolField(read_only=True, source='profile.protocol') |
15 |
20 |
16 class Meta: |
21 class Meta: |
17 model = Group |
22 model = Group |
18 fields = ['name', 'owner', 'is_personal', 'description'] |
23 fields = ['name', 'owner', 'is_personal', 'description', 'protocol'] |
19 |
24 |
20 |
25 |
21 class DetailGroupSerializer(GroupSerializer): |
26 class DetailGroupSerializer(GroupSerializer): |
22 users = serializers.SlugRelatedField( |
27 users = serializers.SlugRelatedField( |
23 many=True, |
28 many=True, |
26 source='user_set' |
31 source='user_set' |
27 ) |
32 ) |
28 |
33 |
29 class Meta: |
34 class Meta: |
30 model = Group |
35 model = Group |
31 fields = ['name', 'owner', 'description', 'users', 'is_personal'] |
36 fields = ['name', 'owner', 'description', 'users', 'is_personal', 'protocol'] |
32 |
37 |
33 |
38 |
34 class WriteGroupSerializer(serializers.ModelSerializer): |
39 class WriteGroupSerializer(serializers.ModelSerializer): |
35 ''' |
40 ''' |
36 Serializers for writing groups. |
41 Serializers for writing groups. |
42 slug_field='username', |
47 slug_field='username', |
43 source='user_set', |
48 source='user_set', |
44 queryset=User.objects.all(), |
49 queryset=User.objects.all(), |
45 default=[] |
50 default=[] |
46 ) |
51 ) |
|
52 protocol = ProtocolField(required=False, source='profile.protocol') |
47 |
53 |
48 class Meta: |
54 class Meta: |
49 model = Group |
55 model = Group |
50 fields = ['name', 'description', 'users'] |
56 fields = ['name', 'description', 'users', 'protocol'] |
51 |
57 |
52 |
58 |
53 def create(self, validated_data): |
59 def create(self, validated_data): |
54 profile_data = validated_data.pop('profile', None) |
60 profile_data = validated_data.pop('profile', None) |
55 |
61 |
56 group = super().create(validated_data) |
62 group = super().create(validated_data) |
57 |
63 |
58 if profile_data is not None: |
64 if profile_data is not None and profile_data.get('description', None) is not None: |
59 group.profile.description = profile_data.get('description') |
65 group.profile.description = profile_data.get('description') |
60 |
66 |
61 user = None |
67 user = None |
62 request = self.context.get("request") |
68 request = self.context.get("request") |
63 if request and hasattr(request, "user"): |
69 if request and hasattr(request, "user"): |
71 |
77 |
72 def update(self, instance, validated_data): |
78 def update(self, instance, validated_data): |
73 profile_data = validated_data.pop('profile', None) |
79 profile_data = validated_data.pop('profile', None) |
74 group = super().update(instance, validated_data) |
80 group = super().update(instance, validated_data) |
75 |
81 |
76 if profile_data is not None: |
82 logger.debug("WriteGroupSerializer.update %r", profile_data) |
|
83 if profile_data is not None and profile_data.get('description', None) is not None: |
77 group.profile.description = profile_data.get('description') |
84 group.profile.description = profile_data.get('description') |
78 group.profile.save() |
85 group.profile.save() |
79 |
86 |
80 # check that owner is still in user list |
87 # check that owner is still in user list |
81 if group.profile.owner and group.profile.owner not in group.user_set.all(): |
88 if group.profile.owner and group.profile.owner not in group.user_set.all(): |
82 group.user_set.add(group.profile.owner) |
89 group.user_set.add(group.profile.owner) |
83 |
90 |
84 return group |
91 return group |
|
92 |
|
93 |
|
94 class UserDetailsSerializer(RestAuthUserDetailsSerializer): |
|
95 default_group = serializers.SlugRelatedField(read_only=True, slug_field='name', source='profile.default_group') |
|
96 |
|
97 class Meta(RestAuthUserDetailsSerializer.Meta): |
|
98 fields = ('pk', 'username', 'email', 'first_name', 'last_name', 'default_group') |
|
99 read_only_fields = ('email', 'default_group') |