コード例 #1
0
 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)
コード例 #2
0
 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)
コード例 #3
0
 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)
コード例 #4
0
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'])
コード例 #5
0
ファイル: webgroup.py プロジェクト: Mbaroudi/invenio-master
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"],
            )