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
« 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.db.models.signals import pre_save
6from googleapiclient.errors import HttpError
8from mailinglists.gsuite import GSuiteSyncService
9from mailinglists.models import MailingList
10from utils.models.signals import suspendingreceiver
12logger = logging.getLogger(__name__)
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])