| author | ymh <ymh.work@gmail.com> |
| Wed, 28 Nov 2018 15:45:37 +0100 | |
| changeset 180 | 62bffc051e1c |
| parent 142 | 56850f5c73f6 |
| permissions | -rw-r--r-- |
|
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 | 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 | 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 | 18 |
@receiver(post_save, sender=GroupProfile, dispatch_uid="group_profile_created_signal") |
19 |
def group_profile_saved_callback(sender, instance, **kwargs): |
|
20 |
created = kwargs.pop('created') |
|
21 |
if instance and not instance.protocol: |
|
22 |
new_protocol = Protocol.objects.create_from_default( |
|
23 |
"Protocol group %s" % (instance.group.name or instance.group.ext_id ), |
|
24 |
"Protocol group %s" % (instance.group.name or instance.group.ext_id), |
|
25 |
instance.group.name, |
|
26 |
None |
|
27 |
) |
|
28 |
instance.protocol = "%s%s.%s" % (constants.PROTOCOL_URN_PREFIX,new_protocol.ext_id, new_protocol.revisions.last().version) |
|
29 |
instance.save() |
|
30 |
||
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 | 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 | 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 |