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

1"""GitHub issue tracker implementation.""" 

2 

3from github import Github, Auth 

4from github.GithubException import UnknownObjectException 

5 

6from gibr.issue import Issue 

7from gibr.notify import error 

8 

9from .base import IssueTracker 

10 

11 

12class GithubTracker(IssueTracker): 

13 """GitHub issue tracker using PyGithub.""" 

14 

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) 

19 

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 ) 

31 

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 ]