MAKENTNU/web

View on GitHub
src/internal/signals.py

Summary

Maintainability
A
0 mins
Test Coverage
from django.db.models.signals import m2m_changed

from groups.models import Committee
from .models import Member


def member_update_user_groups(instance: Member, action, pk_set=None, **kwargs):
    """
    Makes sure that the member is added/removed from the correct groups as their committee membership changes.
    """
    if action in {'pre_add', 'pre_remove'}:
        committees = Committee.objects.filter(pk__in=pk_set)
        match action:
            case 'pre_add':
                for committee in committees:
                    committee.group.user_set.add(instance.user)
            case 'pre_remove':
                for committee in committees:
                    committee.group.user_set.remove(instance.user)


def connect():
    m2m_changed.connect(member_update_user_groups, sender=Member.committees.through)