def add_package(args): io.start('Adding package %s' % highlight(args.id)) data = {'id': args.id, 'label': args.id} if args.parent: data['parent'] = args.parent post(api.rest1('sys_md_Package'), data=data)
def _add_role_membership(user: User, role: Role): """ Adds a membership manually because the identities API can't add memberships to non-group roles. """ io.start('Making user {} a member of role {}'.format( highlight(user.username), highlight(role.name))) membership = {'user': user.id, 'role': role.id, 'from': timestamp()} data = {'entities': [membership]} post(api.rest2('sys_sec_RoleMembership'), data=data)
def add_role(args): role_name = to_role_name(args.rolename) io.start('Adding role {}'.format(highlight(role_name))) role = {'name': role_name, 'label': role_name} if args.includes: role_names = [to_role_name(name) for name in args.includes] role['includes'] = _get_role_ids(role_names) if args.group: group_name = _to_group_name(args.group) role['group'] = _get_group_id(group_name) data = {'entities': [role]} post(api.rest2('sys_sec_Role'), data=data)
def add_token(args): io.start('Adding token %s for user %s' % (highlight(args.token), highlight(args.user))) user = get(api.rest2('sys_sec_User'), params={ 'attrs': 'id', 'q': 'username=={}'.format(args.user) }) if user.json()['total'] == 0: raise McmdError('Unknown user %s' % args.user) user_id = user.json()['items'][0]['id'] data = {'User': user_id, 'token': args.token} post(api.rest1('sys_sec_Token'), data=data)
def add_user(args): io.start('Adding user %s' % highlight(args.username)) password = args.set_password if args.set_password else args.username email = args.with_email if args.with_email else args.username + '@molgenis.org' active = not args.is_inactive superuser = args.is_superuser ch_pwd = args.change_password post(api.rest1('sys_sec_User'), data={ 'username': args.username, 'password_': password, 'changePassword': ch_pwd, 'Email': email, 'active': active, 'superuser': superuser })
def enable_theme(args): """ enable_theme enables a bootstrap theme :param args: commandline arguments containing the id of the theme (without .css) :exception McmdError: when applying the theme fails :return None """ theme = args.theme.replace('.css', '').replace('.min', '') io.start('Applying theme {}'.format(highlight(theme))) # Resource can be bootstrap-name.min.css (if molgenis theme), or name.min.css (if uploaded .min.css), or # name.css (if uploaded as .css). if one_resource_exists([ theme + '.min.css', theme + '.css', 'bootstrap-' + theme + '.min.css' ], ResourceType.THEME): # Molgenis themes start with bootstrap- but this is stripped from the name in the theme manager try: post(api.set_theme(), data=theme) except: post(api.set_theme(), data=theme.split('bootstrap-')[1]) else: raise McmdError( 'Applying theme failed. No themes found containing {} in the name'. format(args.theme, 'sys_set_StyleSheet'))
def _import_from_url(args): file_url = args.resource file_name = file_url.split("/")[-1] io.start('Importing from URL %s' % highlight(file_url)) params = { 'action': _get_import_action(file_name), 'metadataAction': 'upsert' } if args.to_package: params['packageId'] = args.to_package params['url'] = file_url response = post(api.import_by_url(), params=params) import_run_url = urljoin(config.get('host', 'selected'), response.text) status, message = _poll_for_completion(import_run_url) if status == 'FAILED': raise McmdError(message)
def add_group(args): group_name = _to_group_name(args.name) io.start('Adding group %s' % highlight(group_name)) post(api.group(), data={'name': group_name, 'label': args.name})
def _add_group_role_membership(user: User, group: Group, role: Role): io.start('Making user {} a member of role {}'.format( highlight(user.username), highlight(role.name))) url = api.member(group.name) post(url, data={'username': user.username, 'roleName': role.name})
def disable_row_level_security(entity_type_id: str): """Disables row level security on an entity type.""" post(api.permission_manager_rls(), data={'id': entity_type_id, 'rlsEnabled': False})
def enable_rls(args): io.start('Enabling row level security on entity type %s' % highlight(args.entity)) ensure_resource_exists(args.entity, ResourceType.ENTITY_TYPE) post(api.rls(), data={'id': args.entity, 'rlsEnabled': True})