def update_exchange_member(api_client, exchange_id, exchange_member): exchange_member_data = entity_to_dict(exchange_member) user_data = entity_to_dict(exchange_member_data.pop('user', dict())) exchange_member_data.update(user_data) exchange_member_data = filter_dict(exchange_member_data, remove_fields={ 'userId', 'emailId', 'firstName', 'lastName', 'title', 'organization', 'officePhone', 'languagePref' }) # Fix because the V2 API does not return 'unauthenticatedDocumentAccess' as a boolean if 'unauthenticatedDocumentAccess' in exchange_member_data and exchange_member_data[ 'unauthenticatedDocumentAccess'] in {'T', 'F'}: exchange_member_data[ 'unauthenticatedDocumentAccess'] = exchange_member_data[ 'unauthenticatedDocumentAccess'] == 'T' response = api_client.update('/v2/workspaces/{}/users'.format(exchange_id), data=json.dumps( {'users': [exchange_member_data]}), headers={'Content-Type': 'application/json'}, api_version=2) response.check(202, 'application/json') data = response.data() return get_node_as_item(data, ['userPartials'])
def update_group(api_client, exchange_id, group, remove_group_members=None, add_group_members=None): data = [ '<workspaceGroupUpdateRequest>', to_xml(group, ['workspaceGroup']) ] if remove_group_members is not None and len(remove_group_members) > 0: data.append(to_xml(remove_group_members, ['workspaceUser', 'removeWorkspaceUsers'])) if add_group_members is not None and len(add_group_members) > 0: data.append(to_xml(add_group_members, ['workspaceUser', 'addWorkspaceUsers'])) data.append('</workspaceGroupUpdateRequest>') response = api_client.update( '/v1/services/workspaces/workspaceGroups', params={ 'workspaceId':exchange_id, 'workspaceGroupId':group['id'] }, data={'xml':''.join(data)}, api_version=1 ) response.check(200, 'text/xml') data = response.data() return get_node_as_item(data, ('workspaceGroups', 'workspaceGroupPartial'))
def update_group(api_client, exchange_id, group, remove_group_members=None, add_group_members=None): group_data = entity_to_dict(group) group_id = group_data['id'] group_data = filter_dict(group_data, remove_fields={ 'id', 'groupMemberCount', 'lastModifiedOn', 'lastModifiedBy', 'createdOn', 'createdBy' }) response = api_client.update('/v2/workspaces/{}/groups/{}'.format( exchange_id, group_id), data=json.dumps(group_data), headers={'Content-Type': 'application/json'}, api_version=2) response.check(202, 'application/json') data = response.data() return get_node_as_item(data, 'groupPartials')
def create_exchange_member(api_client, exchange_id, exchange_member=None, groups=None): exchange_member_data = entity_to_dict(exchange_member) user_data = entity_to_dict(exchange_member_data.pop('user', dict())) exchange_member_data.update(user_data) data = {'workspaceUsers': {'workspaceUser': exchange_member_data}} if groups is not None and len(groups) > 0: data['workspaceGroups'] = {'workspaceUserGroup': []} for g in groups: data['workspaceGroups']['workspaceUserGroup'] = { 'emailIds': { 'emailId': exchange_member_data['user'] }, 'workspaceGroupId': g['id'] } response = api_client.create( '/v1/services/workspaces/workspaceUsers', params={'workspaceId': exchange_id}, data={'xml': to_xml(data, ['workspaceUserCreateRequest'])}, api_version=1) response.check(200, 'text/xml') data = response.data() return get_node_as_item(data, ('workspaceUserPartials', 'workspaceUserPartial'))
def get_user_account2(api_client, email): response = api_client.get('/v2/users/{}'.format( urllib.request.quote(email)), api_version=2) response.check(200, 'application/json') data = response.data() return get_node_as_item(data, 'user')
def get_user_account(api_client, email, exchange_id): response = api_client.get('/v2/workspaces/{}/users'.format(exchange_id), params={'email': email}, api_version=2) response.check(200, 'application/json') data = response.data() return get_node_as_item(data, 'users')
def get_exchange(api_client, exchange_id): response = api_client.get('/services/workspaces', params={'workspaceId': exchange_id}, api_version=1) response.check(200, 'text/xml') data = response.data() return get_node_as_item(data, 'workspace')
def get_user_account(api_client, email, exchange_id=None): response = api_client.get('/services/users', params={ 'emailId': email, 'workspaceId': exchange_id }, api_version=1) response.check(200, 'text/xml') data = response.data() return get_node_as_item(data, ('users', 'user'))
def update_document(api_client, exchange_id, document): document_data = entity_to_dict(document) response = api_client.update( '/v2/workspaces/{}/documents'.format(exchange_id), data=json.dumps({'documents': [document_data]}), headers={'Content-Type': 'application/json'}, api_version=2) response.check(202, 'application/json') data = response.data() return get_node_as_item(data, 'documentPartial')
def get_access_statuses(api_client, exchange_id, document_id, max_retries=5): response = api_client.get( '/services/workspaces/documents/reports/documentAccessReport', params={ 'workspaceId': exchange_id, 'documentId': document_id }, api_version=1) response.check(200, 'text/xml') data = response.data() return get_node_as_item(data, 'reportResponse')
def update_folder(api_client, exchange_id, folder): folder_data = entity_to_dict(folder) response = api_client.update( '/v1/services/workspaces/folders', params={'workspaceId': exchange_id}, data={'xml': to_xml(folder_data, ['folder', 'folderUpdateRequest'])}, api_version=1) response.check(200, 'text/xml') data = response.data() return get_node_as_item(data, 'folderPartial')
def create_group(api_client, exchange_id, group): group_data = entity_to_dict(group) response = api_client.create( '/v2/workspaces/{}/groups'.format(exchange_id), data=json.dumps(group_data), headers={'Content-Type': 'application/json'}, api_version=2) response.check(201, 'application/json') data = response.data() return get_node_as_item(data, 'groupPartials')
def get_exchange(api_client, exchange_id): response = api_client.get('/v2/workspaces/{}'.format(exchange_id), api_version=2) response.check(200, 'application/json') data = response.data() e = get_node_as_item(data, 'workspace') # Fix because the V2 API does not return 'pvpEnabled' or 'htmlViewEnabled' as a boolean convert_to_bool(e, 'pvpEnabled') convert_to_bool(e, 'htmlViewEnabled') return e
def create_document(api_client, exchange_id, document, file=None, permissions=None, batch_id=None): document_data = entity_to_dict(document) data = {'document': document_data} if permissions: if isinstance(permissions, list): data['permissions'] = { 'permissioned': [{ 'permissionInfo': p } for p in permissions] } else: data['permissions'] = { 'permissioned': { 'permissionInfo': permissions } } files = { 'documentFile': (os.path.basename(file.name), file, 'application/octet-stream') } if file is not None else None response = api_client.create( '/services/workspaces/documents', params={ 'workspaceId': exchange_id, 'batchId': batch_id, }, data={ 'xml': ''.join(to_xml(data, ['documentCreate', 'documentCreateRequest'])) }, files=files, api_version=1) response.check(200, 'text/xml') data = response.data() return get_node_as_item(data, 'documentPartial')
def create_group(api_client, exchange_id, group): group_data = entity_to_dict(group) response = api_client.create( '/v1/services/workspaces/workspaceGroups', params={ 'workspaceId':exchange_id }, data={'xml':to_xml(group_data, ['workspaceGroup', 'workspaceGroups', 'workspaceGroupCreateRequest'])}, api_version=1 ) response.check(200, 'text/xml') data = response.data() return get_node_as_item(data, ('workspaceGroups', 'workspaceGroupPartial'))
def create_exchange(api_client, exchange, suppress_welcome_alert=True): exchange_data = { 'name' if k == 'workspaceName' else k: v for k, v in entity_to_dict(exchange).items() } exchange_data['suppressWelcomeAlert'] = suppress_welcome_alert response = api_client.create('/v2/workspaces', data=json.dumps( {'workspaces': [exchange_data]}), headers={'Content-Type': 'application/json'}, api_version=2) response.check(201, 'application/json') data = response.data() return get_node_as_item(data, 'workspacePartial')
def update_document(api_client, exchange_id, document, file=None, permissions=None): document_data = entity_to_dict(document) data = {'document': document_data} if permissions: if isinstance(permissions, list): data['permissions'] = { 'permissioned': [{ 'permissionInfo': p } for p in permissions] } else: data['permissions'] = { 'permissioned': { 'permissionInfo': permissions } } files = { 'documentFile': (os.path.basename(file.name), file, 'application/octet-stream') } if file is not None else None response = api_client.update( '/services/workspaces/documents', params={'workspaceId': exchange_id}, data={'xml': ''.join(to_xml(data, 'documentUpdateRequest'))}, files=files, api_version=1) response.assert_status_code(200) response.assert_content_type('text/xml') response.assert_no_errors() data = response.data() return get_node_as_item(data, 'documentPartial')
def create_user_account(api_client, email, first_name, last_name, organization, phone, language): new_global_user = { "email": email, "firstName": first_name, "lastName": last_name, "organization": organization, "officePhone": phone, "language": language } response = api_client.create('/v2/users', data=json.dumps(new_global_user), headers={'Content-Type': 'application/json'}, api_version=2) response.check(201, 'application/json') data = response.data() return get_node_as_item(data, ['userPartials', 'userPartial'])
def update_folder(api_client, exchange_id, folder): folder_data = entity_to_dict(folder) folder_data = filter_dict(folder_data, remove_fields={'isEmailin', 'versionNumber', 'isFavorite', 'lastModifiedBy', 'lastModifiedOn', 'createdBy', 'createdOn', 'hasChildFolders', 'orderNumber', 'indexNumber'}) response = api_client.update( '/v2/workspaces/{}/folders'.format(exchange_id), data=json.dumps({'folders':[folder_data]}), headers={'Content-Type':'application/json'}, api_version=2 ) response.check(202, 'application/json') data = response.data() result = get_node_as_item(data, 'folderPartial') if 'hasNote' in result and result['hasNote'] in {'T', 'F'}: result['hasNote'] = result['hasNote'] == 'T' return result
def create_exchange(api_client, exchange, suppress_welcome_alert=True): exchange_data = { 'name' if k == 'workspaceName' else k: v for k, v in entity_to_dict(exchange).items() } exchange_data['suppressWelcomeAlert'] = suppress_welcome_alert response = api_client.create( '/services/workspaces', data={ 'xml': to_xml(exchange_data, ['workspacesToCreate', 'workspaceCreateRequest']) }, api_version=1) response.check(200, 'text/xml') data = response.data() return get_node_as_item(data, 'workspacePartial')
def create_exchange_member(api_client, exchange_id, exchange_member=None, alert=None): exchange_member_data = entity_to_dict(exchange_member) user_data = entity_to_dict(exchange_member_data.pop('user', dict())) exchange_member_data.update(user_data) exchange_member_data = filter_dict( exchange_member_data, remove_fields={'languagePref', 'unauthenticatedDocumentAccess'}) exchange_member_data['sendAlert'] = alert is not None if alert is None: exchange_member_data['sendAlert'] = False else: exchange_member_data['sendAlert'] = True alert_data = entity_to_dict(alert) alert_data['saveAlertSettings'] = True exchange_member_data['welcomeAlertDetails'] = alert_data response = api_client.create('/v2/workspaces/{}/users'.format(exchange_id), data=json.dumps( {'users': [exchange_member_data]}), headers={'Content-Type': 'application/json'}, api_version=2) response.check(201, 'application/json') data = response.data() return get_node_as_item(data, ['userPartials'])