src/notes/api/serializers/auth.py
changeset 142 56850f5c73f6
parent 133 6f3078f7fd47
equal deleted inserted replaced
141:cd5e8fb64b74 142:56850f5c73f6
     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 django.db import transaction
       
     6 from notes import constants
       
     7 from notes.api.fields.category import ProtocolField
       
     8 from protocols.models import Protocol
     5 from rest_auth.serializers import \
     9 from rest_auth.serializers import \
     6     UserDetailsSerializer as RestAuthUserDetailsSerializer
    10     UserDetailsSerializer as RestAuthUserDetailsSerializer
     7 from rest_framework import serializers
    11 from rest_framework import serializers
     8 
       
     9 from notes.api.fields.category import ProtocolField
       
    10 
    12 
    11 logger = logging.getLogger(__name__)
    13 logger = logging.getLogger(__name__)
    12 
    14 
    13 User = get_user_model()
    15 User = get_user_model()
    14 
    16 
    69         if request and hasattr(request, "user"):
    71         if request and hasattr(request, "user"):
    70             user = request.user
    72             user = request.user
    71             group.user_set.add(user)
    73             group.user_set.add(user)
    72             group.save()
    74             group.save()
    73         group.profile.owner = user
    75         group.profile.owner = user
       
    76 
       
    77         new_protocol = Protocol.objects.create_from_default(
       
    78             "Protocol group %s"%validated_data.get('name', ''),
       
    79             "Protocol group %s"%validated_data.get('name', ''),
       
    80             validated_data.get('name', ''),
       
    81             None
       
    82         )
       
    83         group.profile.protocol = "%s%s.%s" % (constants.PROTOCOL_URN_PREFIX, new_protocol.ext_id, new_protocol.revisions.last().version)
    74         group.profile.save()
    84         group.profile.save()
    75 
    85 
    76         return group
    86         return group
    77 
    87 
    78     def update(self, instance, validated_data):
    88     def update(self, instance, validated_data):
    88         if group.profile.owner and group.profile.owner not in group.user_set.all():
    98         if group.profile.owner and group.profile.owner not in group.user_set.all():
    89             group.user_set.add(group.profile.owner)
    99             group.user_set.add(group.profile.owner)
    90 
   100 
    91         return group
   101         return group
    92 
   102 
       
   103     @transaction.atomic()
       
   104     def save(self, **kwargs):
       
   105         return super().save(**kwargs)
       
   106 
    93 
   107 
    94 class UserDetailsSerializer(RestAuthUserDetailsSerializer):
   108 class UserDetailsSerializer(RestAuthUserDetailsSerializer):
    95     default_group = serializers.SlugRelatedField(read_only=True, slug_field='name', source='profile.default_group')
   109     default_group = serializers.SlugRelatedField(read_only=True, slug_field='name', source='profile.default_group')
    96 
   110 
    97     class Meta(RestAuthUserDetailsSerializer.Meta):
   111     class Meta(RestAuthUserDetailsSerializer.Meta):