Fix Bitbucket Server 401 unauthorized when posting inline coments; fix Bitbucket loading .pr_agent.toml

This commit is contained in:
MarkRx
2024-07-30 16:19:57 -04:00
parent d8545a2b28
commit 288e9bb8ca

View File

@ -2,7 +2,7 @@ import json
from typing import Optional, Tuple from typing import Optional, Tuple
from urllib.parse import quote_plus, urlparse from urllib.parse import quote_plus, urlparse
import requests from requests.exceptions import HTTPError
from atlassian.bitbucket import Bitbucket from atlassian.bitbucket import Bitbucket
from starlette_context import context from starlette_context import context
@ -18,17 +18,6 @@ class BitbucketServerProvider(GitProvider):
def __init__( def __init__(
self, pr_url: Optional[str] = None, incremental: Optional[bool] = False self, pr_url: Optional[str] = None, incremental: Optional[bool] = False
): ):
s = requests.Session()
try:
bearer = context.get("bitbucket_bearer_token", None)
s.headers["Authorization"] = f"Bearer {bearer}"
except Exception:
s.headers[
"Authorization"
] = f'Bearer {get_settings().get("BITBUCKET_SERVER.BEARER_TOKEN", None)}'
s.headers["Content-Type"] = "application/json"
self.headers = s.headers
self.bitbucket_server_url = None self.bitbucket_server_url = None
self.workspace_slug = None self.workspace_slug = None
self.repo_slug = None self.repo_slug = None
@ -50,14 +39,15 @@ class BitbucketServerProvider(GitProvider):
def get_repo_settings(self): def get_repo_settings(self):
try: try:
url = (f"{self.bitbucket_server_url}/projects/{self.workspace_slug}/repos/{self.repo_slug}/src/" content = self.bitbucket_client.get_content_of_file(self.workspace_slug, self.repo_slug, ".pr_agent.toml", self.get_pr_branch())
f"{self.pr.destination_branch}/.pr_agent.toml")
response = requests.request("GET", url, headers=self.headers) return content
if response.status_code == 404: # not found except Exception as e:
if isinstance(e, HTTPError):
if e.response.status_code == 404: # not found
return "" return ""
contents = response.text.encode('utf-8')
return contents get_logger().error(f"Failed to load .pr_agent.toml file, error: {e}")
except Exception:
return "" return ""
def get_pr_id(self): def get_pr_id(self):
@ -247,7 +237,7 @@ class BitbucketServerProvider(GitProvider):
} }
try: try:
requests.post(url=self._get_pr_comments_url(), json=payload, headers=self.headers).raise_for_status() self.bitbucket_client.post(self._get_pr_comments_path(), data=payload)
except Exception as e: except Exception as e:
get_logger().error(f"Failed to publish inline comment to '{file}' at line {from_line}, error: {e}") get_logger().error(f"Failed to publish inline comment to '{file}' at line {from_line}, error: {e}")
raise e raise e
@ -414,5 +404,5 @@ class BitbucketServerProvider(GitProvider):
def get_pr_labels(self, update=False): def get_pr_labels(self, update=False):
pass pass
def _get_pr_comments_url(self): def _get_pr_comments_path(self):
return f"{self.bitbucket_server_url}/rest/api/latest/projects/{self.workspace_slug}/repos/{self.repo_slug}/pull-requests/{self.pr_num}/comments" return f"rest/api/latest/projects/{self.workspace_slug}/repos/{self.repo_slug}/pull-requests/{self.pr_num}/comments"