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] }])
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)
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] }, ])
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'))
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)