adowu commited on
Commit
d33998b
verified
1 Parent(s): bbda96c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +11 -68
app.py CHANGED
@@ -14,7 +14,6 @@ PROJECT_TEMPLATES = {
14
  "flask": {
15
  "files": {
16
  "app.py": """from flask import Flask
17
-
18
  app = Flask(__name__)
19
 
20
  @app.route('/')
@@ -22,8 +21,7 @@ def hello():
22
  return "Hello, Flask!"
23
 
24
  if __name__ == '__main__':
25
- app.run(debug=True)
26
- """,
27
  "requirements.txt": "Flask",
28
  ".gitignore": "__pycache__/\n*.pyc\nvenv/\ninstance/"
29
  }
@@ -47,17 +45,14 @@ if __name__ == '__main__':
47
  "devDependencies": {
48
  "@vitejs/plugin-react": "^4.2.1",
49
  "vite": "^5.0.8"
50
- }
51
- }
52
- """,
53
  "vite.config.js": """import { defineConfig } from 'vite'
54
  import react from '@vitejs/plugin-react'
55
 
56
  // https://vitejs.dev/config/
57
  export default defineConfig({
58
  plugins: [react()],
59
- })
60
- """,
61
  "index.html": """<!doctype html>
62
  <html lang="en">
63
  <head>
@@ -70,8 +65,7 @@ export default defineConfig({
70
  <div id="root"></div>
71
  <script type="module" src="/src/main.jsx"></script>
72
  </body>
73
- </html>
74
- """,
75
  "src/main.jsx": """import React from 'react'
76
  import ReactDOM from 'react-dom/client'
77
  import App from './App.jsx'
@@ -81,8 +75,7 @@ ReactDOM.createRoot(document.getElementById('root')).render(
81
  <React.StrictMode>
82
  <App />
83
  </React.StrictMode>,
84
- )
85
- """,
86
  "src/App.jsx": """import React from 'react'
87
  import './App.css'
88
 
@@ -94,8 +87,7 @@ function App() {
94
  )
95
  }
96
 
97
- export default App
98
- """,
99
  "src/index.css": """body {
100
  margin: 0;
101
  font-family: sans-serif;
@@ -105,13 +97,10 @@ export default App
105
 
106
  code {
107
  font-family: monospace;
108
- }
109
- """,
110
  ".gitignore": "node_modules/\ndist/"
111
  }
112
- }
113
- }
114
-
115
 
116
  def get_file_content(owner, repo_name, path, branch="main"):
117
  url = f"https://raw.githubusercontent.com/{owner}/{repo_name}/{branch}/{path}"
@@ -135,14 +124,12 @@ def analyze_file_content(content, file_path):
135
  word_count = sum(len(line.split()) for line in lines)
136
  line_count = len(lines)
137
  file_extension = file_path.split('.')[-1].lower() if '.' in file_path else "unknown"
138
-
139
  return {
140
  "line_count": line_count,
141
  "word_count": word_count,
142
  "file_extension": file_extension,
143
  }
144
 
145
-
146
  def github_tool(
147
  action: str,
148
  repo_name: str = None,
@@ -171,14 +158,12 @@ def github_tool(
171
  if not all([owner, repo_name, vcs_url]):
172
  raise ValueError(
173
  "Brakuj膮ce parametry: owner, repo_name, vcs_url")
174
-
175
  # Sprawd藕, czy repozytorium ju偶 istnieje
176
  try:
177
  repo = user.get_repo(repo_name)
178
  return "Repozytorium o tej nazwie ju偶 istnieje."
179
  except GithubException:
180
  pass
181
-
182
  headers = {
183
  'Authorization': f'token {GITHUB_TOKEN}',
184
  'Accept': 'application/vnd.github.v3+json',
@@ -190,26 +175,21 @@ def github_tool(
190
  return "Import repozytorium zosta艂 rozpocz臋ty."
191
  else:
192
  return f"B艂膮d importu: {response.status_code}, {response.json()}"
193
-
194
  elif action == "create_repository":
195
  if not repo_name:
196
  raise ValueError("Brakuj膮cy parametr: repo_name")
197
  repo = user.create_repo(name=repo_name)
198
  return f"Repozytorium **{repo_name}** utworzone! [Otw贸rz repozytorium]({repo.html_url})"
199
-
200
  elif action == "create_project_from_template":
201
  if not all([repo_name, template_name]):
202
  raise ValueError("Brakuj膮ce parametry: repo_name, template_name")
203
  if template_name not in PROJECT_TEMPLATES:
204
  raise ValueError(f"Nieznany szablon projektu: {template_name}. Dost臋pne szablony: {', '.join(PROJECT_TEMPLATES.keys())}")
205
-
206
  repo = user.create_repo(name=repo_name)
207
  template = PROJECT_TEMPLATES[template_name]
208
  for file_path, file_content in template["files"].items():
209
  repo.create_file(file_path, f"Utworzenie {file_path} z szablonu {template_name}", file_content, branch="main")
210
  return f"Repozytorium **{repo_name}** utworzone z szablonu **{template_name}**! [Otw贸rz repozytorium]({repo.html_url})"
211
-
212
-
213
  elif action == "create_file":
214
  if not all([repo_name, path, content, message]):
215
  raise ValueError(
@@ -217,21 +197,18 @@ def github_tool(
217
  repo = user.get_repo(repo_name)
218
  repo.create_file(path, message, content, branch=branch)
219
  return f"Plik **`{path}`** utworzony w repozytorium **`{repo_name}`** na ga艂臋zi **`{branch}`**."
220
-
221
  elif action == "get_file":
222
  if not all([repo_name, path]):
223
  raise ValueError("Brakuj膮ce parametry: repo_name, path")
224
  repo = user.get_repo(repo_name)
225
  file_content = repo.get_contents(path, ref=branch)
226
- return f"Zawarto艣膰 pliku **`{path}`** z repozytorium **`{repo_name}`**:\n\n```\n{file_content.decoded_content.decode()}\n```" # Dodano formatowanie Markdown
227
-
228
  elif action == "get_file_content_by_url":
229
  if not file_url:
230
  raise ValueError("Brakuj膮cy parametr: file_url")
231
  response = requests.get(file_url)
232
  response.raise_for_status() # Sprawd藕 czy nie ma b艂臋du HTTP
233
- return f"Zawarto艣膰 pliku z URL **`{file_url}`**:\n\n```\n{response.text}\n```" # Dodano formatowanie Markdown
234
-
235
  elif action == "delete_file":
236
  if not all([repo_name, path]):
237
  raise ValueError("Brakuj膮ce parametry: repo_name, path")
@@ -240,7 +217,6 @@ def github_tool(
240
  repo.delete_file(path, "Usuni臋cie pliku",
241
  file_contents.sha, branch=branch)
242
  return f"Plik **`{path}`** usuni臋ty z repozytorium **`{repo_name}`** na ga艂臋zi **`{branch}`**."
243
-
244
  elif action == "update_file":
245
  if not all([repo_name, path, content, message]):
246
  raise ValueError(
@@ -250,7 +226,6 @@ def github_tool(
250
  repo.update_file(path, message, content,
251
  file_contents.sha, branch=branch)
252
  return f"Plik **`{path}`** zaktualizowany w repozytorium **`{repo_name}`** na ga艂臋zi **`{branch}`**."
253
-
254
  elif action == "list_branches":
255
  if not repo_name:
256
  raise ValueError("Brakuj膮cy parametr: repo_name")
@@ -258,7 +233,6 @@ def github_tool(
258
  branches = repo.get_branches()
259
  branch_list = "\n".join([f"- `{branch.name}`" for branch in branches]) # Formatowanie Markdown
260
  return f"Ga艂臋zie w repozytorium **`{repo_name}`**:\n{branch_list}"
261
-
262
  elif action == "create_branch":
263
  if not all([repo_name, base, head]): # base jako 藕r贸d艂o, head jako nowa nazwa
264
  raise ValueError("Brakuj膮ce parametry: repo_name, base, head")
@@ -267,14 +241,12 @@ def github_tool(
267
  repo.create_git_ref(ref=f"refs/heads/{head}",
268
  sha=source_branch.commit.sha)
269
  return f"Ga艂膮藕 **`{head}`** utworzona z **`{base}`** w repozytorium **`{repo_name}`**."
270
-
271
  elif action == "delete_branch":
272
  if not all([repo_name, branch]):
273
  raise ValueError("Brakuj膮ce parametry: repo_name, branch")
274
  repo = user.get_repo(repo_name)
275
  repo.get_git_ref(f"heads/{branch}").delete()
276
  return f"Ga艂膮藕 **`{branch}`** usuni臋ta z repozytorium **`{repo_name}`**."
277
-
278
  elif action == "create_pull_request":
279
  if not all([repo_name, title, body, base, head]):
280
  raise ValueError(
@@ -282,7 +254,6 @@ def github_tool(
282
  repo = user.get_repo(repo_name)
283
  pr = repo.create_pull(title=title, body=body, base=base, head=head)
284
  return f"Pull request utworzony! [Otw贸rz Pull Request]({pr.html_url})"
285
-
286
  elif action == "list_open_pull_requests":
287
  if not repo_name:
288
  raise ValueError("Brakuj膮cy parametr: repo_name")
@@ -292,14 +263,12 @@ def github_tool(
292
  return f"Brak otwartych pull request贸w w repozytorium **`{repo_name}`**."
293
  prs_list = "\n".join([f"- [{pr.title}]({pr.html_url})" for pr in open_prs]) # Formatowanie Markdown
294
  return f"Otwarte pull requesty w repozytorium **`{repo_name}`**:\n{prs_list}"
295
-
296
  elif action == "create_issue":
297
  if not all([repo_name, title, body]):
298
  raise ValueError("Brakuj膮ce parametry: repo_name, title, body")
299
  repo = user.get_repo(repo_name)
300
  issue = repo.create_issue(title=title, body=body)
301
  return f"Issue utworzone! [Otw贸rz Issue]({issue.html_url})"
302
-
303
  elif action == "list_issues":
304
  if not repo_name:
305
  raise ValueError("Brakuj膮cy parametr: repo_name")
@@ -309,7 +278,6 @@ def github_tool(
309
  return f"Brak otwartych issues w repozytorium **`{repo_name}`**."
310
  issues_list = "\n".join([f"- [{issue.title}]({issue.html_url})" for issue in issues]) # Formatowanie Markdown
311
  return f"Otwarte issues w repozytorium **`{repo_name}`**:\n{issues_list}"
312
-
313
  elif action == "add_label_to_issue":
314
  if not all([repo_name, issue_number, labels]):
315
  raise ValueError(
@@ -319,7 +287,6 @@ def github_tool(
319
  for label in labels.split(","):
320
  issue.add_to_labels(label.strip())
321
  return f"Etykiety **`{labels}`** dodane do issue **#{issue_number}** w repozytorium **`{repo_name}`**."
322
-
323
  elif action == "close_issue":
324
  if not all([repo_name, issue_number]):
325
  raise ValueError("Brakuj膮ce parametry: repo_name, issue_number")
@@ -327,7 +294,6 @@ def github_tool(
327
  issue = repo.get_issue(number=int(issue_number))
328
  issue.edit(state='closed')
329
  return f"Issue **#{issue_number}** zamkni臋te w repozytorium **`{repo_name}`**."
330
-
331
  elif action == "add_comment_to_issue":
332
  if not all([repo_name, issue_number, message]): # message jako tre艣膰 komentarza
333
  raise ValueError(
@@ -336,7 +302,6 @@ def github_tool(
336
  issue = repo.get_issue(number=int(issue_number))
337
  issue.create_comment(body=message)
338
  return f"Komentarz dodany do issue **#{issue_number}** w repozytorium **`{repo_name}`**."
339
-
340
  elif action == "create_release":
341
  if not all([repo_name, tag, name, message]):
342
  raise ValueError(
@@ -345,7 +310,6 @@ def github_tool(
345
  release = repo.create_git_release(
346
  tag=tag, name=name, message=message)
347
  return f"Release **`{name}`** utworzone w repozytorium **`{repo_name}`**! [Otw贸rz Release]({release.html_url})"
348
-
349
  elif action == "list_releases":
350
  if not repo_name:
351
  raise ValueError("Brakuj膮cy parametr: repo_name")
@@ -355,14 +319,12 @@ def github_tool(
355
  return f"Brak release'贸w w repozytorium **`{repo_name}`**."
356
  releases_list = "\n".join([f"- [{release.tag_name}]({release.html_url})" for release in releases]) # Formatowanie Markdown
357
  return f"Releases w repozytorium **`{repo_name}`**:\n{releases_list}"
358
-
359
  elif action == "fork_repository":
360
  if not repo_name:
361
  raise ValueError("Brakuj膮cy parametr: repo_name")
362
  repo = g.get_repo(repo_name) # Pobierz repozytorium do forkowania
363
  fork = user.create_fork(repo)
364
  return f"Repozytorium **`{repo_name}`** zosta艂o zforkowane! [Otw贸rz fork]({fork.html_url})"
365
-
366
  elif action == "list_forks":
367
  if not repo_name:
368
  raise ValueError("Brakuj膮cy parametr: repo_name")
@@ -372,24 +334,19 @@ def github_tool(
372
  return f"Brak fork贸w repozytorium **`{repo_name}`**."
373
  forks_list = "\n".join([f"- [{fork.full_name}]({fork.html_url})" for fork in forks]) # Formatowanie Markdown
374
  return f"Linki do fork贸w repozytorium **`{repo_name}`**:\n{forks_list}"
375
-
376
  elif action == "list_files":
377
  if not all([owner, repo_name]):
378
  raise ValueError("Brakuj膮ce parametry: owner, repo_name")
379
  repo = g.get_repo(f"{owner}/{repo_name}")
380
-
381
  # Dodaj obs艂ug臋 pustej 艣cie偶ki:
382
  if not path:
383
  contents = repo.get_contents("") # Pobierz zawarto艣膰 g艂贸wnego katalogu
384
  else:
385
  contents = repo.get_contents(path)
386
-
387
  if not contents:
388
  return f"Brak plik贸w w 艣cie偶ce **`{path}`** repozytorium **`{repo_name}`**." # Komunikat, gdy brak plik贸w
389
  files_list = "\n".join([f"- [{content.name}]({content.download_url})" for content in contents]) # Formatowanie Markdown
390
  return f"Pliki w 艣cie偶ce **`{path}`** repozytorium **`{repo_name}`**:\n{files_list}"
391
-
392
-
393
  elif action == "get_repository_info":
394
  if not all([owner, repo_name]):
395
  raise ValueError("Brakuj膮ce parametry: owner, repo_name")
@@ -408,28 +365,21 @@ def github_tool(
408
  }
409
  info_md = "\n".join([f"- **{key}**: {value}" for key, value in info.items()]) # Formatowanie Markdown
410
  return f"Informacje o repozytorium **`{repo_name}`**:\n{info_md}"
411
-
412
-
413
  elif action == "get_file_content":
414
  if not all([owner, repo_name, path]):
415
  raise ValueError("Brakuj膮ce parametry: owner, repo_name, path")
416
  content_text = get_file_content(owner, repo_name, path, branch)
417
- return f"Zawarto艣膰 pliku **`{path}`** z repozytorium **`{repo_name}`**:\n\n```\n{content_text}\n```" # Dodano formatowanie Markdown
418
-
419
  elif action == "analyze_repository_by_url":
420
  if not repo_url:
421
  raise ValueError("Brakuj膮cy parametr: repo_url")
422
-
423
  owner, repo_name = extract_repo_info(repo_url)
424
  if not owner or not repo_name:
425
  raise ValueError("Nieprawid艂owy link do repozytorium")
426
-
427
  try:
428
  repo = g.get_repo(f"{owner}/{repo_name}")
429
-
430
  # Pobierz list臋 plik贸w i katalog贸w
431
  contents = repo.get_contents("")
432
-
433
  # Iteruj po li艣cie i pobieraj zawarto艣膰 plik贸w
434
  file_analyses = []
435
  for content in contents:
@@ -450,21 +400,17 @@ def github_tool(
450
  for f in file_analyses
451
  ])
452
  return analysis_md
453
-
454
  except GithubException as e:
455
  return f"B艂膮d GitHub: {str(e)}"
456
 
457
  elif action == "analyze_repository_content":
458
  if not all([owner, repo_name]):
459
  raise ValueError("Brakuj膮ce parametry: owner, repo_name")
460
-
461
  try:
462
  repo = g.get_repo(f"{owner}/{repo_name}")
463
-
464
  # Pobierz list臋 plik贸w i katalog贸w
465
  contents = repo.get_contents("")
466
  file_analyses = []
467
-
468
  # Iteruj po li艣cie i pobieraj zawarto艣膰 plik贸w
469
  for content in contents:
470
  if content.type == "file":
@@ -486,7 +432,6 @@ def github_tool(
486
  return analysis_md
487
  else:
488
  raise ValueError(f"Nieznana akcja: {action}")
489
-
490
  except GithubException as e:
491
  return f"**B艂膮d GitHub:** {str(e)}"
492
  except ValueError as e:
@@ -494,10 +439,8 @@ def github_tool(
494
  except requests.exceptions.RequestException as e:
495
  return f"**B艂膮d po艂膮czenia:** {str(e)}"
496
 
497
-
498
  with gr.Blocks() as demo:
499
  gr.Markdown("# Narz臋dzie GitHub Plugingit (Uproszczony Interfejs)")
500
-
501
  with gr.Column():
502
  action = gr.Dropdown(
503
  choices=[
 
14
  "flask": {
15
  "files": {
16
  "app.py": """from flask import Flask
 
17
  app = Flask(__name__)
18
 
19
  @app.route('/')
 
21
  return "Hello, Flask!"
22
 
23
  if __name__ == '__main__':
24
+ app.run(debug=True)""",
 
25
  "requirements.txt": "Flask",
26
  ".gitignore": "__pycache__/\n*.pyc\nvenv/\ninstance/"
27
  }
 
45
  "devDependencies": {
46
  "@vitejs/plugin-react": "^4.2.1",
47
  "vite": "^5.0.8"
48
+ }}""",
 
 
49
  "vite.config.js": """import { defineConfig } from 'vite'
50
  import react from '@vitejs/plugin-react'
51
 
52
  // https://vitejs.dev/config/
53
  export default defineConfig({
54
  plugins: [react()],
55
+ })""",
 
56
  "index.html": """<!doctype html>
57
  <html lang="en">
58
  <head>
 
65
  <div id="root"></div>
66
  <script type="module" src="/src/main.jsx"></script>
67
  </body>
68
+ </html>""",
 
69
  "src/main.jsx": """import React from 'react'
70
  import ReactDOM from 'react-dom/client'
71
  import App from './App.jsx'
 
75
  <React.StrictMode>
76
  <App />
77
  </React.StrictMode>,
78
+ )""",
 
79
  "src/App.jsx": """import React from 'react'
80
  import './App.css'
81
 
 
87
  )
88
  }
89
 
90
+ export default App""",
 
91
  "src/index.css": """body {
92
  margin: 0;
93
  font-family: sans-serif;
 
97
 
98
  code {
99
  font-family: monospace;
100
+ }""",
 
101
  ".gitignore": "node_modules/\ndist/"
102
  }
103
+ }}
 
 
104
 
105
  def get_file_content(owner, repo_name, path, branch="main"):
106
  url = f"https://raw.githubusercontent.com/{owner}/{repo_name}/{branch}/{path}"
 
124
  word_count = sum(len(line.split()) for line in lines)
125
  line_count = len(lines)
126
  file_extension = file_path.split('.')[-1].lower() if '.' in file_path else "unknown"
 
127
  return {
128
  "line_count": line_count,
129
  "word_count": word_count,
130
  "file_extension": file_extension,
131
  }
132
 
 
133
  def github_tool(
134
  action: str,
135
  repo_name: str = None,
 
158
  if not all([owner, repo_name, vcs_url]):
159
  raise ValueError(
160
  "Brakuj膮ce parametry: owner, repo_name, vcs_url")
 
161
  # Sprawd藕, czy repozytorium ju偶 istnieje
162
  try:
163
  repo = user.get_repo(repo_name)
164
  return "Repozytorium o tej nazwie ju偶 istnieje."
165
  except GithubException:
166
  pass
 
167
  headers = {
168
  'Authorization': f'token {GITHUB_TOKEN}',
169
  'Accept': 'application/vnd.github.v3+json',
 
175
  return "Import repozytorium zosta艂 rozpocz臋ty."
176
  else:
177
  return f"B艂膮d importu: {response.status_code}, {response.json()}"
 
178
  elif action == "create_repository":
179
  if not repo_name:
180
  raise ValueError("Brakuj膮cy parametr: repo_name")
181
  repo = user.create_repo(name=repo_name)
182
  return f"Repozytorium **{repo_name}** utworzone! [Otw贸rz repozytorium]({repo.html_url})"
 
183
  elif action == "create_project_from_template":
184
  if not all([repo_name, template_name]):
185
  raise ValueError("Brakuj膮ce parametry: repo_name, template_name")
186
  if template_name not in PROJECT_TEMPLATES:
187
  raise ValueError(f"Nieznany szablon projektu: {template_name}. Dost臋pne szablony: {', '.join(PROJECT_TEMPLATES.keys())}")
 
188
  repo = user.create_repo(name=repo_name)
189
  template = PROJECT_TEMPLATES[template_name]
190
  for file_path, file_content in template["files"].items():
191
  repo.create_file(file_path, f"Utworzenie {file_path} z szablonu {template_name}", file_content, branch="main")
192
  return f"Repozytorium **{repo_name}** utworzone z szablonu **{template_name}**! [Otw贸rz repozytorium]({repo.html_url})"
 
 
193
  elif action == "create_file":
194
  if not all([repo_name, path, content, message]):
195
  raise ValueError(
 
197
  repo = user.get_repo(repo_name)
198
  repo.create_file(path, message, content, branch=branch)
199
  return f"Plik **`{path}`** utworzony w repozytorium **`{repo_name}`** na ga艂臋zi **`{branch}`**."
 
200
  elif action == "get_file":
201
  if not all([repo_name, path]):
202
  raise ValueError("Brakuj膮ce parametry: repo_name, path")
203
  repo = user.get_repo(repo_name)
204
  file_content = repo.get_contents(path, ref=branch)
205
+ return f"Zawarto艣膰 pliku **`{path}`** z repozytorium **`{repo_name}`**:\n\n`\n{file_content.decoded_content.decode()}\n`" # Dodano formatowanie Markdown
 
206
  elif action == "get_file_content_by_url":
207
  if not file_url:
208
  raise ValueError("Brakuj膮cy parametr: file_url")
209
  response = requests.get(file_url)
210
  response.raise_for_status() # Sprawd藕 czy nie ma b艂臋du HTTP
211
+ return f"Zawarto艣膰 pliku z URL **`{file_url}`**:\n\n`\n{response.text}\n`" # Dodano formatowanie Markdown
 
212
  elif action == "delete_file":
213
  if not all([repo_name, path]):
214
  raise ValueError("Brakuj膮ce parametry: repo_name, path")
 
217
  repo.delete_file(path, "Usuni臋cie pliku",
218
  file_contents.sha, branch=branch)
219
  return f"Plik **`{path}`** usuni臋ty z repozytorium **`{repo_name}`** na ga艂臋zi **`{branch}`**."
 
220
  elif action == "update_file":
221
  if not all([repo_name, path, content, message]):
222
  raise ValueError(
 
226
  repo.update_file(path, message, content,
227
  file_contents.sha, branch=branch)
228
  return f"Plik **`{path}`** zaktualizowany w repozytorium **`{repo_name}`** na ga艂臋zi **`{branch}`**."
 
229
  elif action == "list_branches":
230
  if not repo_name:
231
  raise ValueError("Brakuj膮cy parametr: repo_name")
 
233
  branches = repo.get_branches()
234
  branch_list = "\n".join([f"- `{branch.name}`" for branch in branches]) # Formatowanie Markdown
235
  return f"Ga艂臋zie w repozytorium **`{repo_name}`**:\n{branch_list}"
 
236
  elif action == "create_branch":
237
  if not all([repo_name, base, head]): # base jako 藕r贸d艂o, head jako nowa nazwa
238
  raise ValueError("Brakuj膮ce parametry: repo_name, base, head")
 
241
  repo.create_git_ref(ref=f"refs/heads/{head}",
242
  sha=source_branch.commit.sha)
243
  return f"Ga艂膮藕 **`{head}`** utworzona z **`{base}`** w repozytorium **`{repo_name}`**."
 
244
  elif action == "delete_branch":
245
  if not all([repo_name, branch]):
246
  raise ValueError("Brakuj膮ce parametry: repo_name, branch")
247
  repo = user.get_repo(repo_name)
248
  repo.get_git_ref(f"heads/{branch}").delete()
249
  return f"Ga艂膮藕 **`{branch}`** usuni臋ta z repozytorium **`{repo_name}`**."
 
250
  elif action == "create_pull_request":
251
  if not all([repo_name, title, body, base, head]):
252
  raise ValueError(
 
254
  repo = user.get_repo(repo_name)
255
  pr = repo.create_pull(title=title, body=body, base=base, head=head)
256
  return f"Pull request utworzony! [Otw贸rz Pull Request]({pr.html_url})"
 
257
  elif action == "list_open_pull_requests":
258
  if not repo_name:
259
  raise ValueError("Brakuj膮cy parametr: repo_name")
 
263
  return f"Brak otwartych pull request贸w w repozytorium **`{repo_name}`**."
264
  prs_list = "\n".join([f"- [{pr.title}]({pr.html_url})" for pr in open_prs]) # Formatowanie Markdown
265
  return f"Otwarte pull requesty w repozytorium **`{repo_name}`**:\n{prs_list}"
 
266
  elif action == "create_issue":
267
  if not all([repo_name, title, body]):
268
  raise ValueError("Brakuj膮ce parametry: repo_name, title, body")
269
  repo = user.get_repo(repo_name)
270
  issue = repo.create_issue(title=title, body=body)
271
  return f"Issue utworzone! [Otw贸rz Issue]({issue.html_url})"
 
272
  elif action == "list_issues":
273
  if not repo_name:
274
  raise ValueError("Brakuj膮cy parametr: repo_name")
 
278
  return f"Brak otwartych issues w repozytorium **`{repo_name}`**."
279
  issues_list = "\n".join([f"- [{issue.title}]({issue.html_url})" for issue in issues]) # Formatowanie Markdown
280
  return f"Otwarte issues w repozytorium **`{repo_name}`**:\n{issues_list}"
 
281
  elif action == "add_label_to_issue":
282
  if not all([repo_name, issue_number, labels]):
283
  raise ValueError(
 
287
  for label in labels.split(","):
288
  issue.add_to_labels(label.strip())
289
  return f"Etykiety **`{labels}`** dodane do issue **#{issue_number}** w repozytorium **`{repo_name}`**."
 
290
  elif action == "close_issue":
291
  if not all([repo_name, issue_number]):
292
  raise ValueError("Brakuj膮ce parametry: repo_name, issue_number")
 
294
  issue = repo.get_issue(number=int(issue_number))
295
  issue.edit(state='closed')
296
  return f"Issue **#{issue_number}** zamkni臋te w repozytorium **`{repo_name}`**."
 
297
  elif action == "add_comment_to_issue":
298
  if not all([repo_name, issue_number, message]): # message jako tre艣膰 komentarza
299
  raise ValueError(
 
302
  issue = repo.get_issue(number=int(issue_number))
303
  issue.create_comment(body=message)
304
  return f"Komentarz dodany do issue **#{issue_number}** w repozytorium **`{repo_name}`**."
 
305
  elif action == "create_release":
306
  if not all([repo_name, tag, name, message]):
307
  raise ValueError(
 
310
  release = repo.create_git_release(
311
  tag=tag, name=name, message=message)
312
  return f"Release **`{name}`** utworzone w repozytorium **`{repo_name}`**! [Otw贸rz Release]({release.html_url})"
 
313
  elif action == "list_releases":
314
  if not repo_name:
315
  raise ValueError("Brakuj膮cy parametr: repo_name")
 
319
  return f"Brak release'贸w w repozytorium **`{repo_name}`**."
320
  releases_list = "\n".join([f"- [{release.tag_name}]({release.html_url})" for release in releases]) # Formatowanie Markdown
321
  return f"Releases w repozytorium **`{repo_name}`**:\n{releases_list}"
 
322
  elif action == "fork_repository":
323
  if not repo_name:
324
  raise ValueError("Brakuj膮cy parametr: repo_name")
325
  repo = g.get_repo(repo_name) # Pobierz repozytorium do forkowania
326
  fork = user.create_fork(repo)
327
  return f"Repozytorium **`{repo_name}`** zosta艂o zforkowane! [Otw贸rz fork]({fork.html_url})"
 
328
  elif action == "list_forks":
329
  if not repo_name:
330
  raise ValueError("Brakuj膮cy parametr: repo_name")
 
334
  return f"Brak fork贸w repozytorium **`{repo_name}`**."
335
  forks_list = "\n".join([f"- [{fork.full_name}]({fork.html_url})" for fork in forks]) # Formatowanie Markdown
336
  return f"Linki do fork贸w repozytorium **`{repo_name}`**:\n{forks_list}"
 
337
  elif action == "list_files":
338
  if not all([owner, repo_name]):
339
  raise ValueError("Brakuj膮ce parametry: owner, repo_name")
340
  repo = g.get_repo(f"{owner}/{repo_name}")
 
341
  # Dodaj obs艂ug臋 pustej 艣cie偶ki:
342
  if not path:
343
  contents = repo.get_contents("") # Pobierz zawarto艣膰 g艂贸wnego katalogu
344
  else:
345
  contents = repo.get_contents(path)
 
346
  if not contents:
347
  return f"Brak plik贸w w 艣cie偶ce **`{path}`** repozytorium **`{repo_name}`**." # Komunikat, gdy brak plik贸w
348
  files_list = "\n".join([f"- [{content.name}]({content.download_url})" for content in contents]) # Formatowanie Markdown
349
  return f"Pliki w 艣cie偶ce **`{path}`** repozytorium **`{repo_name}`**:\n{files_list}"
 
 
350
  elif action == "get_repository_info":
351
  if not all([owner, repo_name]):
352
  raise ValueError("Brakuj膮ce parametry: owner, repo_name")
 
365
  }
366
  info_md = "\n".join([f"- **{key}**: {value}" for key, value in info.items()]) # Formatowanie Markdown
367
  return f"Informacje o repozytorium **`{repo_name}`**:\n{info_md}"
 
 
368
  elif action == "get_file_content":
369
  if not all([owner, repo_name, path]):
370
  raise ValueError("Brakuj膮ce parametry: owner, repo_name, path")
371
  content_text = get_file_content(owner, repo_name, path, branch)
372
+ return f"Zawarto艣膰 pliku **`{path}`** z repozytorium **`{repo_name}`**:\n\n`\n{content_text}\n`" # Dodano formatowanie Markdown
 
373
  elif action == "analyze_repository_by_url":
374
  if not repo_url:
375
  raise ValueError("Brakuj膮cy parametr: repo_url")
 
376
  owner, repo_name = extract_repo_info(repo_url)
377
  if not owner or not repo_name:
378
  raise ValueError("Nieprawid艂owy link do repozytorium")
 
379
  try:
380
  repo = g.get_repo(f"{owner}/{repo_name}")
 
381
  # Pobierz list臋 plik贸w i katalog贸w
382
  contents = repo.get_contents("")
 
383
  # Iteruj po li艣cie i pobieraj zawarto艣膰 plik贸w
384
  file_analyses = []
385
  for content in contents:
 
400
  for f in file_analyses
401
  ])
402
  return analysis_md
 
403
  except GithubException as e:
404
  return f"B艂膮d GitHub: {str(e)}"
405
 
406
  elif action == "analyze_repository_content":
407
  if not all([owner, repo_name]):
408
  raise ValueError("Brakuj膮ce parametry: owner, repo_name")
 
409
  try:
410
  repo = g.get_repo(f"{owner}/{repo_name}")
 
411
  # Pobierz list臋 plik贸w i katalog贸w
412
  contents = repo.get_contents("")
413
  file_analyses = []
 
414
  # Iteruj po li艣cie i pobieraj zawarto艣膰 plik贸w
415
  for content in contents:
416
  if content.type == "file":
 
432
  return analysis_md
433
  else:
434
  raise ValueError(f"Nieznana akcja: {action}")
 
435
  except GithubException as e:
436
  return f"**B艂膮d GitHub:** {str(e)}"
437
  except ValueError as e:
 
439
  except requests.exceptions.RequestException as e:
440
  return f"**B艂膮d po艂膮czenia:** {str(e)}"
441
 
 
442
  with gr.Blocks() as demo:
443
  gr.Markdown("# Narz臋dzie GitHub Plugingit (Uproszczony Interfejs)")
 
444
  with gr.Column():
445
  action = gr.Dropdown(
446
  choices=[