Skip to content

Commit

Permalink
Refactor add_groups to create_groups #72
Browse files Browse the repository at this point in the history
  • Loading branch information
astrochun committed Oct 5, 2020
1 parent a312eda commit 3def1a5
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 79 deletions.
74 changes: 74 additions & 0 deletions requiam/grouper_admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,18 @@
import requests
import pandas as pd

from requests.exceptions import HTTPError

from .commons import figshare_stem
from .grouper_query import figshare_group

from .logger import log_stdout

# Administrative groups
superadmins = figshare_group('GrouperSuperAdmins', '', production=True)
admins = figshare_group('GrouperAdmins', '', production=True)
managers = figshare_group('GrouperManagers', '', production=True)


class GrouperAPI:
"""
Expand Down Expand Up @@ -250,3 +257,70 @@ def add_privilege(self, access_group, target_group, target_group_type, privilege
raise ValueError(f"Unexpected result received: {metadata['resultCode']}")

return True


def create_groups(groups, group_type, group_descriptions, grouper_api, log0=None, add=False):
"""
Purpose:
Process through a list of Grouper groups and add them if they don't exist
and set permissions
:param groups: list of str containing group names
:param group_type: str. Either 'portal', 'quota', or 'test'
:param group_descriptions: list of str containing description
:param grouper_api: GrouperAPI object
:param log0: logging.getLogger() object
:param add: boolean. Indicate whether to perform update or dry run
"""

if isinstance(log0, type(None)):
log0 = log_stdout()

for group, description in zip(groups, group_descriptions):
add_dict = {'group': group,
'group_type': group_type,
'description': description}

# Check if group exists
try:
group_exists = grouper_api.check_group_exists(group, group_type)
except KeyError:
log0.info("Stem is empty")
group_exists = False

if not group_exists:
log0.info(f"Group does not exist : {group}")

if add:
log0.info(f'Adding {group} ...')
try:
add_result = grouper_api.add_group(**add_dict)
if add_result:
log0.info("SUCCESS")
except HTTPError:
raise HTTPError
else:
log0.info('dry run, not performing group add')
else:
log0.info(f"Group exists : {group}")

if add:
log0.info(f'Adding admin privileges for groupersuperadmins ...')
try:
add_privilege = grouper_api.add_privilege(superadmins, group, group_type, 'admin')
if add_privilege:
log0.info("SUCCESS")
except HTTPError:
raise HTTPError

log0.info(f'Adding privileges for grouperadmins ...')
try:
add_privilege = grouper_api.add_privilege(admins, group, group_type,
['read', 'view', 'optout'])
if add_privilege:
log0.info("SUCCESS")
except HTTPError:
raise HTTPError

else:
log0.info('dry run, not performing privilege add')
86 changes: 7 additions & 79 deletions scripts/add_grouper_groups
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ from datetime import date
import configparser
import argparse

from requiam.grouper_admin import GrouperAPI
from requiam.grouper_admin import GrouperAPI, create_groups
from requiam.grouper_query import figshare_group
from requiam.logger import LogClass, log_stdout, get_user_hostname
from requiam import TimerClass
Expand All @@ -27,78 +27,6 @@ today = date.today()
# Retrieve parent directory to requiam
library_root_path = path.dirname(path.dirname(library_path))

# Administrative groups
superadmins = figshare_group('GrouperSuperAdmins', '', production=True)
admins = figshare_group('GrouperAdmins', '', production=True)
managers = figshare_group('GrouperManagers', '', production=True)


def add_groups(groups, group_type, group_descriptions, grouper_api, log0=None, add=False):
"""
Purpose:
Process through a list of Grouper groups and add them if they don't exist
and set permissions
:param groups: list of str containing group names
:param group_type: str. Either 'portal', 'quota', or 'test'
:param group_descriptions: list of str containing description
:param grouper_api: GrouperAPI object
:param log0: logging.getLogger() object
:param add: boolean. Indicate whether to perform update or dry run
"""

if isinstance(log0, type(None)):
log0 = log_stdout()

for group, description in zip(groups, group_descriptions):
add_dict = {'group': group,
'group_type': group_type,
'description': description}

# Check if group exists
try:
group_exists = ga.check_group_exists(group, group_type)
except KeyError:
log0.info("Stem is empty")
group_exists = False

if not group_exists:
log0.info(f"Group does not exist : {group}")

if add:
log0.info(f'Adding {group} ...')
try:
add_result = grouper_api.add_group(**add_dict)
if add_result:
log0.info("SUCCESS")
except HTTPError:
raise HTTPError
else:
log0.info('dry run, not performing group add')
else:
log0.info(f"Group exists : {group}")

if add:
log0.info(f'Adding admin privileges for groupersuperadmins ...')
try:
add_privilege = grouper_api.add_privilege(superadmins, group, group_type, 'admin')
if add_privilege:
log0.info("SUCCESS")
except HTTPError:
raise HTTPError

log0.info(f'Adding privileges for grouperadmins ...')
try:
add_privilege = grouper_api.add_privilege(admins, group, group_type,
['read', 'view', 'optout'])
if add_privilege:
log0.info("SUCCESS")
except HTTPError:
raise HTTPError

else:
log0.info('dry run, not performing privilege add')


if __name__ == '__main__':
# Parse command-line arguments
Expand Down Expand Up @@ -241,8 +169,8 @@ if __name__ == '__main__':
log.info(f"Total number of main themes: {n_mainThemes}")
log.info(f"List of main themes: {', '.join(main_groups)}")

add_groups(main_groups, 'portal', main_descriptions, ga, log0=log,
add=args.add)
create_groups(main_groups, 'portal', main_descriptions, ga, log0=log,
add=args.add)

mainTheme_timer._stop()
log.info(f"MAIN PORTAL : {mainTheme_timer.format}")
Expand Down Expand Up @@ -277,8 +205,8 @@ if __name__ == '__main__':
log.info(f"Total number of sub-portals: {n_subPortals}")
log.info(f"List of sub-portals: {', '.join(sub_groups)}")

add_groups(sub_groups, 'portal', sub_descriptions, ga, log0=log,
add=args.add)
create_groups(sub_groups, 'portal', sub_descriptions, ga, log0=log,
add=args.add)

subPortal_timer._stop()
log.info(f"SUB-PORTAL : {subPortal_timer.format}")
Expand Down Expand Up @@ -311,8 +239,8 @@ if __name__ == '__main__':
log.info(f"Total number of quotas: {n_quotas}")
log.info(f"List of quotas: {', '.join(quota_groups)}")

add_groups(quota_groups, 'quota', quota_descriptions, ga, log0=log,
add=args.add)
create_groups(quota_groups, 'quota', quota_descriptions, ga, log0=log,
add=args.add)

quota_timer._stop()
log.info(f"QUOTA : {quota_timer.format}")
Expand Down

0 comments on commit 3def1a5

Please sign in to comment.