-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathgithub_auth.py
More file actions
96 lines (64 loc) · 3.69 KB
/
Copy pathgithub_auth.py
File metadata and controls
96 lines (64 loc) · 3.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
"""
github_auth.py — Backward-compatibility Shim
Re-exports GitHub REST API functions from `knowledge_engine.py`.
"""
import urllib.parse
from typing import Dict, Any, List, Optional
import knowledge_engine
GITHUB_AUTH_URL = knowledge_engine.GITHUB_AUTH_URL
GITHUB_TOKEN_URL = knowledge_engine.GITHUB_TOKEN_URL
GITHUB_API_BASE = knowledge_engine.GITHUB_API_BASE
def get_authorization_url(state: str = "knowledge_auth_state", scope: str = "read:user repo") -> str:
params = {
"client_id": knowledge_engine.GITHUB_CLIENT_ID,
"redirect_uri": knowledge_engine.REDIRECT_URI,
"scope": scope,
"state": state,
"allow_signup": "true",
}
return f"{GITHUB_AUTH_URL}?{urllib.parse.urlencode(params)}"
def exchange_code_for_token(code: str) -> Optional[str]:
payload = {
"client_id": knowledge_engine.GITHUB_CLIENT_ID,
"client_secret": knowledge_engine.GITHUB_CLIENT_SECRET,
"code": code,
"redirect_uri": knowledge_engine.REDIRECT_URI,
}
headers = {"Accept": "application/json"}
try:
import httpx
with httpx.Client(timeout=10.0) as client:
res = client.post(GITHUB_TOKEN_URL, data=payload, headers=headers)
res.raise_for_status()
return res.json().get("access_token")
except Exception as e:
print(f"Error exchanging code for token: {e}")
return None
def fetch_github_user(access_token: str) -> Optional[Dict[str, Any]]:
return knowledge_engine.GitHubClient.fetch_user(access_token)
def fetch_user_repositories(access_token: str, visibility: str = "all") -> List[Dict[str, Any]]:
return knowledge_engine.GitHubClient.fetch_repositories(access_token, visibility)
def fetch_repo_issues(access_token: str, owner: str, repo: str) -> List[Dict[str, Any]]:
return knowledge_engine.GitHubClient.fetch_repo_issues(access_token, owner, repo)
def fetch_issue_comments(access_token: str, owner: str, repo: str, issue_number: int) -> List[Dict[str, Any]]:
return knowledge_engine.GitHubClient.fetch_issue_comments(access_token, owner, repo, issue_number)
def fetch_repo_file_content(access_token: str, owner: str, repo: str, file_path: str) -> Optional[str]:
return knowledge_engine.GitHubClient.fetch_file_content(access_token, owner, repo, file_path)
def extract_referenced_files(text: str) -> List[str]:
return knowledge_engine.RelationshipExtractor.extract_referenced_files(text)
def post_issue_comment(access_token: str, owner: str, repo: str, issue_number: int, comment_body: str) -> bool:
return knowledge_engine.GitHubClient.post_issue_comment(access_token, owner, repo, issue_number, comment_body)
def fetch_issue(access_token: str, owner: str, repo: str, issue_number: int) -> Optional[Dict[str, Any]]:
return knowledge_engine.GitHubClient.fetch_issue(access_token, owner, repo, issue_number)
def fetch_pull_request(access_token: str, owner: str, repo: str, pr_number: int) -> Optional[Dict[str, Any]]:
return knowledge_engine.GitHubClient.fetch_pull_request(access_token, owner, repo, pr_number)
def fetch_pr_comments(access_token: str, owner: str, repo: str, pr_number: int) -> List[Dict[str, Any]]:
return knowledge_engine.GitHubClient.fetch_pr_comments(access_token, owner, repo, pr_number)
def fetch_pull_request_files(access_token: str, owner: str, repo: str, pr_number: int) -> List[Dict[str, Any]]:
return knowledge_engine.GitHubClient.fetch_pr_files(access_token, owner, repo, pr_number)
def extract_referenced_prs(text: str) -> List[int]:
return knowledge_engine.RelationshipExtractor.extract_referenced_prs(text)
# Aliases
fetch_issues = fetch_issue
fetch_pull_requests = fetch_pull_request
fetch_pr_files = fetch_pull_request_files