def test_result_list_to_phid_dict_duplicate_phids_raises():
    with pytest.raises(PhabricatorCommunicationException):
        result_list_to_phid_dict([{
            "phid": "PHID-DREV-1",
            "data": [1]
        }, {
            "phid": "PHID-DREV-1",
            "data": [2]
        }])
コード例 #2
0
ファイル: stacks.py プロジェクト: dylanwh/lando-api
def request_extended_revision_data(phab, revision_phids):
    """Return a RevisionData containing extended data for revisions.

    Args:
        phab: A landoapi.phabricator.PhabricatorClient.
        revision_phids: List of String PHIDs for revisions.

    Returns:
        A RevisionData containing extended data for a set of revisions.
    """
    if not revision_phids:
        return RevisionData({}, {}, {})

    revs = phab.call_conduit(
        'differential.revision.search',
        constraints={'phids': revision_phids},
        attachments={
            'reviewers': True,
            'reviewers-extra': True,
        },
        limit=len(revision_phids),
    )
    phab.expect(revs, 'data', len(revision_phids) - 1)
    revs = result_list_to_phid_dict(phab.expect(revs, 'data'))

    diffs = phab.call_conduit(
        'differential.diff.search',
        constraints={
            'phids':
            [phab.expect(r, 'fields', 'diffPHID') for r in revs.values()]
        },
        attachments={'commits': True},
        limit=len(revs),
    )
    phab.expect(diffs, 'data', len(revision_phids) - 1)
    diffs = result_list_to_phid_dict(phab.expect(diffs, 'data'))

    repo_phids = [
        phab.expect(r, 'fields', 'repositoryPHID') for r in revs.values()
    ] + [phab.expect(d, 'fields', 'repositoryPHID') for d in diffs.values()]
    repo_phids = {phid for phid in repo_phids if phid is not None}
    if repo_phids:
        repos = phab.call_conduit(
            'diffusion.repository.search',
            constraints={
                'phids': [phid for phid in repo_phids],
            },
            limit=len(repo_phids),
        )
        phab.expect(repos, 'data', len(repo_phids) - 1)
        repos = result_list_to_phid_dict(phab.expect(repos, 'data'))
    else:
        repos = {}

    return RevisionData(revs, diffs, repos)
コード例 #3
0
def test_result_list_to_phid_dict_duplicate_phids_raises():
    with pytest.raises(PhabricatorCommunicationException):
        result_list_to_phid_dict([
            {
                'phid': 'PHID-DREV-1',
                'data': [1]
            },
            {
                'phid': 'PHID-DREV-1',
                'data': [2]
            },
        ])
コード例 #4
0
def lazy_project_search(phabricator, project_phids):
    """Return a dictionary mapping phid to project data from a project.search.

    Args:
        phabricator: A PhabricatorClient instance.
        project_phids: A list of project phids to search.
    """
    if not project_phids:
        return {}

    projects = phabricator.call_conduit('project.search',
                                        constraints={'phids': project_phids})
    return result_list_to_phid_dict(phabricator.expect(projects, 'data'))
コード例 #5
0
def lazy_user_search(phabricator, user_phids):
    """Return a dictionary mapping phid to user information from a user.search.

    Args:
        phabricator: A PhabricatorClient instance.
        user_phids: A list of user phids to search.
    """
    if not user_phids:
        return {}

    users = phabricator.call_conduit('user.search',
                                     constraints={'phids': user_phids})
    return result_list_to_phid_dict(phabricator.expect(users, 'data'))
def test_result_list_to_phid_dict(result_list, key):
    result = result_list_to_phid_dict(result_list, phid_key=key)

    for i in result_list:
        assert i[key] in result
        assert i is result[i[key]]
def test_result_list_to_phid_dict_missing_key_raises(result_list, key):
    with pytest.raises(PhabricatorCommunicationException):
        result_list_to_phid_dict(result_list, phid_key=key)