Coverage for src\gibr\trackers\github.py: 100%
18 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-20 10:00 +0300
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-20 10:00 +0300
1"""GitHub issue tracker implementation."""
3from github import Github, Auth
4from github.GithubException import UnknownObjectException
6from gibr.issue import Issue
7from gibr.notify import error
9from .base import IssueTracker
12class GithubTracker(IssueTracker):
13 """GitHub issue tracker using PyGithub."""
15 def __init__(self, repo: str, token: str):
16 """Construct GithubTracker object."""
17 self.client = Github(auth=Auth.Token(token))
18 self.repo = self.client.get_repo(repo)
20 def get_issue(self, issue_id: str) -> dict:
21 """Fetch issue details by issue number."""
22 try:
23 issue = self.repo.get_issue(number=int(issue_id))
24 except UnknownObjectException:
25 error(f"Issue #{issue_id} not found in repository.")
26 return Issue(
27 id=issue.number,
28 title=issue.title,
29 type="issue",
30 )
32 def list_issues(self) -> list[dict]:
33 """List open issues from the GitHub repository."""
34 issues = self.repo.get_issues(state="open")
35 return [
36 Issue(
37 id=issue.number,
38 title=issue.title,
39 type="issue",
40 )
41 for issue in issues
42 ]