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'])
Beispiel #2
0
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'))
Beispiel #3
0
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'))
Beispiel #5
0
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')
Beispiel #6
0
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')
Beispiel #7
0
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')
Beispiel #8
0
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'))
Beispiel #9
0
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')
Beispiel #10
0
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')
Beispiel #11
0
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')
Beispiel #12
0
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')
Beispiel #13
0
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
Beispiel #14
0
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')
Beispiel #15
0
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'))
Beispiel #16
0
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')
Beispiel #17
0
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')
Beispiel #18
0
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'])
Beispiel #19
0
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
Beispiel #20
0
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'])