Completed
Push — master ( ebb95c...951ec2 )
by Camille
01:25
created

BasicUserWithPermsSerializer.create()   A

Complexity

Conditions 4

Size

Total Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 20

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 15
c 1
b 0
f 0
rs 9.2
ccs 0
cts 0
cp 0
cc 4
crap 20
1
from rest_framework import serializers
2
from dry_rest_permissions.generics import DRYPermissionsField
3
4
from sigma_core.models.user import User
5
from sigma_core.serializers.group_member import GroupMemberSerializer_Group
6
from sigma_files.models import Image
7
from sigma_files.serializers import ImageSerializer
8
9
10
class BasicUserSerializerMeta():
11
    model = User
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable User does not seem to be defined.
Loading history...
12
    exclude = ('is_staff', 'is_superuser', 'invited_to_groups', )
13
    read_only_fields = ('last_login', 'is_active', 'photo', 'clusters', ) # TODO: serialize invited_to_groups correctly
14
    extra_kwargs = {'password': {'write_only': True, 'required': False}}
15
16
17
class BasicUserSerializer(serializers.ModelSerializer):
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable serializers does not seem to be defined.
Loading history...
18
    """
19
    Serialize an User without relations.
20
    """
21
    class Meta(BasicUserSerializerMeta):
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable BasicUserSerializerMeta does not seem to be defined.
Loading history...
22
        pass
23
24
    photo = ImageSerializer(read_only=True)
25
26
27
class BasicUserWithPermsSerializer(BasicUserSerializer):
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable BasicUserSerializer does not seem to be defined.
Loading history...
28
    """
29
    Serialize an User without relations and add current user's permissions on the serialized User.
30
    """
31
    class Meta(BasicUserSerializerMeta):
32
        pass
33
34
    permissions = DRYPermissionsField(read_only=True)
35
36
    def create(self, fields):
37
        from sigma_core.models.group_member import GroupMember
38
        from sigma_core.models.cluster import Cluster
39
        try:
40
            request = self.context['request']
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable self does not seem to be defined.
Loading history...
41
            input_clusters = request.data.get('clusters')
42
            if request.user.is_sigma_admin():
43
                fields['clusters'] = Cluster.objects.filter(pk__in=input_clusters).values_list('id', flat=True)
44
            else:
45
                fields['clusters'] = GroupMember.objects.filter(user=request.user, group__in=input_clusters).values_list('group', flat=True)
46
        except ValueError:
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable ValueError does not seem to be defined.
Loading history...
47
            raise serializers.ValidationError("Cluster list: bad format")
48
        if input_clusters != list(fields['clusters']):
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable input_clusters does not seem to be defined.
Loading history...
49
            raise serializers.ValidationError("Cluster list: incorrect values")
50
        return super().create(fields)
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable fields does not seem to be defined.
Loading history...
51
52
53
class DetailedUserSerializer(BasicUserSerializer):
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable BasicUserSerializer does not seem to be defined.
Loading history...
54
    """
55
    Serialize full data about an User.
56
    """
57
    class Meta(BasicUserSerializerMeta):
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable BasicUserSerializerMeta does not seem to be defined.
Loading history...
58
        pass
59
60
    memberships = GroupMemberSerializer_Group(read_only=True, many=True)
61
62
63
class DetailedUserWithPermsSerializer(DetailedUserSerializer):
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable DetailedUserSerializer does not seem to be defined.
Loading history...
64
    """
65
    Serialize full data about an User and add current user's permissions on the serialized User.
66
    """
67
    class Meta(BasicUserSerializerMeta):
68
        pass
69
70
    permissions = DRYPermissionsField(read_only=True)
71
72
73
class MyUserDetailsWithPermsSerializer(DetailedUserWithPermsSerializer):
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable DetailedUserWithPermsSerializer does not seem to be defined.
Loading history...
74
    """
75
    Serialize full data about current User (with permissions).
76
    """
77
    class Meta(BasicUserSerializerMeta):
78
        exclude = ('is_staff', 'is_superuser', )
79
        read_only_fields = BasicUserSerializerMeta.read_only_fields + ('invited_to_groups', )
80