acecalisto3 commited on
Commit
c9f4336
·
verified ·
1 Parent(s): 0891572

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -12
app.py CHANGED
@@ -40,8 +40,9 @@ def initialize_environment():
40
 
41
  # GitHub API handler
42
  class GitHubAPI:
43
- def __init__(self, token: str):
44
  self.token = token
 
45
  self.headers = {
46
  'Authorization': f'token {token}',
47
  'Accept': 'application/vnd.github.v3+json'
@@ -59,12 +60,12 @@ class GitHubAPI:
59
  if remaining < 10:
60
  wait_time = max(0, reset_time - int(time.time()))
61
  if wait_time > 0:
62
- logger.warning(f"Rate limit nearly exceeded. Waiting {wait_time} seconds before retrying...")
63
  time.sleep(wait_time)
64
  return False
65
  return True
66
  except requests.exceptions.RequestException as e:
67
- logger.error(f"Error checking rate limit: {str(e)}. Retrying...")
68
  return True
69
 
70
  def get_repository(self, owner: str, repo: str) -> Dict:
@@ -73,10 +74,10 @@ class GitHubAPI:
73
  response.raise_for_status()
74
  return response.json()
75
  except requests.HTTPError as e:
76
- logger.error(f"HTTP error getting repository info for {owner}/{repo}: {str(e)}. Please check the repository details.")
77
  raise
78
  except Exception as e:
79
- logger.error(f"Error getting repository info: {str(e)}")
80
  raise
81
 
82
  def get_issues(self, owner: str, repo: str, state: str = 'open') -> List[Dict]:
@@ -89,23 +90,24 @@ class GitHubAPI:
89
  issues = response.json()
90
  return [issue for issue in issues if 'pull_request' not in issue]
91
  except Exception as e:
92
- logger.error(f"Error fetching issues for repository {owner}/{repo}: {str(e)}. Please verify the repository and token.")
93
  return []
94
 
95
  # GitHub Bot
96
  class GitHubBot:
97
- def __init__(self):
98
  self.github_api = None
 
99
 
100
  def initialize_api(self, token: str):
101
- self.github_api = GitHubAPI(token)
102
 
103
  def fetch_issues(self, token: str, owner: str, repo: str) -> List[Dict]:
104
  try:
105
  self.initialize_api(token)
106
  return self.github_api.get_issues(owner, repo)
107
  except Exception as e:
108
- logger.error(f"Error fetching issues for repository {owner}/{repo}: {str(e)}")
109
  return []
110
 
111
  def resolve_issue(self, token: str, owner: str, repo: str, issue_number: int, resolution: str, forked_repo: str) -> str:
@@ -120,6 +122,10 @@ class GitHubBot:
120
  with open(resolution_file, "w") as f:
121
  f.write(f"# Resolution for Issue #{issue_number}\n\n{resolution}")
122
 
 
 
 
 
123
  # Clone the forked repo
124
  subprocess.run(['git', 'clone', forked_repo, '/tmp/' + forked_repo.split('/')[-1]], check=True)
125
 
@@ -141,7 +147,7 @@ class GitHubBot:
141
 
142
  except Exception as e:
143
  error_msg = f"Error resolving issue #{issue_number} in repository {owner}/{repo}: {str(e)}"
144
- logger.error(error_msg)
145
  return error_msg
146
 
147
  def suggest_automated_fixes(self, issue_title: str) -> str:
@@ -150,7 +156,7 @@ class GitHubBot:
150
  return "No automated fix available for this issue."
151
 
152
  def handle_issue_selection(token, owner, repo, issue_number, resolution, forked_repo):
153
- bot = GitHubBot()
154
  result = bot.resolve_issue(token, owner, repo, issue_number, resolution, forked_repo)
155
  return result
156
 
@@ -182,7 +188,7 @@ def extract_info_from_url(url: str) -> Dict[str, Any]:
182
  return info
183
 
184
  # Initialize GitHubBot globally
185
- bot = GitHubBot()
186
 
187
  # Define missing functions with validation
188
  def fetch_issues(token, repo_url):
@@ -261,6 +267,7 @@ def cleanup():
261
  def main():
262
  # Initialize environment and logger
263
  initialize_environment()
 
264
  logger = initialize_logger()
265
 
266
  # Register cleanup handlers
 
40
 
41
  # GitHub API handler
42
  class GitHubAPI:
43
+ def __init__(self, token: str, logger: logging.Logger):
44
  self.token = token
45
+ self.logger = logger
46
  self.headers = {
47
  'Authorization': f'token {token}',
48
  'Accept': 'application/vnd.github.v3+json'
 
60
  if remaining < 10:
61
  wait_time = max(0, reset_time - int(time.time()))
62
  if wait_time > 0:
63
+ self.logger.warning(f"Rate limit nearly exceeded. Waiting {wait_time} seconds before retrying...")
64
  time.sleep(wait_time)
65
  return False
66
  return True
67
  except requests.exceptions.RequestException as e:
68
+ self.logger.error(f"Error checking rate limit: {str(e)}. Retrying...")
69
  return True
70
 
71
  def get_repository(self, owner: str, repo: str) -> Dict:
 
74
  response.raise_for_status()
75
  return response.json()
76
  except requests.HTTPError as e:
77
+ self.logger.error(f"HTTP error getting repository info for {owner}/{repo}: {str(e)}. Please check the repository details.")
78
  raise
79
  except Exception as e:
80
+ self.logger.error(f"Error getting repository info: {str(e)}")
81
  raise
82
 
83
  def get_issues(self, owner: str, repo: str, state: str = 'open') -> List[Dict]:
 
90
  issues = response.json()
91
  return [issue for issue in issues if 'pull_request' not in issue]
92
  except Exception as e:
93
+ self.logger.error(f"Error fetching issues for repository {owner}/{repo}: {str(e)}. Please verify the repository and token.")
94
  return []
95
 
96
  # GitHub Bot
97
  class GitHubBot:
98
+ def __init__(self, logger: logging.Logger):
99
  self.github_api = None
100
+ self.logger = logger
101
 
102
  def initialize_api(self, token: str):
103
+ self.github_api = GitHubAPI(token, self.logger)
104
 
105
  def fetch_issues(self, token: str, owner: str, repo: str) -> List[Dict]:
106
  try:
107
  self.initialize_api(token)
108
  return self.github_api.get_issues(owner, repo)
109
  except Exception as e:
110
+ self.logger.error(f"Error fetching issues for repository {owner}/{repo}: {str(e )}")
111
  return []
112
 
113
  def resolve_issue(self, token: str, owner: str, repo: str, issue_number: int, resolution: str, forked_repo: str) -> str:
 
122
  with open(resolution_file, "w") as f:
123
  f.write(f"# Resolution for Issue #{issue_number}\n\n{resolution}")
124
 
125
+ # Validate forked_repo before cloning
126
+ if not forked_repo:
127
+ raise ValueError("Forked repository URL cannot be empty.")
128
+
129
  # Clone the forked repo
130
  subprocess.run(['git', 'clone', forked_repo, '/tmp/' + forked_repo.split('/')[-1]], check=True)
131
 
 
147
 
148
  except Exception as e:
149
  error_msg = f"Error resolving issue #{issue_number} in repository {owner}/{repo}: {str(e)}"
150
+ self.logger.error(error_msg)
151
  return error_msg
152
 
153
  def suggest_automated_fixes(self, issue_title: str) -> str:
 
156
  return "No automated fix available for this issue."
157
 
158
  def handle_issue_selection(token, owner, repo, issue_number, resolution, forked_repo):
159
+ bot = GitHubBot(logger)
160
  result = bot.resolve_issue(token, owner, repo, issue_number, resolution, forked_repo)
161
  return result
162
 
 
188
  return info
189
 
190
  # Initialize GitHubBot globally
191
+ bot = GitHubBot(logger)
192
 
193
  # Define missing functions with validation
194
  def fetch_issues(token, repo_url):
 
267
  def main():
268
  # Initialize environment and logger
269
  initialize_environment()
270
+ global logger
271
  logger = initialize_logger()
272
 
273
  # Register cleanup handlers