Coverage for website/activemembers/signals.py: 43.90%
31 statements
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
1import logging
3from django.conf import settings
4from django.contrib.auth import get_user_model
5from django.db.models.signals import pre_save
7from google.auth.exceptions import RefreshError
8from googleapiclient.errors import HttpError
10from activemembers import emails
11from activemembers.gsuite import GSuiteUserService
12from members.models import Member
13from utils.models.signals import suspendingreceiver
15logger = logging.getLogger(__name__)
16sync_service = GSuiteUserService()
19@suspendingreceiver(
20 pre_save, sender=get_user_model(), dispatch_uid="activemembers_user_save"
21)
22@suspendingreceiver(pre_save, sender=Member, dispatch_uid="activemembers_member_save")
23def pre_member_save(instance, **kwargs):
24 if not settings.GSUITE_MEMBERS_AUTOSYNC: 24 ↛ 27line 24 didn't jump to line 27 because the condition on line 24 was always true
25 return
27 existing_member = Member.objects.filter(pk=instance.pk).first()
28 if not existing_member:
29 return
31 try:
32 if not existing_member.is_staff and instance.is_staff:
33 email, password = sync_service.create_user(instance)
34 emails.send_gsuite_welcome_message(instance, email, password)
35 elif existing_member.is_staff and not instance.is_staff:
36 sync_service.suspend_user(instance.username)
37 emails.send_gsuite_suspended_message(instance)
38 elif (
39 existing_member.is_staff
40 and instance.is_staff
41 and existing_member.username != instance.username
42 ):
43 sync_service.update_user(instance, existing_member.username)
44 except (HttpError, RefreshError) as e:
45 logger.error("Could not update G Suite account: %s", e)