Skip to content

Commit b770a47

Browse files
committed
feat: add GitHub Enterprise API support (#3277)
Signed-off-by: Suyash Jain <[email protected]>
1 parent 8ec768d commit b770a47

File tree

17 files changed

+193
-40
lines changed

17 files changed

+193
-40
lines changed

augur/application/config.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ def redact_setting_value(section_name, setting_name, value):
4040
},
4141
"Keys": {
4242
"github": "<gh_api_key>",
43-
"gitlab": "<gl_api_key>"
43+
"gitlab": "<gl_api_key>",
44+
"github_api_base_url": "https://api.github.com"
4445
},
4546
"Facade": {
4647
"check_updates": 1,

augur/tasks/data_analysis/contributor_breadth_worker/contributor_breadth_worker.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from augur.application.db.models import ContributorRepo
99
from augur.application.db.lib import bulk_insert_dicts
1010
from augur.tasks.github.util.github_random_key_auth import GithubRandomKeyAuth
11+
from augur.tasks.github.util.github_api_url import get_user_events_url
1112

1213
### This worker scans all the platform users in Augur, and pulls their platform activity
1314
### logs. Those are then used to analyze what repos each is working in (which will include repos not
@@ -92,7 +93,7 @@ def contributor_breadth_model(self) -> None:
9293
print(f"Processing cntrb {index} of {total}")
9394
index += 1
9495

95-
repo_cntrb_url = f"https://api.github.com/users/{cntrb['gh_login']}/events"
96+
repo_cntrb_url = get_user_events_url(cntrb['gh_login'])
9697

9798
newest_event_in_db = datetime(1970, 1, 1)
9899
if cntrb["gh_login"] in cntrb_newest_events_map:

augur/tasks/github/contributors.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from augur.application.db.util import execute_session_query
1111
from augur.application.db.lib import bulk_insert_dicts, get_session, batch_insert_contributors
1212
from augur.tasks.github.util.github_random_key_auth import GithubRandomKeyAuth
13+
from augur.tasks.github.util.github_api_url import get_user_url
1314

1415

1516

@@ -45,7 +46,7 @@ def process_contributors():
4546

4647
del contributor_dict["_sa_instance_state"]
4748

48-
url = f"https://api.github.com/users/{contributor_dict['cntrb_login']}"
49+
url = get_user_url(contributor_dict['cntrb_login'])
4950

5051
data = retrieve_dict_data(url, key_auth, logger)
5152

augur/tasks/github/detect_move/core.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from augur.application.db.lib import bulk_insert_dicts
1010
from augur.application.db.models import HistoricalRepoURLs
1111
from sqlalchemy.exc import IntegrityError
12+
from augur.tasks.github.util.github_api_url import get_repo_url
1213

1314

1415
class RepoMovedException(Exception):
@@ -69,7 +70,7 @@ def extract_owner_and_repo_from_endpoint(key_auth, url, logger):
6970
def ping_github_for_repo_move(session, key_auth, repo, logger,collection_hook='core'):
7071

7172
owner, name = get_owner_repo(repo.repo_git)
72-
url = f"https://api.github.com/repos/{owner}/{name}"
73+
url = get_repo_url(owner, name)
7374

7475
attempts = 0
7576
while attempts < 10:

augur/tasks/github/events.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from augur.tasks.util.worker_util import remove_duplicate_dicts
1616
from augur.application.db.models import PullRequestEvent, IssueEvent, Contributor, Repo
1717
from augur.application.db.lib import get_repo_by_repo_git, bulk_insert_dicts, get_issues_by_repo_id, get_pull_requests_by_repo_id, update_issue_closed_cntrbs_by_repo_id, get_session, get_engine, get_core_data_last_collected, batch_insert_contributors
18+
from augur.tasks.github.util.github_api_url import get_repo_url
1819

1920

2021
platform_id = 1
@@ -47,7 +48,7 @@ def collect_events(repo_git: str, full_collection: bool):
4748

4849
def bulk_events_collection_endpoint_contains_all_data(key_auth, logger, owner, repo):
4950

50-
url = f"https://api.github.com/repos/{owner}/{repo}/issues/events?per_page=100"
51+
url = get_repo_url(owner, repo, "/issues/events?per_page=100")
5152

5253
github_data_access = GithubDataAccess(key_auth, logger)
5354

@@ -131,7 +132,7 @@ def _collect_events(self, repo_git: str, key_auth, since):
131132

132133
owner, repo = get_owner_repo(repo_git)
133134

134-
url = f"https://api.github.com/repos/{owner}/{repo}/issues/events"
135+
url = get_repo_url(owner, repo, "/issues/events")
135136

136137
github_data_access = GithubDataAccess(key_auth, self._logger)
137138

@@ -309,7 +310,7 @@ def _collect_and_process_issue_events(self, owner, repo, repo_id, key_auth, sinc
309310

310311
issue_number = issue["issue_number"]
311312

312-
event_url = f"https://api.github.com/repos/{owner}/{repo}/issues/{issue_number}/events"
313+
event_url = get_repo_url(owner, repo, f"/issues/{issue_number}/events")
313314

314315
try:
315316

@@ -370,7 +371,7 @@ def _collect_and_process_pr_events(self, owner, repo, repo_id, key_auth, since):
370371

371372
pr_number = pr["gh_pr_number"]
372373

373-
event_url = f"https://api.github.com/repos/{owner}/{repo}/issues/{pr_number}/events"
374+
event_url = get_repo_url(owner, repo, f"/issues/{pr_number}/events")
374375

375376
try:
376377

augur/tasks/github/facade_github/contributor_interfaceable/contributor_interface.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
# Debugger
99
from augur.tasks.github.util.github_paginator import GithubApiResult
1010
from augur.application.db.lib import get_repo_by_repo_id, bulk_insert_dicts, execute_sql, get_contributors_by_github_user_id
11+
from augur.tasks.github.util.github_api_url import get_search_users_url, get_repo_url
1112

1213

1314
##TODO: maybe have a TaskSession class that holds information about the database, logger, config, etc.
@@ -106,8 +107,7 @@ def request_dict_from_endpoint(logger, session, url, timeout_wait=10):
106107
def create_endpoint_from_email(email):
107108
# Note: I added "+type:user" to avoid having user owned organizations be returned
108109
# Also stopped splitting per note above.
109-
url = 'https://api.github.com/search/users?q={}+in:email+type:user'.format(
110-
email)
110+
url = get_search_users_url(f"{email}+in:email+type:user")
111111

112112

113113
return url
@@ -131,7 +131,7 @@ def create_endpoint_from_commit_sha(logger, commit_sha, repo_id):
131131
split_git = result.repo_git.split('/')
132132
repo_name_and_org = split_git[-2] + "/" + result.repo_name
133133

134-
url = "https://api.github.com/repos/" + repo_name_and_org + "/commits/" + commit_sha
134+
url = get_repo_url(split_git[-2], result.repo_name, f"/commits/{commit_sha}")
135135

136136
logger.debug(f"Commit Hash URL: {url}")
137137

@@ -151,8 +151,7 @@ def create_endpoint_from_name(contributor):
151151
# Pythonic way to get the end of a list so that we truely get the last name.
152152
'lname': contributor[name_field].split()[-1]
153153
}
154-
url = 'https://api.github.com/search/users?q=fullname:{}+{}'.format(
155-
cmt_cntrb['fname'], cmt_cntrb['lname'])
154+
url = get_search_users_url(f"fullname:{cmt_cntrb['fname']}+{cmt_cntrb['lname']}")
156155

157156
return url
158157

augur/tasks/github/facade_github/core.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from augur.tasks.util.AugurUUID import GithubUUID
66
from augur.application.db.lib import bulk_insert_dicts, batch_insert_contributors
77
from augur.tasks.github.util.github_data_access import GithubDataAccess
8+
from augur.tasks.github.util.github_api_url import get_repo_url, get_user_url
89

910

1011

@@ -26,10 +27,7 @@ def query_github_contributors(logger, key_auth, github_url):
2627
raise e
2728

2829
# Set the base of the url and place to hold contributors to insert
29-
contributors_url = (
30-
f"https://api.github.com/repos/{owner}/{name}/" +
31-
"contributors?state=all"
32-
)
30+
contributors_url = get_repo_url(owner, name, "/contributors?state=all")
3331

3432
# Get contributors that we already have stored
3533
# Set our duplicate and update column map keys (something other than PK) to
@@ -53,7 +51,7 @@ def query_github_contributors(logger, key_auth, github_url):
5351
# Need to hit this single contributor endpoint to get extra data including...
5452
# `created at`
5553
# i think that's it
56-
cntrb_url = ("https://api.github.com/users/" + repo_contributor['login'])
54+
cntrb_url = get_user_url(repo_contributor['login'])
5755

5856

5957
logger.info("Hitting endpoint: " + cntrb_url + " ...\n")

augur/tasks/github/facade_github/tasks.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from augur.tasks.init.celery_app import AugurFacadeRepoCollectionTask
66
from augur.tasks.github.util.github_data_access import GithubDataAccess, UrlNotFoundException
77
from augur.tasks.github.util.github_random_key_auth import GithubRandomKeyAuth
8+
from augur.tasks.github.util.github_api_url import get_user_url
89
from augur.tasks.github.facade_github.core import *
910
from augur.application.db.lib import execute_sql, get_contributor_aliases_by_email, get_unresolved_commit_emails_by_name, get_contributors_by_full_name, get_repo_by_repo_git, batch_insert_contributors
1011
from augur.application.db.lib import get_session, execute_session_query
@@ -67,7 +68,7 @@ def process_commit_metadata(logger, auth, contributorQueue, repo_id, platform_id
6768
logger.error("Failed to get login from supplemental data!")
6869
continue
6970

70-
url = ("https://api.github.com/users/" + login)
71+
url = get_user_url(login)
7172

7273
try:
7374
user_data = github_data_access.get_resource(url)

augur/tasks/github/issues.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from augur.application.db.models import Issue, IssueLabel, IssueAssignee
1616
from augur.application.config import get_development_flag
1717
from augur.application.db.lib import get_repo_by_repo_git, bulk_insert_dicts, get_core_data_last_collected, batch_insert_contributors
18+
from augur.tasks.github.util.github_api_url import get_repo_url
1819

1920

2021
development = get_development_flag()
@@ -101,7 +102,7 @@ def retrieve_all_issue_data(repo_git: str, logger: logging.Logger, key_auth: Git
101102

102103
logger.info(f"Collecting issues for {owner}/{repo}")
103104

104-
url = f"https://api.github.com/repos/{owner}/{repo}/issues?state=all"
105+
url = get_repo_url(owner, repo, "/issues?state=all")
105106

106107
if since:
107108
url += f"&since={since.isoformat()}"

augur/tasks/github/messages.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from augur.application.db.models import PullRequest, Message, Issue, PullRequestMessageRef, IssueMessageRef, Contributor, Repo, CollectionStatus
1212
from augur.application.db import get_engine, get_session
1313
from augur.application.db.lib import get_core_data_last_collected
14+
from augur.tasks.github.util.github_api_url import get_repo_url
1415
from sqlalchemy.sql import text
1516

1617
platform_id = 1
@@ -63,7 +64,7 @@ def fast_retrieve_all_pr_and_issue_messages(repo_git: str, logger, key_auth, tas
6364
owner, repo = get_owner_repo(repo_git)
6465

6566
# url to get issue and pull request comments
66-
url = f"https://api.github.com/repos/{owner}/{repo}/issues/comments"
67+
url = get_repo_url(owner, repo, "/issues/comments")
6768

6869
if since:
6970
url += f"?since={since.isoformat()}"

0 commit comments

Comments
 (0)