Skip to content

Commit abd584e

Browse files
authored
Merge pull request #637 from Kaos599/main
Input Validation for API URL
2 parents 9545b78 + 34ef5c7 commit abd584e

File tree

1 file changed

+24
-6
lines changed

1 file changed

+24
-6
lines changed

kaizen/tests/actions/diff_pr_test.py

+24-6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from pydantic import BaseModel, Field, ValidationError, StrictStr
12
import requests
23
from kaizen.reviewer.code_review import CodeReviewer
34
from kaizen.llms.provider import LLMProvider
@@ -14,15 +15,31 @@
1415
}
1516

1617

18+
# Pydantic model for validating inputs
19+
class PRRequestModel(BaseModel):
20+
owner: StrictStr = Field(..., min_length=1, max_length=39, regex=r"^[a-zA-Z0-9-]+$")
21+
repo: StrictStr = Field(
22+
..., min_length=1, max_length=100, regex=r"^[a-zA-Z0-9_.-]+$"
23+
)
24+
pr_number: int = Field(..., gt=0)
25+
26+
27+
# Wrapper function to validate inputs
28+
def validate_pr_request(owner, repo, pr_number):
29+
return PRRequestModel(owner=owner, repo=repo, pr_number=pr_number)
30+
31+
1732
def get_pr_info(owner, repo, pr_number):
18-
url = f"{GITHUB_API}/repos/{owner}/{repo}/pulls/{pr_number}"
33+
validated_data = validate_pr_request(owner, repo, pr_number)
34+
url = f"{GITHUB_API}/repos/{validated_data.owner}/{validated_data.repo}/pulls/{validated_data.pr_number}"
1935
response = requests.get(url, headers=headers)
2036
response.raise_for_status()
2137
return response.json()
2238

2339

2440
def get_pr_files(owner, repo, pr_number):
25-
url = f"{GITHUB_API}/repos/{owner}/{repo}/pulls/{pr_number}/files"
41+
validated_data = validate_pr_request(owner, repo, pr_number)
42+
url = f"{GITHUB_API}/repos/{validated_data.owner}/{validated_data.repo}/pulls/{validated_data.pr_number}/files"
2643
response = requests.get(url, headers=headers)
2744
response.raise_for_status()
2845
return response.json()
@@ -44,6 +61,7 @@ def main(owner, repo, pr_number):
4461
print(f"\nDiff URL: {pr_info['diff_url']}")
4562
diff_text = get_diff(pr_info["diff_url"])
4663
print(f"Diff: \n{diff_text}\n")
64+
4765
code_reviewer = CodeReviewer(llm_provider=LLMProvider())
4866
reviews = code_reviewer.review_pull_request(
4967
pull_request_title=pr_info["title"],
@@ -52,18 +70,17 @@ def main(owner, repo, pr_number):
5270
pull_request_files=pr_files,
5371
user="local_test",
5472
)
55-
print(json.dumps(reviews.topics, indent=2))
5673

74+
print(json.dumps(reviews.topics, indent=2))
5775
print("Processing Reviews ....")
76+
5877
topics = clean_keys(reviews.topics, "moderate")
5978
review_desc = create_pr_review_text(topics)
6079
comments, topics = create_review_comments(topics)
6180

6281
print(f"\n Review Desc: \n {review_desc}")
63-
6482
print(f"\nComments: \n{json.dumps(comments)}")
6583

66-
print("################### CODE DESC")
6784
desc_generator = PRDescriptionGenerator(llm_provider=LLMProvider())
6885
description = desc_generator.generate_pull_request_desc(
6986
pull_request_title=pr_info["title"],
@@ -75,12 +92,13 @@ def main(owner, repo, pr_number):
7592

7693
print("Description: \n", description.desc)
7794

95+
except ValidationError as e:
96+
print("Input validation error:", e.json())
7897
except requests.exceptions.HTTPError as e:
7998
print(f"Error: {e}")
8099

81100

82101
if __name__ == "__main__":
83102
main("Cloud-Code-AI", "kaizen", 252)
84-
85103
print("------------------- Multi File -------------------")
86104
main("Cloud-Code-AI", "kaizen", 222)

0 commit comments

Comments
 (0)