mirror of
https://github.com/qodo-ai/pr-agent.git
synced 2025-07-11 00:00:38 +08:00
Merge pull request #1129 from Codium-ai/tr/err_protections
Tr/err protections
This commit is contained in:
@ -46,6 +46,7 @@ class BitbucketProvider(GitProvider):
|
|||||||
self.temp_comments = []
|
self.temp_comments = []
|
||||||
self.incremental = incremental
|
self.incremental = incremental
|
||||||
self.diff_files = None
|
self.diff_files = None
|
||||||
|
self.git_files = None
|
||||||
if pr_url:
|
if pr_url:
|
||||||
self.set_pr(pr_url)
|
self.set_pr(pr_url)
|
||||||
self.bitbucket_comment_api_url = self.pr._BitbucketBase__data["links"]["comments"]["href"]
|
self.bitbucket_comment_api_url = self.pr._BitbucketBase__data["links"]["comments"]["href"]
|
||||||
|
@ -22,7 +22,7 @@ class GoogleCloudStorageSecretProvider(SecretProvider):
|
|||||||
blob = self.bucket.blob(secret_name)
|
blob = self.bucket.blob(secret_name)
|
||||||
return blob.download_as_string()
|
return blob.download_as_string()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
get_logger().error(f"Failed to get secret {secret_name} from Google Cloud Storage: {e}")
|
get_logger().warning(f"Failed to get secret {secret_name} from Google Cloud Storage: {e}")
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
def store_secret(self, secret_name: str, secret_value: str):
|
def store_secret(self, secret_name: str, secret_value: str):
|
||||||
|
@ -87,6 +87,10 @@ async def gitlab_webhook(background_tasks: BackgroundTasks, request: Request):
|
|||||||
if request.headers.get("X-Gitlab-Token") and secret_provider:
|
if request.headers.get("X-Gitlab-Token") and secret_provider:
|
||||||
request_token = request.headers.get("X-Gitlab-Token")
|
request_token = request.headers.get("X-Gitlab-Token")
|
||||||
secret = secret_provider.get_secret(request_token)
|
secret = secret_provider.get_secret(request_token)
|
||||||
|
if not secret:
|
||||||
|
get_logger().warning(f"Empty secret retrieved, request_token: {request_token}")
|
||||||
|
return JSONResponse(status_code=status.HTTP_401_UNAUTHORIZED,
|
||||||
|
content=jsonable_encoder({"message": "unauthorized"}))
|
||||||
try:
|
try:
|
||||||
secret_dict = json.loads(secret)
|
secret_dict = json.loads(secret)
|
||||||
gitlab_token = secret_dict["gitlab_token"]
|
gitlab_token = secret_dict["gitlab_token"]
|
||||||
|
@ -450,8 +450,24 @@ class PRCodeSuggestions:
|
|||||||
original_initial_line = None
|
original_initial_line = None
|
||||||
for file in self.diff_files:
|
for file in self.diff_files:
|
||||||
if file.filename.strip() == relevant_file:
|
if file.filename.strip() == relevant_file:
|
||||||
if file.head_file: # in bitbucket, head_file is empty. toDo: fix this
|
if file.head_file:
|
||||||
original_initial_line = file.head_file.splitlines()[relevant_lines_start - 1]
|
file_lines = file.head_file.splitlines()
|
||||||
|
if relevant_lines_start > len(file_lines):
|
||||||
|
get_logger().warning(
|
||||||
|
"Could not dedent code snippet, because relevant_lines_start is out of range",
|
||||||
|
artifact={'filename': file.filename,
|
||||||
|
'file_content': file.head_file,
|
||||||
|
'relevant_lines_start': relevant_lines_start,
|
||||||
|
'new_code_snippet': new_code_snippet})
|
||||||
|
return new_code_snippet
|
||||||
|
else:
|
||||||
|
original_initial_line = file_lines[relevant_lines_start - 1]
|
||||||
|
else:
|
||||||
|
get_logger().warning("Could not dedent code snippet, because head_file is missing",
|
||||||
|
artifact={'filename': file.filename,
|
||||||
|
'relevant_lines_start': relevant_lines_start,
|
||||||
|
'new_code_snippet': new_code_snippet})
|
||||||
|
return new_code_snippet
|
||||||
break
|
break
|
||||||
if original_initial_line:
|
if original_initial_line:
|
||||||
suggested_initial_line = new_code_snippet.splitlines()[0]
|
suggested_initial_line = new_code_snippet.splitlines()[0]
|
||||||
@ -461,7 +477,7 @@ class PRCodeSuggestions:
|
|||||||
if delta_spaces > 0:
|
if delta_spaces > 0:
|
||||||
new_code_snippet = textwrap.indent(new_code_snippet, delta_spaces * " ").rstrip('\n')
|
new_code_snippet = textwrap.indent(new_code_snippet, delta_spaces * " ").rstrip('\n')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
get_logger().error(f"Could not dedent code snippet for file {relevant_file}, error: {e}")
|
get_logger().error(f"Error when dedenting code snippet for file {relevant_file}, error: {e}")
|
||||||
|
|
||||||
return new_code_snippet
|
return new_code_snippet
|
||||||
|
|
||||||
|
@ -510,6 +510,12 @@ extra_file_yaml =
|
|||||||
file_label_dict = {}
|
file_label_dict = {}
|
||||||
for file in self.data['pr_files']:
|
for file in self.data['pr_files']:
|
||||||
try:
|
try:
|
||||||
|
required_fields = ['changes_summary', 'changes_title', 'filename', 'label']
|
||||||
|
if not all(field in file for field in required_fields):
|
||||||
|
# can happen for example if a YAML generation was interrupted in the middle (no more tokens)
|
||||||
|
get_logger().warning(f"Missing required fields in file label dict {self.pr_id}, skipping file",
|
||||||
|
artifact={"file": file})
|
||||||
|
continue
|
||||||
filename = file['filename'].replace("'", "`").replace('"', '`')
|
filename = file['filename'].replace("'", "`").replace('"', '`')
|
||||||
changes_summary = file['changes_summary']
|
changes_summary = file['changes_summary']
|
||||||
changes_title = file['changes_title'].strip()
|
changes_title = file['changes_title'].strip()
|
||||||
|
Reference in New Issue
Block a user