src/notes/signals.py
changeset 131 adad5563603c
parent 117 9864fe2067cd
child 142 56850f5c73f6
--- a/src/notes/signals.py	Sun Jul 30 01:02:09 2017 +0200
+++ b/src/notes/signals.py	Mon Jul 31 23:18:38 2017 +0200
@@ -1,10 +1,17 @@
 """
 Signals for notes app
 """
+import logging
+
+from django.contrib.auth import get_user_model
+from django.contrib.auth.models import Group
 from django.db.models.signals import post_save
 from django.dispatch import receiver
-from django.contrib.auth.models import Group
-from notes.models import GroupProfile
+
+from notes.models import GroupProfile, UserProfile
+
+User = get_user_model()
+logger = logging.getLogger(__name__)
 
 @receiver(post_save, sender=Group, dispatch_uid="group_created_signal")
 def group_saved_callback(sender, instance, **kwargs):
@@ -13,3 +20,33 @@
         profile = GroupProfile(group=instance)
         profile.save()
 
+@receiver(post_save, sender=User, dispatch_uid="user_created_signal")
+def user_saved_callback(sender, instance, **kwargs):
+    created = kwargs.pop('created')
+    if not instance:
+        return
+    base_group_name = instance.username + " group"
+    group_name = base_group_name
+    if created:
+        # create personal group
+        personal_group = None
+        personal_group_profile = GroupProfile.objects.filter(owner=instance, owner_personal=instance).first()
+        if personal_group_profile is None:
+            # find a new name
+            i = 1
+            while Group.objects.filter(name=group_name).exists(): # should always ends...
+                group_name = "%s %s" % (base_group_name, i)
+                i += 1
+            personal_group = Group.objects.create(name=group_name)
+            personal_group.user_set.add(instance)
+            personal_group_profile = personal_group.profile
+            personal_group_profile.description = "%s personal group" % instance.username
+            personal_group_profile.owner = instance
+            personal_group_profile.owner_personal = instance
+            personal_group_profile.save()
+        else:
+            personal_group = personal_group_profile.group
+
+        UserProfile.objects.create(user=instance, default_group=personal_group)
+    # else we do nothing, because we do not know if the group's name was changed or not
+    # and we do not know the user older name