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

1import logging 

2 

3from django.conf import settings 

4from django.contrib.auth import get_user_model 

5from django.db.models.signals import pre_save 

6 

7from google.auth.exceptions import RefreshError 

8from googleapiclient.errors import HttpError 

9 

10from activemembers import emails 

11from activemembers.gsuite import GSuiteUserService 

12from members.models import Member 

13from utils.models.signals import suspendingreceiver 

14 

15logger = logging.getLogger(__name__) 

16sync_service = GSuiteUserService() 

17 

18 

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 

26 

27 existing_member = Member.objects.filter(pk=instance.pk).first() 

28 if not existing_member: 

29 return 

30 

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)