From 4258ce165b4ce4344a9d314373b5f27dc4b0b2fc Mon Sep 17 00:00:00 2001 From: mrT23 Date: Sun, 25 Feb 2024 16:33:19 +0200 Subject: [PATCH 1/5] Refactor link generation in github_provider.py to use get_pr_url method --- pr_agent/git_providers/github_provider.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pr_agent/git_providers/github_provider.py b/pr_agent/git_providers/github_provider.py index 5cb00705..a5a1d3b9 100644 --- a/pr_agent/git_providers/github_provider.py +++ b/pr_agent/git_providers/github_provider.py @@ -664,7 +664,8 @@ class GithubProvider(GitProvider): # link to diff sha_file = hashlib.sha256(relevant_file.encode('utf-8')).hexdigest() - link = f"https://github.com/{self.repo}/pull/{self.pr_num}/files#diff-{sha_file}R{absolute_position}" + pr_url = self.get_pr_url() # for example 'https://github.com/Codium-ai/pr-agent/pull/1' + link = f"{pr_url}/files#diff-{sha_file}R{absolute_position}" return link except Exception as e: if get_settings().config.verbosity_level >= 2: @@ -674,12 +675,13 @@ class GithubProvider(GitProvider): def get_line_link(self, relevant_file: str, relevant_line_start: int, relevant_line_end: int = None) -> str: sha_file = hashlib.sha256(relevant_file.encode('utf-8')).hexdigest() + pr_url = self.get_pr_url() # for example 'https://github.com/Codium-ai/pr-agent/pull/1' if relevant_line_start == -1: - link = f"https://github.com/{self.repo}/pull/{self.pr_num}/files#diff-{sha_file}" + link = f"{pr_url}/files#diff-{sha_file}" elif relevant_line_end: - link = f"https://github.com/{self.repo}/pull/{self.pr_num}/files#diff-{sha_file}R{relevant_line_start}-R{relevant_line_end}" + link = f"{pr_url}/files#diff-{sha_file}R{relevant_line_start}-R{relevant_line_end}" else: - link = f"https://github.com/{self.repo}/pull/{self.pr_num}/files#diff-{sha_file}R{relevant_line_start}" + link = f"{pr_url}/files#diff-{sha_file}R{relevant_line_start}" return link From a15d4f7a945eba6ecd518516e1c509af9e187376 Mon Sep 17 00:00:00 2001 From: mrT23 Date: Sun, 25 Feb 2024 16:55:20 +0200 Subject: [PATCH 2/5] base_url --- pr_agent/git_providers/github_provider.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pr_agent/git_providers/github_provider.py b/pr_agent/git_providers/github_provider.py index a5a1d3b9..5e42bb80 100644 --- a/pr_agent/git_providers/github_provider.py +++ b/pr_agent/git_providers/github_provider.py @@ -480,8 +480,9 @@ class GithubProvider(GitProvider): if disable_eyes: return None try: + base_url = self.pr._requester.base_url # 'https://api.github.com' headers, data_patch = self.pr._requester.requestJsonAndCheck( - "POST", f"https://api.github.com/repos/{self.repo}/issues/comments/{issue_comment_id}/reactions", + "POST", f"{base_url}/repos/{self.repo}/issues/comments/{issue_comment_id}/reactions", input={"content": "eyes"} ) return data_patch.get("id", None) @@ -492,9 +493,10 @@ class GithubProvider(GitProvider): def remove_reaction(self, issue_comment_id: int, reaction_id: str) -> bool: try: # self.pr.get_issue_comment(issue_comment_id).delete_reaction(reaction_id) + base_url = self.pr._requester.base_url # 'https://api.github.com' headers, data_patch = self.pr._requester.requestJsonAndCheck( "DELETE", - f"https://api.github.com/repos/{self.repo}/issues/comments/{issue_comment_id}/reactions/{reaction_id}" + f"{base_url}/repos/{self.repo}/issues/comments/{issue_comment_id}/reactions/{reaction_id}" ) return True except Exception as e: From bc88e0492fb6ae5785d7151c7952fa5279d94ea2 Mon Sep 17 00:00:00 2001 From: Ori Kotek Date: Sun, 25 Feb 2024 17:12:40 +0200 Subject: [PATCH 3/5] Fix a bug --- pr_agent/git_providers/github_provider.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/pr_agent/git_providers/github_provider.py b/pr_agent/git_providers/github_provider.py index 5e42bb80..a0e922b3 100644 --- a/pr_agent/git_providers/github_provider.py +++ b/pr_agent/git_providers/github_provider.py @@ -32,6 +32,8 @@ class GithubProvider(GitProvider): self.diff_files = None self.git_files = None self.incremental = incremental + self.base_url = get_settings().get("GITHUB.BASE_URL", "https://api.github.com").rstrip("/") + self.base_url_html = self.base_url.split("api")[0].rstrip("/") if "api" in self.base_url else "https://github.com" if pr_url and 'pull' in pr_url: self.set_pr(pr_url) self.pr_commits = list(self.pr.get_commits()) @@ -412,7 +414,7 @@ class GithubProvider(GitProvider): try: # self.pr.get_issue_comment(comment_id).edit(body) headers, data_patch = self.pr._requester.requestJsonAndCheck( - "POST", f"https://api.github.com/repos/{self.repo}/pulls/{self.pr_num}/comments/{comment_id}/replies", + "POST", f"{self.base_url}/repos/{self.repo}/pulls/{self.pr_num}/comments/{comment_id}/replies", input={"body": body} ) except Exception as e: @@ -480,9 +482,8 @@ class GithubProvider(GitProvider): if disable_eyes: return None try: - base_url = self.pr._requester.base_url # 'https://api.github.com' headers, data_patch = self.pr._requester.requestJsonAndCheck( - "POST", f"{base_url}/repos/{self.repo}/issues/comments/{issue_comment_id}/reactions", + "POST", f"{self.base_url}/repos/{self.repo}/issues/comments/{issue_comment_id}/reactions", input={"content": "eyes"} ) return data_patch.get("id", None) @@ -493,10 +494,9 @@ class GithubProvider(GitProvider): def remove_reaction(self, issue_comment_id: int, reaction_id: str) -> bool: try: # self.pr.get_issue_comment(issue_comment_id).delete_reaction(reaction_id) - base_url = self.pr._requester.base_url # 'https://api.github.com' headers, data_patch = self.pr._requester.requestJsonAndCheck( "DELETE", - f"{base_url}/repos/{self.repo}/issues/comments/{issue_comment_id}/reactions/{reaction_id}" + f"{self.base_url}/repos/{self.repo}/issues/comments/{issue_comment_id}/reactions/{reaction_id}" ) return True except Exception as e: @@ -574,7 +574,7 @@ class GithubProvider(GitProvider): raise ValueError("GitHub app installation ID is required when using GitHub app deployment") auth = AppAuthentication(app_id=app_id, private_key=private_key, installation_id=self.installation_id) - return Github(app_auth=auth, base_url=get_settings().github.base_url) + return Github(app_auth=auth, base_url=self.base_url) if deployment_type == 'user': try: @@ -583,7 +583,7 @@ class GithubProvider(GitProvider): raise ValueError( "GitHub token is required when using user deployment. See: " "https://github.com/Codium-ai/pr-agent#method-2-run-from-source") from e - return Github(auth=Auth.Token(token), base_url=get_settings().github.base_url) + return Github(auth=Auth.Token(token), base_url=self.base_url) def _get_repo(self): if hasattr(self, 'repo_obj') and \ @@ -677,13 +677,12 @@ class GithubProvider(GitProvider): def get_line_link(self, relevant_file: str, relevant_line_start: int, relevant_line_end: int = None) -> str: sha_file = hashlib.sha256(relevant_file.encode('utf-8')).hexdigest() - pr_url = self.get_pr_url() # for example 'https://github.com/Codium-ai/pr-agent/pull/1' if relevant_line_start == -1: - link = f"{pr_url}/files#diff-{sha_file}" + link = f"{self.base_url_html}/{self.repo}/pull/{self.pr_num}/files#diff-{sha_file}" elif relevant_line_end: - link = f"{pr_url}/files#diff-{sha_file}R{relevant_line_start}-R{relevant_line_end}" + link = f"{self.base_url_html}/{self.repo}/pull/{self.pr_num}/files#diff-{sha_file}R{relevant_line_start}-R{relevant_line_end}" else: - link = f"{pr_url}/files#diff-{sha_file}R{relevant_line_start}" + link = f"{self.base_url_html}/{self.repo}/pull/{self.pr_num}/files#diff-{sha_file}R{relevant_line_start}" return link From 2dfddd8cea9796af2895349e4fd606d60c2e3477 Mon Sep 17 00:00:00 2001 From: Ori Kotek Date: Sun, 25 Feb 2024 17:13:35 +0200 Subject: [PATCH 4/5] Fix a bug --- pr_agent/git_providers/github_provider.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pr_agent/git_providers/github_provider.py b/pr_agent/git_providers/github_provider.py index a0e922b3..e98e9e39 100644 --- a/pr_agent/git_providers/github_provider.py +++ b/pr_agent/git_providers/github_provider.py @@ -666,8 +666,7 @@ class GithubProvider(GitProvider): # link to diff sha_file = hashlib.sha256(relevant_file.encode('utf-8')).hexdigest() - pr_url = self.get_pr_url() # for example 'https://github.com/Codium-ai/pr-agent/pull/1' - link = f"{pr_url}/files#diff-{sha_file}R{absolute_position}" + link = f"{self.base_url_html}/{self.repo}/pull/{self.pr_num}/files#diff-{sha_file}R{absolute_position}" return link except Exception as e: if get_settings().config.verbosity_level >= 2: From 5f9969f30c103f02498243111169a981b424d1fd Mon Sep 17 00:00:00 2001 From: mrT23 Date: Sun, 25 Feb 2024 17:22:35 +0200 Subject: [PATCH 5/5] base_url --- pr_agent/git_providers/github_provider.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pr_agent/git_providers/github_provider.py b/pr_agent/git_providers/github_provider.py index e98e9e39..1c23b328 100644 --- a/pr_agent/git_providers/github_provider.py +++ b/pr_agent/git_providers/github_provider.py @@ -24,6 +24,8 @@ class GithubProvider(GitProvider): self.installation_id = context.get("installation_id", None) except Exception: self.installation_id = None + self.base_url = get_settings().get("GITHUB.BASE_URL", "https://api.github.com").rstrip("/") + self.base_url_html = self.base_url.split("api")[0].rstrip("/") if "api" in self.base_url else "https://github.com" self.github_client = self._get_github_client() self.repo = None self.pr_num = None @@ -32,8 +34,6 @@ class GithubProvider(GitProvider): self.diff_files = None self.git_files = None self.incremental = incremental - self.base_url = get_settings().get("GITHUB.BASE_URL", "https://api.github.com").rstrip("/") - self.base_url_html = self.base_url.split("api")[0].rstrip("/") if "api" in self.base_url else "https://github.com" if pr_url and 'pull' in pr_url: self.set_pr(pr_url) self.pr_commits = list(self.pr.get_commits())