def _poll_for_completion(url): def step_function(step): """Increases time between polls with one second each time, with a maximum of 10 seconds.""" step += 1 return min(step, 10) polling.poll(lambda: get(url).json()['status'] != 'RUNNING', step=0, step_function=step_function, poll_forever=True) import_run = get(url).json() return import_run['status'], import_run['message']
def _get_settings(): molgenis_settings = get(api.rest2('sys_md_EntityType'), params={ 'q': 'extends==sys_set_settings', 'attrs': '~id' }).json()['items'] return [setting['id'] for setting in molgenis_settings]
def _get_group_id(group_name) -> str: groups = get(api.rest2('sys_sec_Group'), params={ 'attrs': 'id', 'q': 'name=={}'.format(group_name) }).json()['items'] if len(groups) == 0: raise McmdError('No group found with name {}'.format(groups)) else: return groups[0]['id']
def _get_user(user_name: str) -> User: users = get(api.rest2('sys_sec_User'), params={ 'attrs': 'id,username', 'q': 'username=={}'.format(user_name) }).json()['items'] if len(users) == 0: raise McmdError('Unknown user {}'.format(user_name)) else: return map_to_user(users[0])
def _get_role(role_name: str) -> Role: roles = get(api.rest2('sys_sec_Role'), params={ 'attrs': 'id,name,label,group(id,name)', 'q': 'name=={}'.format(role_name) }).json()['items'] if len(roles) == 0: raise McmdError('No role found with name {}'.format(role_name)) else: return map_to_role(roles[0])
def _get_group_roles(group: Group) -> List[Role]: roles = get(api.rest2('sys_sec_Role'), params={ 'attrs': 'id,name,label,group(id,name)', 'q': 'group=={}'.format(group.id) }).json()['items'] if len(roles) == 0: raise McmdError('No roles found for group {}'.format(group.name)) return [map_to_role(role) for role in roles]
def _is_member(user: User, role: Role) -> bool: memberships = get(api.rest2('sys_sec_RoleMembership'), params={ 'attrs': 'id', 'q': "user=={};role=={};(to=='',to=ge={})".format( user.id, role.id, timestamp()) }).json()['items'] return len(memberships) > 0
def _delete_packages_in_package(package_id): response = client.get(api.rest2(ResourceType.PACKAGE.get_entity_id()), params={ 'attrs': 'id', 'q': 'parent==' + package_id }) package_ids = [ entity_type['id'] for entity_type in response.json()['items'] ] if len(package_ids) > 0: _delete_rows(ResourceType.PACKAGE.get_entity_id(), package_ids)
def _delete_entity_type_attribute(args): if args.force or (not args.force and mcmd.io.ask.confirm( 'Are you sure you want to delete attribute {} of entity type {}?'. format(args.attribute, args.resource))): io.start('Deleting attribute {} of entity {}'.format( highlight(args.attribute), highlight(args.resource))) response = client.get(api.rest2('sys_md_Attribute'), params={ 'q': 'entity=={};name=={}'.format( args.resource, args.attribute) }) attribute_id = response.json()['items'][0]['id'] client.delete(api.rest2('sys_md_Attribute/{}'.format(attribute_id)))
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 _get_role_ids(role_names) -> List[str]: roles = get(api.rest2('sys_sec_Role'), params={ 'attrs': 'id,name', 'q': 'name=in=({})'.format(','.join(role_names)) }).json()['items'] name_to_id = {role['name']: role['id'] for role in roles} not_found = list() for role_name in role_names: if role_name not in name_to_id: not_found.append(role_name) if len(not_found) > 0: raise McmdError("Couldn't find role(s) {}".format( ' and '.join(not_found))) else: return list(name_to_id.values())
def _get_group_membership(user: User, group: Group) -> Optional[RoleMembership]: group_roles = _get_group_roles(group) group_role_ids = [role.id for role in group_roles] memberships = get( api.rest2('sys_sec_RoleMembership'), params={ 'attrs': 'id,user(id,username),role(id,name,label,group(id,name))', 'q': "user=={};role=in=({});(to=='',to=ge={})".format( user.id, ','.join(group_role_ids), timestamp()) }).json()['items'] if len(memberships) == 0: return None else: return map_to_role_membership(memberships[0])
def _get_first_row_id(entity): settings = get(api.rest2(entity), params={'attrs': '~id'}).json()['items'] return settings[0]['id']
def role_exists(role_input): log.debug('Checking if role %s exists' % role_input) response = get(api.rest2('sys_sec_Role'), params={'q': 'name==' + to_role_name(role_input)}) return int(response.json()['total']) > 0
def user_exists(username): log.debug('Checking if user %s exists' % username) response = get(api.rest2('sys_sec_User'), params={'q': 'username==' + username}) return int(response.json()['total']) > 0