Coverage for website/mailinglists/signals.py: 53.85%

22 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.db.models.signals import pre_save 

5 

6from googleapiclient.errors import HttpError 

7 

8from mailinglists.gsuite import GSuiteSyncService 

9from mailinglists.models import MailingList 

10from utils.models.signals import suspendingreceiver 

11 

12logger = logging.getLogger(__name__) 

13 

14 

15@suspendingreceiver(pre_save, sender="mailinglists.MailingList") 

16def pre_mailinglist_save(instance, **kwargs): 

17 if settings.GSUITE_ADMIN_CREDENTIALS == {}: 17 ↛ 22line 17 didn't jump to line 22 because the condition on line 17 was always true

18 logger.warning( 

19 "Cannot sync mailinglists because there are no GSuite credentials available" 

20 ) 

21 return 

22 sync_service = GSuiteSyncService() 

23 group = sync_service.mailing_list_to_group(instance) 

24 old_list = MailingList.objects.filter(pk=instance.pk).first() 

25 try: 

26 if old_list is None: 

27 sync_service.create_group(group) 

28 else: 

29 sync_service.update_group(old_list.name, group) 

30 except HttpError: 

31 # Cannot do direct create or update, do full sync for list 

32 sync_service.sync_mailing_lists([group])