def test_synchronize_all_external_groups(self): """webgroup - synchronizing all external groups""" from invenio.webgroup import synchronize_all_external_groups from invenio.webgroup_dblayer import get_external_groups, \ get_all_login_method_groups synchronize_all_external_groups( {'group1': ('descr1', [self.email, self.email2])}, self.login_method) groups = get_external_groups(self.uid2) self.assertEqual(len(groups), 1) synchronize_all_external_groups( {'group2': ('descr1', [self.email, self.email2])}, self.login_method) groups = get_external_groups(self.uid2) self.assertEqual(len(groups), 1) self.assertEqual(groups[0][1], 'group2') self.assertEqual(groups[0][2], 'descr1') synchronize_all_external_groups({'group2': ('descr2', [self.email])}, self.login_method) groups = get_external_groups(self.uid) self.assertEqual(groups[0][2], 'descr2') groups = get_external_groups(self.uid) self.assertEqual(len(groups), 1) self.assertEqual(groups[0][1], 'group2') groups = get_external_groups(self.uid2) self.assertEqual(len(groups), 0) synchronize_all_external_groups({}, self.login_method) groups = get_external_groups(self.uid2) self.assertEqual(len(groups), 0) groups = get_all_login_method_groups(self.login_method) self.failIf(groups)
def test_synchronize_all_external_groups(self): """webgroup - synchronizing all external groups""" synchronize_all_external_groups({'group1' : ('descr1', [self.email, self.email2])}, self.login_method) groups = get_external_groups(self.uid2) self.assertEqual(len(groups), 1) synchronize_all_external_groups({'group2' : ('descr1', [self.email, self.email2])}, self.login_method) groups = get_external_groups(self.uid2) self.assertEqual(len(groups), 1) self.assertEqual(groups[0][1], 'group2') self.assertEqual(groups[0][2], 'descr1') synchronize_all_external_groups({'group2' : ('descr2', [self.email])}, self.login_method) groups = get_external_groups(self.uid) self.assertEqual(groups[0][2], 'descr2') groups = get_external_groups(self.uid) self.assertEqual(len(groups), 1) self.assertEqual(groups[0][1], 'group2') groups = get_external_groups(self.uid2) self.assertEqual(len(groups), 0) synchronize_all_external_groups({}, self.login_method) groups = get_external_groups(self.uid2) self.assertEqual(len(groups), 0) groups = get_all_login_method_groups(self.login_method) self.failIf(groups)
def test_synchronize_all_external_groups(self): """webgroup - synchronizing all external groups""" synchronize_all_external_groups({"group1": ("descr1", [self.email, self.email2])}, self.login_method) groups = get_external_groups(self.uid2) self.assertEqual(len(groups), 1) synchronize_all_external_groups({"group2": ("descr1", [self.email, self.email2])}, self.login_method) groups = get_external_groups(self.uid2) self.assertEqual(len(groups), 1) self.assertEqual(groups[0][1], "group2") self.assertEqual(groups[0][2], "descr1") synchronize_all_external_groups({"group2": ("descr2", [self.email])}, self.login_method) groups = get_external_groups(self.uid) self.assertEqual(groups[0][2], "descr2") groups = get_external_groups(self.uid) self.assertEqual(len(groups), 1) self.assertEqual(groups[0][1], "group2") groups = get_external_groups(self.uid2) self.assertEqual(len(groups), 0) synchronize_all_external_groups({}, self.login_method) groups = get_external_groups(self.uid2) self.assertEqual(len(groups), 0) groups = get_all_login_method_groups(self.login_method) self.failIf(groups)
def synchronize_all_external_groups(usersgroups, login_method): """Merges all the groups vs users memberships. @param usersgroups: is {'mygroup': ('description', ['email1', 'email2', ...]), ...} @return: True in case everythings is ok, False otherwise """ db_users = db.get_all_users() # All users of the database {email:uid, ...} db_users_set = set(db_users.keys()) # Set of all users set('email1', # 'email2', ...) for key, value in usersgroups.items(): # cleaning users not in db cleaned_user_list = set() for username in value[1]: username = username.upper() if username in db_users_set: cleaned_user_list.add(db_users[username]) if cleaned_user_list: usersgroups[key] = (value[0], cleaned_user_list) else: # List of user now is empty del usersgroups[key] # cleaning not interesting groups # now for each group we got a description and a set of uid groups_already_known = db.get_all_login_method_groups(login_method) # groups in the db {groupname: id} groups_already_known_set = set(groups_already_known.keys()) # set of the groupnames in db usersgroups_set = set(usersgroups.keys()) # set of groupnames to be merged # deleted groups! nomore_groups = groups_already_known_set - usersgroups_set for group_name in nomore_groups: db.delete_group_and_members(groups_already_known[group_name]) # new groups! new_groups = usersgroups_set - groups_already_known_set for group_name in new_groups: groupid = db.insert_only_new_group( group_name, usersgroups[group_name][0], # description CFG_WEBSESSION_GROUP_JOIN_POLICY['VISIBLEEXTERNAL'], login_method) for uid in usersgroups[group_name][1]: db.insert_new_member(uid, groupid, CFG_WEBSESSION_USERGROUP_STATUS['MEMBER']) # changed groups? changed_groups = usersgroups_set & groups_already_known_set groups_description = db.get_all_groups_description(login_method) for group_name in changed_groups: users_already_in_group = db.get_users_in_group( groups_already_known[group_name]) users_already_in_group_set = set(users_already_in_group) users_in_group_set = usersgroups[group_name][1] # no more affiliation nomore_users = users_already_in_group_set - users_in_group_set for uid in nomore_users: db.delete_member(groups_already_known[group_name], uid) # new affiliation new_users = users_in_group_set - users_already_in_group_set for uid in new_users: db.insert_new_member(uid, groups_already_known[group_name], CFG_WEBSESSION_USERGROUP_STATUS['MEMBER']) # check description if groups_description[group_name] != usersgroups[group_name][0]: db.update_group_infos( groups_already_known[group_name], group_name, usersgroups[group_name][0], CFG_WEBSESSION_GROUP_JOIN_POLICY['VISIBLEEXTERNAL'])
def synchronize_all_external_groups(usersgroups, login_method): """Merges all the groups vs users memberships. @param usersgroups: is {'mygroup': ('description', ['email1', 'email2', ...]), ...} @return: True in case everythings is ok, False otherwise """ db_users = db.get_all_users() # All users of the database {email:uid, ...} db_users_set = set(db_users.keys()) # Set of all users set('email1', # 'email2', ...) for key, value in usersgroups.items(): # cleaning users not in db cleaned_user_list = set() for username in value[1]: username = username.upper() if username in db_users_set: cleaned_user_list.add(db_users[username]) if cleaned_user_list: usersgroups[key] = (value[0], cleaned_user_list) else: # List of user now is empty del usersgroups[key] # cleaning not interesting groups # now for each group we got a description and a set of uid groups_already_known = db.get_all_login_method_groups(login_method) # groups in the db {groupname: id} groups_already_known_set = set(groups_already_known.keys()) # set of the groupnames in db usersgroups_set = set(usersgroups.keys()) # set of groupnames to be merged # deleted groups! nomore_groups = groups_already_known_set - usersgroups_set for group_name in nomore_groups: db.delete_group_and_members(groups_already_known[group_name]) # new groups! new_groups = usersgroups_set - groups_already_known_set for group_name in new_groups: groupid = db.insert_only_new_group( group_name, usersgroups[group_name][0], # description CFG_WEBSESSION_GROUP_JOIN_POLICY["VISIBLEEXTERNAL"], login_method, ) for uid in usersgroups[group_name][1]: db.insert_new_member(uid, groupid, CFG_WEBSESSION_USERGROUP_STATUS["MEMBER"]) # changed groups? changed_groups = usersgroups_set & groups_already_known_set groups_description = db.get_all_groups_description(login_method) for group_name in changed_groups: users_already_in_group = db.get_users_in_group(groups_already_known[group_name]) users_already_in_group_set = set(users_already_in_group) users_in_group_set = usersgroups[group_name][1] # no more affiliation nomore_users = users_already_in_group_set - users_in_group_set for uid in nomore_users: db.delete_member(groups_already_known[group_name], uid) # new affiliation new_users = users_in_group_set - users_already_in_group_set for uid in new_users: db.insert_new_member(uid, groups_already_known[group_name], CFG_WEBSESSION_USERGROUP_STATUS["MEMBER"]) # check description if groups_description[group_name] != usersgroups[group_name][0]: db.update_group_infos( groups_already_known[group_name], group_name, usersgroups[group_name][0], CFG_WEBSESSION_GROUP_JOIN_POLICY["VISIBLEEXTERNAL"], )