-
Notifications
You must be signed in to change notification settings - Fork 56
/
Copy pathsignals.py
51 lines (40 loc) · 1.69 KB
/
signals.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import re
from django.conf import settings
from django.db.models.signals import post_save, pre_save
from django.dispatch import receiver
from user import tokens, models
from user.models import User
REGEX_PATTERN = getattr(settings, 'REGEX_HACKATHON_ORGANIZER_EMAIL', None)
DEV_EMAILS = getattr(settings, 'HACKATHON_DEV_EMAILS', None)
# Make user organizer or admin if fits regex
@receiver(post_save, sender=User)
def user_organizer(sender, instance, created, *args, **kwargs):
if not created:
return None
if REGEX_PATTERN and re.match(REGEX_PATTERN, instance.email):
instance.type = models.USR_ORGANIZER
instance.save()
if DEV_EMAILS and instance.email in DEV_EMAILS:
instance.is_admin = True
instance.save()
# Send user verification
@receiver(post_save, sender=User)
def user_verify_email(sender, instance, created, *args, **kwargs):
if created and not instance.email_verified:
msg = tokens.generate_verify_email(instance)
msg.send()
@receiver(pre_save, sender=User)
def change_type(sender, instance, *args, **kwargs):
try:
old_user = sender.objects.get(pk=instance.id)
except User.DoesNotExist:
old_user = None
if old_user and old_user.application and old_user.type != instance.type:
if old_user.is_volunteer():
instance.volunteerapplication_application.delete()
if old_user.is_mentor():
instance.mentorapplication_application.delete()
if old_user.is_hacker():
instance.hackerapplication_application.delete()
elif old_user and old_user.is_sponsor() and old_user.sponsorapplication_application:
instance.sponsorapplication_application.all().delete()