src/notes/signals.py
author ymh <ymh.work@gmail.com>
Fri, 30 Nov 2018 10:53:15 +0100
changeset 183 f8f3af9e5c83
parent 142 56850f5c73f6
permissions -rw-r--r--
Change the settings to avoid using Session authentication for rest framework as it raise exceptions in case client and backend are on the same domain On the filter, adapt to take into account new version of django_filters
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
117
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
"""
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
Signals for notes app
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
"""
131
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
     4
import logging
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
     5
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
     6
from django.contrib.auth import get_user_model
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
     7
from django.contrib.auth.models import Group
117
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
from django.db.models.signals import post_save
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
from django.dispatch import receiver
131
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    10
142
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 131
diff changeset
    11
from notes import constants
131
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    12
from notes.models import GroupProfile, UserProfile
142
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 131
diff changeset
    13
from protocols.models import Protocol
131
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    14
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    15
User = get_user_model()
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    16
logger = logging.getLogger(__name__)
117
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
142
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 131
diff changeset
    18
@receiver(post_save, sender=GroupProfile, dispatch_uid="group_profile_created_signal")
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 131
diff changeset
    19
def group_profile_saved_callback(sender, instance, **kwargs):
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 131
diff changeset
    20
    created = kwargs.pop('created')
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 131
diff changeset
    21
    if instance and not instance.protocol:
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 131
diff changeset
    22
        new_protocol = Protocol.objects.create_from_default(
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 131
diff changeset
    23
            "Protocol group %s" % (instance.group.name or instance.group.ext_id ),
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 131
diff changeset
    24
            "Protocol group %s" % (instance.group.name or instance.group.ext_id),
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 131
diff changeset
    25
            instance.group.name,
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 131
diff changeset
    26
            None
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 131
diff changeset
    27
        )
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 131
diff changeset
    28
        instance.protocol = "%s%s.%s" % (constants.PROTOCOL_URN_PREFIX,new_protocol.ext_id, new_protocol.revisions.last().version)
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 131
diff changeset
    29
        instance.save()
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 131
diff changeset
    30
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 131
diff changeset
    31
117
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
@receiver(post_save, sender=Group, dispatch_uid="group_created_signal")
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
def group_saved_callback(sender, instance, **kwargs):
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
    created = kwargs.pop('created')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
    if instance and created:
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
        profile = GroupProfile(group=instance)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
        profile.save()
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
142
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 131
diff changeset
    39
131
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    40
@receiver(post_save, sender=User, dispatch_uid="user_created_signal")
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    41
def user_saved_callback(sender, instance, **kwargs):
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    42
    created = kwargs.pop('created')
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    43
    if not instance:
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    44
        return
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    45
    base_group_name = instance.username + " group"
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    46
    group_name = base_group_name
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    47
    if created:
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    48
        # create personal group
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    49
        personal_group = None
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    50
        personal_group_profile = GroupProfile.objects.filter(owner=instance, owner_personal=instance).first()
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    51
        if personal_group_profile is None:
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    52
            # find a new name
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    53
            i = 1
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    54
            while Group.objects.filter(name=group_name).exists(): # should always ends...
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    55
                group_name = "%s %s" % (base_group_name, i)
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    56
                i += 1
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    57
            personal_group = Group.objects.create(name=group_name)
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    58
            personal_group.user_set.add(instance)
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    59
            personal_group_profile = personal_group.profile
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    60
            personal_group_profile.description = "%s personal group" % instance.username
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    61
            personal_group_profile.owner = instance
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    62
            personal_group_profile.owner_personal = instance
142
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 131
diff changeset
    63
131
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    64
            personal_group_profile.save()
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    65
        else:
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    66
            personal_group = personal_group_profile.group
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    67
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    68
        UserProfile.objects.create(user=instance, default_group=personal_group)
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    69
    # else we do nothing, because we do not know if the group's name was changed or not
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    70
    # and we do not know the user older name