diff -r 78246db1cbac -r adad5563603c src/notes/signals.py --- 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