11# -*- coding: utf-8 -*-
22#
3- # Copyright 2021 University of Oslo, Norway
3+ # Copyright 2021-2023 University of Oslo, Norway
44#
55# This file is part of Cerebrum.
66#
1818# along with Cerebrum; if not, write to the Free Software Foundation,
1919# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
2020"""
21- Greg consent functionality .
21+ Sync group membership for a given entity .
2222"""
2323import logging
2424
25- from Cerebrum .group .template import GroupTemplate
26-
2725logger = logging .getLogger (__name__ )
2826
2927
30- GREG_CONSENT_GROUP = GroupTemplate (
31- group_name = 'greg-aktivt-samtykke' ,
32- group_description = 'Guests who consents to electronic publication' ,
33- group_type = 'internal-group' ,
34- group_visibility = 'A' ,
35- )
36-
37-
38- # TODO: Should this be a 'generic' import_utils class?
3928class GroupMembershipSetter (object ):
4029 """
4130 Set membership for a single entity in a given group.
@@ -60,9 +49,8 @@ def __init__(self, get_group):
6049 connection/transaction to use, and should return the
6150 Cerebrum.Group.Group object to update.
6251
63- Would typically be a
64- py:class:`Cerebrum.group.template.GroupTemplate` or similar
65- callable object.
52+ Would typically be a :class:`Cerebrum.group.template.GroupTemplate`
53+ or similar callable object.
6654 """
6755 self .get_group = get_group
6856
@@ -73,17 +61,28 @@ def __repr__(self):
7361 )
7462
7563 def __call__ (self , db , entity_id , set_member ):
64+ """
65+ Ensure entity_id is or isn't a member of this group.
66+
67+ :type db: Cerebrum.database.Database
68+ :param int entity_id: member id to sync
69+ :param bool set_member: if entity_id should be a member
70+
71+ :returns bool: True if membership was changed
72+ """
7673 group = self .get_group (db )
7774 is_member = group .has_member (entity_id )
7875
7976 if set_member and not is_member :
8077 logger .info ('adding entity_id=%d to group %s (%d)' ,
8178 entity_id , group .group_name , group .entity_id )
8279 group .add_member (entity_id )
83- elif not set_member and is_member :
80+ return True
81+
82+ if not set_member and is_member :
8483 logger .info ('removing entity_id=%d from group %s (%d)' ,
8584 entity_id , group .group_name , group .entity_id )
8685 group .remove_member (entity_id )
86+ return True
8787
88-
89- sync_greg_consent = GroupMembershipSetter (GREG_CONSENT_GROUP )
88+ return False
0 commit comments