From 00678b46e250b8fb94610b2a2e566257f15b6539 Mon Sep 17 00:00:00 2001 From: Jon Michael Aanes Date: Mon, 9 Jun 2025 13:33:37 +0200 Subject: [PATCH] Ruff after Claude Code --- aider_gitea/__init__.py | 4 +- aider_gitea/gitea_client.py | 87 +++++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 2 deletions(-) diff --git a/aider_gitea/__init__.py b/aider_gitea/__init__.py index 9fe3f23..c0df2ba 100644 --- a/aider_gitea/__init__.py +++ b/aider_gitea/__init__.py @@ -757,8 +757,8 @@ def solve_issues_in_repository( issue_number, ) - # TODO: PR comment handling disabled for now due to missing functionality - if False: + # Handle unresolved pull request comments + if True: # Handle unresolved pull request comments handle_pr_comments( repository_config, diff --git a/aider_gitea/gitea_client.py b/aider_gitea/gitea_client.py index bf90768..07dd89c 100644 --- a/aider_gitea/gitea_client.py +++ b/aider_gitea/gitea_client.py @@ -219,3 +219,90 @@ class GiteaClient: response = self.session.get(url) response.raise_for_status() return response.json() + + def get_pull_request_comments( + self, + owner: str, + repo: str, + pr_number: int, + ) -> list[dict]: + """Fetch all review comments for a pull request. + + This method implements the flow: + 1. Download all reviews of the pull request + 2. Download all comments for each review + 3. Return all comments in a unified format + + Args: + owner (str): Owner of the repository. + repo (str): Name of the repository. + pr_number (int): Pull request number. + + Returns: + list[dict]: List of comment dictionaries with keys: + - id: Comment ID + - body: Comment body text + - path: File path the comment refers to + - line: Line number (or position) + - user: User who made the comment + """ + all_comments = [] + + # First, get all reviews for the pull request + reviews_url = f'{self.gitea_url}/repos/{owner}/{repo}/pulls/{pr_number}/reviews' + reviews_response = self.session.get(reviews_url) + reviews_response.raise_for_status() + reviews = reviews_response.json() + + # For each review, get all comments + for review in reviews: + review_id = review.get('id') + if not review_id: + continue + + # Get comments for this specific review + comments_url = f'{self.gitea_url}/repos/{owner}/{repo}/pulls/{pr_number}/reviews/{review_id}/comments' + comments_response = self.session.get(comments_url) + comments_response.raise_for_status() + comments = comments_response.json() + + # Add each comment to our collection + all_comments.extend( + [ + { + 'id': comment.get('id'), + 'body': comment.get('body', ''), + 'path': comment.get('path', ''), + 'line': comment.get('line') or comment.get('position') or 0, + 'user': comment.get('user', {}).get('login', ''), + 'review_id': review_id, + } + for comment in comments + ], + ) + + # Also get general PR comments (not tied to specific reviews) + general_comments_url = ( + f'{self.gitea_url}/repos/{owner}/{repo}/pulls/{pr_number}/comments' + ) + general_response = self.session.get(general_comments_url) + general_response.raise_for_status() + general_comments = general_response.json() + + # Add general comments that have file/line info + all_comments.extend( + [ + { + 'id': comment.get('id'), + 'body': comment.get('body', ''), + 'path': comment.get('path', ''), + 'line': comment.get('line') or comment.get('position') or 0, + 'user': comment.get('user', {}).get('login', ''), + 'review_id': None, # General comments don't belong to a specific review + } + for comment in general_comments + if comment.get('path') # Only include comments with file references + ], + ) + + return all_comments