Skip to content

Commit 23ed7ab

Browse files
committed
Implementations for SubClasses
1 parent b187b19 commit 23ed7ab

File tree

10 files changed

+101
-4
lines changed

10 files changed

+101
-4
lines changed

ogr/services/base.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,12 @@ class BaseGitProject(GitProject):
4545
@property
4646
def full_repo_name(self) -> str:
4747
return f"{self.namespace}/{self.repo}"
48+
49+
def can_close_issue(self, username: str) -> bool:
50+
return username in self.who_can_close_issue()
51+
52+
def can_merge_pr(self, username: str) -> bool:
53+
return username in self.who_can_merge_pr()
4854

4955

5056
class BasePullRequest(PullRequest):
@@ -80,7 +86,11 @@ def search(
8086
def get_statuses(self) -> list[CommitFlag]:
8187
commit = self.get_all_commits()[-1]
8288
return self.target_project.get_commit_statuses(commit)
83-
89+
90+
def can_close(self, username):
91+
return self.status == "open" and username in self.who_can_close()
92+
def can_merge(self, username) -> bool:
93+
return self.status == "open" and username in self.who_can_merge()
8494

8595
class BaseGitUser(GitUser):
8696
pass
@@ -97,7 +107,7 @@ def get_comments(
97107
return filter_comments(all_comments, filter_regex, reverse, author)
98108

99109
def can_close(self, username: str) -> bool:
100-
return username == self.author or username in self.project.who_can_close_issue()
110+
return username == self.author or username in self.who_can_close()
101111

102112

103113
class BaseCommitFlag(CommitFlag):

ogr/services/github/issue.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,12 @@ def comment(self, body: str) -> IssueComment:
166166
def close(self) -> "Issue":
167167
self._raw_issue.edit(state="closed")
168168
return self
169+
170+
def who_can_close(self) -> set[str]:
171+
return self.project.who_can_close_issue()
172+
173+
def can_close(self, username):
174+
return username == self.author or username in self.who_can_close()
169175

170176
def add_label(self, *labels: str) -> None:
171177
for label in labels:

ogr/services/github/project.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,9 @@ def who_can_close_issue(self) -> set[str]:
239239

240240
def who_can_merge_pr(self) -> set[str]:
241241
return self.__get_collaborators()
242+
243+
def can_close_issue(self, username: str) -> bool:
244+
return username in self.who_can_close_issue()
242245

243246
def can_merge_pr(self, username) -> bool:
244247
return (

ogr/services/github/pull_request.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,10 +253,34 @@ def close(self) -> "PullRequest":
253253
def merge(self) -> "PullRequest":
254254
self._raw_pr.merge()
255255
return self
256-
256+
257257
def add_label(self, *labels: str) -> None:
258258
for label in labels:
259259
self._raw_pr.add_to_labels(label)
260260

261261
def get_comment(self, comment_id: int) -> PRComment:
262262
return GithubPRComment(self._raw_pr.get_issue_comment(comment_id))
263+
264+
def who_can_close(self) -> set[str]:
265+
people_who_can_close: set[str] = set()
266+
267+
people_who_can_close.add(self.author)
268+
project = self._target_project
269+
people_who_can_close.update(project.__get_collaborators())
270+
271+
return people_who_can_close
272+
273+
def can_close(self, username):
274+
return username == self.author or username in self.who_can_close()
275+
276+
def who_can_merge(self) -> set[str]:
277+
people_who_can_merge: set[str] = set()
278+
project = self._target_project
279+
people_who_can_merge.update(project.__get_collaborators())
280+
281+
return people_who_can_merge
282+
283+
def can_merge(self, username):
284+
return username in self.who_can_merge()
285+
286+

ogr/services/gitlab/issue.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,3 +183,6 @@ def add_assignee(self, *assignees: str) -> None:
183183

184184
def get_comment(self, comment_id: int) -> IssueComment:
185185
return GitlabIssueComment(self._raw_issue.notes.get(comment_id))
186+
187+
def who_can_close(self) -> set[str]:
188+
return self.project.who_can_close_issue()

ogr/services/gitlab/project.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,9 @@ def who_can_merge_pr(self) -> set[str]:
184184
),
185185
)
186186

187+
def can_close_issue(self, username):
188+
return username in self.who_can_close_issue()
189+
187190
def can_merge_pr(self, username) -> bool:
188191
return username in self.who_can_merge_pr()
189192

ogr/services/gitlab/pull_request.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,3 +299,25 @@ def add_label(self, *labels: str) -> None:
299299

300300
def get_comment(self, comment_id: int) -> PRComment:
301301
return GitlabPRComment(self._raw_pr.notes.get(comment_id))
302+
303+
def who_can_close(self) -> set[str]:
304+
people_who_can_close: set[str] = set()
305+
people_who_can_close.add(self.author)
306+
307+
project = self._target_project
308+
people_who_can_close.update(set(project.get_owners()))
309+
310+
return people_who_can_close
311+
312+
def can_close(self, username):
313+
return username in self.who_can_close()
314+
315+
def who_can_merge(self) -> set[str]:
316+
people_who_can_merge: set[str] = set()
317+
project = self._target_project
318+
people_who_can_merge.update(set(project.get_owners()))
319+
320+
return people_who_can_merge
321+
322+
def can_merge(self, username):
323+
return username in self.who_can_merge()

ogr/services/pagure/issue.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,3 +241,9 @@ def get_comment(self, comment_id: int) -> IssueComment:
241241
method="GET",
242242
),
243243
)
244+
245+
def who_can_close_issue(self) -> set[str]:
246+
return self.project.who_can_close_issue()
247+
248+
249+

ogr/services/pagure/project.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,10 @@ def which_groups_can_merge_pr(self) -> set[str]:
235235
groups.update(project["access_groups"]["admin"])
236236
groups.update(project["access_groups"]["commit"])
237237
return groups
238-
238+
239+
def can_close_issue(self, username):
240+
return username in self.who_can_close_issue()
241+
239242
def can_merge_pr(self, username) -> bool:
240243
accounts_that_can_merge_pr = self.who_can_merge_pr()
241244

ogr/services/pagure/pull_request.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,3 +394,20 @@ def get_comment(self, comment_id: int) -> PRComment:
394394
f"No comment with id#{comment_id} in PR#{self.id} found.",
395395
response_code=404,
396396
)
397+
398+
def who_can_close(self) -> set[str]:
399+
people_who_can_close: set[str] = set()
400+
people_who_can_close.add(self.author)
401+
402+
project: ogr_pagure.PagureProject = self.target_project
403+
people_who_can_close.update(project.get_owners())
404+
return people_who_can_close
405+
406+
def can_close(self, username):
407+
return username in self.who_can_close()
408+
409+
def who_can_merge(self) -> set[str]:
410+
return self._target_project.who_can_merge_pr()
411+
412+
def can_merge(self, username):
413+
return username in self.who_can_merge()

0 commit comments

Comments
 (0)