def long_pr_list(self, merge_queue: MergeQueue, pr_list=None, level: int = 0, with_desc: bool = False): """ Build the long form list of PRs. """ result = '' tab_size = 4 indentation = ' ' * (tab_size * level) if pr_list is None: pr_list = merge_queue.get_queue() for i, pr in enumerate(pr_list): mergeable = ':thumbsup:' if pr.mergeable and pr.mergeable_state == 'clean' else ':no_entry:' blessed = ':angel:' if pr.blessed else '' next_up = ':up:' if pr.nb in merge_queue.pulled_prs else '' title = pr.title description = '\n\n' if with_desc: for line in pr.description.splitlines()[:5]: description += f' {indentation}| {line}\n\n' result += f'{indentation}{i+1}. [#{pr.nb}]({pr.url}) {blessed} {next_up} {pr.user} reviews: ' \ f'+:{pr.positive} -:{pr.negative} ~:{pr.pending} ' \ f'merge: {mergeable} {pr.mergeable_state} - {title}.{description}' if len(pr.dependents) > 0: result += f'{indentation}{merge_queue.count_dependent_prs(pr)} chained PRs for [#{pr.nb}]({pr.url})' \ f'\n\n{self.long_pr_list(merge_queue, pr.dependents, level=level + 1, with_desc=False)}' return result
def short_pr_list(self, merge_queue: MergeQueue): """ Build the short form list of PRs in a queue. """ result = '' for i, pr in enumerate(merge_queue.get_queue()): mergeable = ':thumbsup:' if pr.mergeable and pr.mergeable_state == 'clean' else ':no_entry:' blessed = ':angel:' if pr.blessed else '' next_up = ':up:' if pr.nb in merge_queue.pulled_prs else '' result += f'{i}. [#{pr.nb}]({pr.url}) {blessed} {next_up} {pr.user} merge: {mergeable} {pr.mergeable_state}' dependent_prs = merge_queue.count_dependent_prs(pr) if dependent_prs > 0: result += f'{dependent_prs} Chained PRs.' result += '\n' return result
def test_init(): mq = MergeQueue(FakeGHRepo()) assert mq.get_queue() == []