|
12 | 12 | DEFAULT_PAGE_SIZE = 8 |
13 | 13 |
|
14 | 14 |
|
| 15 | +def build_context_from_meta( |
| 16 | + meta: PullRequestMeta, |
| 17 | + page_size: int, |
| 18 | + *, |
| 19 | + total_count: int | None = None, |
| 20 | + total_pages: int | None = None, |
| 21 | +) -> TimelineContext: |
| 22 | + _validate_page_size(page_size) |
| 23 | + |
| 24 | + timeline_loaded = total_count is not None and total_pages is not None |
| 25 | + resolved_total_count = 0 if total_count is None else total_count |
| 26 | + resolved_total_pages = 0 if total_pages is None else total_pages |
| 27 | + |
| 28 | + return TimelineContext( |
| 29 | + owner=meta.ref.owner, |
| 30 | + name=meta.ref.name, |
| 31 | + number=meta.ref.number, |
| 32 | + page_size=page_size, |
| 33 | + total_count=resolved_total_count, |
| 34 | + total_pages=resolved_total_pages, |
| 35 | + title=meta.title, |
| 36 | + url=meta.url, |
| 37 | + author=meta.author, |
| 38 | + state=meta.state, |
| 39 | + is_draft=meta.is_draft, |
| 40 | + body=meta.body, |
| 41 | + updated_at=meta.updated_at, |
| 42 | + timeline_loaded=timeline_loaded, |
| 43 | + labels=meta.labels, |
| 44 | + kind=meta.kind, |
| 45 | + pr_reactions_summary=meta.reactions_summary, |
| 46 | + can_edit_pr_body=meta.can_edit_body, |
| 47 | + is_merged=meta.is_merged, |
| 48 | + head_ref_name=meta.head_ref_name, |
| 49 | + head_ref_repo=meta.head_ref_repo, |
| 50 | + head_ref_oid=meta.head_ref_oid, |
| 51 | + head_ref_deleted=meta.head_ref_deleted, |
| 52 | + pr_node_id=meta.node_id, |
| 53 | + merge_state_status=meta.merge_state_status, |
| 54 | + mergeable=meta.mergeable, |
| 55 | + review_decision=meta.review_decision, |
| 56 | + requires_approving_reviews=meta.requires_approving_reviews, |
| 57 | + required_approving_review_count=meta.required_approving_review_count, |
| 58 | + requires_code_owner_reviews=meta.requires_code_owner_reviews, |
| 59 | + approved_review_count=meta.approved_review_count, |
| 60 | + requires_status_checks=meta.requires_status_checks, |
| 61 | + base_ref_name=meta.base_ref_name, |
| 62 | + base_ref_oid=meta.base_ref_oid, |
| 63 | + merge_commit_allowed=meta.merge_commit_allowed, |
| 64 | + squash_merge_allowed=meta.squash_merge_allowed, |
| 65 | + rebase_merge_allowed=meta.rebase_merge_allowed, |
| 66 | + co_author_trailers=meta.co_author_trailers, |
| 67 | + conflict_files=meta.conflict_files, |
| 68 | + forward_after_by_page=({1: None} if timeline_loaded else {}), |
| 69 | + backward_before_by_page=({resolved_total_pages: None} if timeline_loaded else {}), |
| 70 | + ) |
| 71 | + |
| 72 | + |
15 | 73 | class TimelinePager: |
16 | 74 | def __init__(self, client: GitHubClient) -> None: |
17 | 75 | self._client = client |
@@ -45,47 +103,11 @@ def build_initial( |
45 | 103 | total_count = first_page.total_count |
46 | 104 | total_pages = _page_count(total_count, page_size) |
47 | 105 |
|
48 | | - context = TimelineContext( |
49 | | - owner=meta.ref.owner, |
50 | | - name=meta.ref.name, |
51 | | - number=meta.ref.number, |
| 106 | + context = build_context_from_meta( |
| 107 | + meta=meta, |
52 | 108 | page_size=page_size, |
53 | 109 | total_count=total_count, |
54 | 110 | total_pages=total_pages, |
55 | | - title=meta.title, |
56 | | - url=meta.url, |
57 | | - author=meta.author, |
58 | | - state=meta.state, |
59 | | - is_draft=meta.is_draft, |
60 | | - body=meta.body, |
61 | | - updated_at=meta.updated_at, |
62 | | - labels=meta.labels, |
63 | | - kind=meta.kind, |
64 | | - pr_reactions_summary=meta.reactions_summary, |
65 | | - can_edit_pr_body=meta.can_edit_body, |
66 | | - is_merged=meta.is_merged, |
67 | | - head_ref_name=meta.head_ref_name, |
68 | | - head_ref_repo=meta.head_ref_repo, |
69 | | - head_ref_oid=meta.head_ref_oid, |
70 | | - head_ref_deleted=meta.head_ref_deleted, |
71 | | - pr_node_id=meta.node_id, |
72 | | - merge_state_status=meta.merge_state_status, |
73 | | - mergeable=meta.mergeable, |
74 | | - review_decision=meta.review_decision, |
75 | | - requires_approving_reviews=meta.requires_approving_reviews, |
76 | | - required_approving_review_count=meta.required_approving_review_count, |
77 | | - requires_code_owner_reviews=meta.requires_code_owner_reviews, |
78 | | - approved_review_count=meta.approved_review_count, |
79 | | - requires_status_checks=meta.requires_status_checks, |
80 | | - base_ref_name=meta.base_ref_name, |
81 | | - base_ref_oid=meta.base_ref_oid, |
82 | | - merge_commit_allowed=meta.merge_commit_allowed, |
83 | | - squash_merge_allowed=meta.squash_merge_allowed, |
84 | | - rebase_merge_allowed=meta.rebase_merge_allowed, |
85 | | - co_author_trailers=meta.co_author_trailers, |
86 | | - conflict_files=meta.conflict_files, |
87 | | - forward_after_by_page={1: None}, |
88 | | - backward_before_by_page={total_pages: None}, |
89 | 111 | ) |
90 | 112 | self._remember_forward(context, page=1, cursor_used=None, page_result=first_page) |
91 | 113 |
|
|
0 commit comments