Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
@@ -14,7 +14,6 @@ import webbrowser
|
|
14 |
import urllib.parse
|
15 |
import warnings
|
16 |
import torch
|
17 |
-
import spaces
|
18 |
from accelerate import Accelerator
|
19 |
|
20 |
warnings.filterwarnings('ignore', category=UserWarning, module='__main__')
|
@@ -123,20 +122,20 @@ class GitHubBot:
|
|
123 |
"""Initialize GitHub API with token"""
|
124 |
self.github_api = GitHubAPI(token)
|
125 |
|
126 |
-
def fetch_issues(self, token: str,
|
127 |
"""Fetch issues from GitHub repository"""
|
128 |
try:
|
129 |
self.initialize_api(token)
|
130 |
-
return self.github_api.get_issues(
|
131 |
except Exception as e:
|
132 |
logger.error(f"Error fetching issues: {str(e)}")
|
133 |
return []
|
134 |
|
135 |
-
def resolve_issue(self, token: str,
|
136 |
"""Resolve a GitHub issue and submit PR."""
|
137 |
try:
|
138 |
self.initialize_api(token)
|
139 |
-
self.github_api.get_repository(
|
140 |
|
141 |
# Create resolution file
|
142 |
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
@@ -160,7 +159,7 @@ class GitHubBot:
|
|
160 |
subprocess.run(['git', 'push', 'origin', 'HEAD'], check=True)
|
161 |
|
162 |
# Open Pull Request page
|
163 |
-
webbrowser.open(f'https://github.com/{forked_repo.split("/")[-1]}/compare/master...{
|
164 |
|
165 |
return f"Resolution saved: {resolution_file}"
|
166 |
|
@@ -169,9 +168,9 @@ class GitHubBot:
|
|
169 |
logger.error(error_msg)
|
170 |
return error_msg
|
171 |
|
172 |
-
def handle_issue_selection(token,
|
173 |
bot = GitHubBot()
|
174 |
-
result = bot.resolve_issue(token,
|
175 |
return result
|
176 |
|
177 |
custom_css = """
|
@@ -255,14 +254,9 @@ def create_gradio_interface(input_file, output_directory):
|
|
255 |
type="password",
|
256 |
elem_classes="input input-bordered input-primary"
|
257 |
)
|
258 |
-
|
259 |
-
label="Repository
|
260 |
-
placeholder="Enter repository owner
|
261 |
-
elem_classes="input input-bordered input-primary"
|
262 |
-
)
|
263 |
-
github_repo = gr.Textbox(
|
264 |
-
label="Repository Name",
|
265 |
-
placeholder="Enter repository name",
|
266 |
elem_classes="input input-bordered input-primary"
|
267 |
)
|
268 |
|
@@ -303,11 +297,12 @@ def create_gradio_interface(input_file, output_directory):
|
|
303 |
|
304 |
gr.HTML("</div></div>") # Close card and container divs
|
305 |
|
306 |
-
def fetch_issues_handler(token,
|
307 |
-
if not all([token,
|
308 |
return gr.Dropdown(choices=["Please provide all required fields"])
|
309 |
|
310 |
-
|
|
|
311 |
if not issues:
|
312 |
return gr.Dropdown(choices=["No issues found or error occurred"])
|
313 |
|
@@ -315,20 +310,21 @@ def create_gradio_interface(input_file, output_directory):
|
|
315 |
choices=[f"#{issue['number']}: {issue['title']}" for issue in issues]
|
316 |
)
|
317 |
|
318 |
-
def resolve_issue_handler(token,
|
319 |
if not selected_issue:
|
320 |
return "Please select an issue first"
|
321 |
|
322 |
try:
|
|
|
323 |
issue_number = int(selected_issue.split(':')[0][1:])
|
324 |
-
return handle_issue_selection(token,
|
325 |
except Exception as e:
|
326 |
return f"Error: {str(e)}"
|
327 |
|
328 |
# Connect components
|
329 |
fetch_button.click(
|
330 |
fetch_issues_handler,
|
331 |
-
inputs=[github_token,
|
332 |
outputs=[issue_dropdown]
|
333 |
)
|
334 |
|
@@ -336,8 +332,7 @@ def create_gradio_interface(input_file, output_directory):
|
|
336 |
resolve_issue_handler,
|
337 |
inputs=[
|
338 |
github_token,
|
339 |
-
|
340 |
-
github_repo,
|
341 |
issue_dropdown,
|
342 |
resolution_text,
|
343 |
forked_repo
|
|
|
14 |
import urllib.parse
|
15 |
import warnings
|
16 |
import torch
|
|
|
17 |
from accelerate import Accelerator
|
18 |
|
19 |
warnings.filterwarnings('ignore', category=UserWarning, module='__main__')
|
|
|
122 |
"""Initialize GitHub API with token"""
|
123 |
self.github_api = GitHubAPI(token)
|
124 |
|
125 |
+
def fetch_issues(self, token: str, owner: str, repo: str) -> List[Dict]:
|
126 |
"""Fetch issues from GitHub repository"""
|
127 |
try:
|
128 |
self.initialize_api(token)
|
129 |
+
return self.github_api.get_issues(owner, repo)
|
130 |
except Exception as e:
|
131 |
logger.error(f"Error fetching issues: {str(e)}")
|
132 |
return []
|
133 |
|
134 |
+
def resolve_issue(self, token: str, owner: str, repo: str, issue_number: int, resolution: str, forked_repo: str) -> str:
|
135 |
"""Resolve a GitHub issue and submit PR."""
|
136 |
try:
|
137 |
self.initialize_api(token)
|
138 |
+
self.github_api.get_repository(owner, repo)
|
139 |
|
140 |
# Create resolution file
|
141 |
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
|
159 |
subprocess.run(['git', 'push', 'origin', 'HEAD'], check=True)
|
160 |
|
161 |
# Open Pull Request page
|
162 |
+
webbrowser.open(f'https://github.com/{forked_repo.split("/")[-1]}/compare/master...{owner}:{forked_repo.split("/")[-1]}_resolved_issue_{issue_number}')
|
163 |
|
164 |
return f"Resolution saved: {resolution_file}"
|
165 |
|
|
|
168 |
logger.error(error_msg)
|
169 |
return error_msg
|
170 |
|
171 |
+
def handle_issue_selection(token, owner, repo, issue_number, resolution, forked_repo):
|
172 |
bot = GitHubBot()
|
173 |
+
result = bot.resolve_issue(token, owner, repo, issue_number, resolution, forked_repo)
|
174 |
return result
|
175 |
|
176 |
custom_css = """
|
|
|
254 |
type="password",
|
255 |
elem_classes="input input-bordered input-primary"
|
256 |
)
|
257 |
+
repo_link = gr.Textbox(
|
258 |
+
label="Repository Link",
|
259 |
+
placeholder="Enter repository link (e.g., https://github.com/owner/repo)",
|
|
|
|
|
|
|
|
|
|
|
260 |
elem_classes="input input-bordered input-primary"
|
261 |
)
|
262 |
|
|
|
297 |
|
298 |
gr.HTML("</div></div>") # Close card and container divs
|
299 |
|
300 |
+
def fetch_issues_handler(token, repo_link):
|
301 |
+
if not all([token, repo_link]):
|
302 |
return gr.Dropdown(choices=["Please provide all required fields"])
|
303 |
|
304 |
+
owner, repo = repo_link.split('/')[-2:]
|
305 |
+
issues = bot.fetch_issues(token, owner, repo)
|
306 |
if not issues:
|
307 |
return gr.Dropdown(choices=["No issues found or error occurred"])
|
308 |
|
|
|
310 |
choices=[f"#{issue['number']}: {issue['title']}" for issue in issues]
|
311 |
)
|
312 |
|
313 |
+
def resolve_issue_handler(token, repo_link, selected_issue, resolution, forked_repo):
|
314 |
if not selected_issue:
|
315 |
return "Please select an issue first"
|
316 |
|
317 |
try:
|
318 |
+
owner, repo = repo_link.split('/')[-2:]
|
319 |
issue_number = int(selected_issue.split(':')[0][1:])
|
320 |
+
return handle_issue_selection(token, owner, repo, issue_number, resolution, forked_repo)
|
321 |
except Exception as e:
|
322 |
return f"Error: {str(e)}"
|
323 |
|
324 |
# Connect components
|
325 |
fetch_button.click(
|
326 |
fetch_issues_handler,
|
327 |
+
inputs=[github_token, repo_link],
|
328 |
outputs=[issue_dropdown]
|
329 |
)
|
330 |
|
|
|
332 |
resolve_issue_handler,
|
333 |
inputs=[
|
334 |
github_token,
|
335 |
+
repo_link,
|
|
|
336 |
issue_dropdown,
|
337 |
resolution_text,
|
338 |
forked_repo
|