Skip to content

Commit 5421d1a

Browse files
authored
Merge pull request #57 from furlongm/feature/parameterized-github-api-url
support for parameterized github api url
2 parents 0080628 + 7d04474 commit 5421d1a

File tree

1 file changed

+22
-18
lines changed

1 file changed

+22
-18
lines changed

github_release.py

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,10 @@
2121
from requests import request
2222

2323

24-
GITHUB_API = "https://api.github.com"
25-
2624
REQ_BUFFER_SIZE = 65536 # Chunk size when iterating a download body
2725

2826
_github_token_cli_arg = None
27+
_github_api_url = None
2928

3029

3130
class _NoopProgressReporter(object):
@@ -105,7 +104,7 @@ def _check_for_credentials(func):
105104
@wraps(func)
106105
def with_check_for_credentials(*args, **kwargs):
107106
has_github_token_env_var = "GITHUB_TOKEN" in os.environ
108-
has_netrc = requests.utils.get_netrc_auth(GITHUB_API)
107+
has_netrc = requests.utils.get_netrc_auth(_github_api_url)
109108
if (not _github_token_cli_arg
110109
and not has_github_token_env_var and not has_netrc):
111110
raise EnvironmentError(
@@ -173,16 +172,21 @@ def _validate_repo_name(ctx, param, value):
173172
@click.group()
174173
@click.option("--github-token", envvar='GITHUB_TOKEN', default=None,
175174
help="[default: GITHUB_TOKEN env. variable]")
175+
@click.option('--github-api-url', envvar='GITHUB_API_URL',
176+
default='https://api.github.com',
177+
help='[default: https://api.github.com]')
176178
@click.option("--progress/--no-progress", default=True,
177179
help="Display progress bar (default: yes).")
178-
def main(github_token, progress):
180+
def main(github_token, github_api_url, progress):
179181
"""A CLI to easily manage GitHub releases, assets and references."""
180182
global progress_reporter_cls
181183
progress_reporter_cls.reportProgress = sys.stdout.isatty() and progress
182184
if progress_reporter_cls.reportProgress:
183185
progress_reporter_cls = _progress_bar
184186
global _github_token_cli_arg
185187
_github_token_cli_arg = github_token
188+
global _github_api_url
189+
_github_api_url = github_api_url
186190

187191

188192
@main.group("release")
@@ -255,7 +259,7 @@ def get_releases(repo_name, verbose=False):
255259

256260
releases = []
257261
_recursive_gh_get(
258-
GITHUB_API + '/repos/{0}/releases'.format(repo_name), releases)
262+
_github_api_url + '/repos/{0}/releases'.format(repo_name), releases)
259263

260264
if verbose:
261265
list(map(print_release_info,
@@ -373,7 +377,7 @@ def patch_release(repo_name, current_tag_name, **values):
373377
data.update(values)
374378

375379
if not dry_run:
376-
url = GITHUB_API + '/repos/{0}/releases/{1}'.format(
380+
url = _github_api_url + '/repos/{0}/releases/{1}'.format(
377381
repo_name, release['id'])
378382
response = _request(
379383
'PATCH', url,
@@ -394,7 +398,7 @@ def get_assets(repo_name, tag_name, verbose=False):
394398
raise Exception('Release with tag_name {0} not found'.format(tag_name))
395399

396400
assets = []
397-
_recursive_gh_get(GITHUB_API + '/repos/{0}/releases/{1}/assets'.format(
401+
_recursive_gh_get(_github_api_url + '/repos/{0}/releases/{1}/assets'.format(
398402
repo_name, release["id"]), assets)
399403

400404
if verbose:
@@ -465,7 +469,7 @@ def gh_release_create(repo_name, tag_name, asset_pattern=None, name=None, body=N
465469
data["target_commitish"] = target_commitish
466470
if not dry_run:
467471
response = _request(
468-
'POST', GITHUB_API + '/repos/{0}/releases'.format(repo_name),
472+
'POST', _github_api_url + '/repos/{0}/releases'.format(repo_name),
469473
data=json.dumps(data),
470474
headers={'Content-Type': 'application/json'})
471475
response.raise_for_status()
@@ -540,7 +544,7 @@ def gh_release_delete(repo_name, pattern, keep_pattern=None,
540544
print('deleting release {0}'.format(release['tag_name']))
541545
if dry_run:
542546
continue
543-
url = (GITHUB_API
547+
url = (_github_api_url
544548
+ '/repos/{0}/releases/{1}'.format(repo_name, release['id']))
545549
response = _request('DELETE', url)
546550
response.raise_for_status()
@@ -683,7 +687,7 @@ def _upload_release_file(
683687
print(" deleting %s (invalid asset "
684688
"with state set to 'new')" % asset['name'])
685689
url = (
686-
GITHUB_API
690+
_github_api_url
687691
+ '/repos/{0}/releases/assets/{1}'.format(
688692
repo_name, asset['id'])
689693
)
@@ -747,7 +751,7 @@ def gh_asset_upload(repo_name, tag_name, pattern, dry_run=False, verbose=False):
747751
# Raise exception if no token is specified AND netrc file is found
748752
# BUT only api.github.com is specified. See #17
749753
has_github_token = "GITHUB_TOKEN" in os.environ
750-
has_netrc = requests.utils.get_netrc_auth(GITHUB_API)
754+
has_netrc = requests.utils.get_netrc_auth(_github_api_url)
751755
if not has_github_token and has_netrc:
752756
if requests.utils.get_netrc_auth(upload_url) is None:
753757
raise EnvironmentError(
@@ -832,7 +836,7 @@ def gh_asset_delete(repo_name, tag_name, pattern,
832836
if dry_run:
833837
continue
834838
url = (
835-
GITHUB_API
839+
_github_api_url
836840
+ '/repos/{0}/releases/assets/{1}'.format(repo_name, asset['id'])
837841
)
838842
response = _request('DELETE', url)
@@ -860,7 +864,7 @@ def _cli_asset_download(*args, **kwargs):
860864
def _download_file(repo_name, asset):
861865
response = _request(
862866
method='GET',
863-
url=GITHUB_API + '/repos/{0}/releases/assets/{1}'.format(
867+
url=_github_api_url + '/repos/{0}/releases/assets/{1}'.format(
864868
repo_name, asset['id']),
865869
allow_redirects=False,
866870
headers={'Accept': 'application/octet-stream'},
@@ -930,7 +934,7 @@ def get_refs(repo_name, tags=None, pattern=None):
930934

931935
refs = []
932936
_recursive_gh_get(
933-
GITHUB_API + '/repos/{0}/git/refs'.format(repo_name), refs)
937+
_github_api_url + '/repos/{0}/git/refs'.format(repo_name), refs)
934938

935939
# If "tags" is True, keep only "refs/tags/*"
936940
data = refs
@@ -945,7 +949,7 @@ def get_refs(repo_name, tags=None, pattern=None):
945949
try:
946950
tags = []
947951
_recursive_gh_get(
948-
GITHUB_API + '/repos/{0}/git/refs/tags'.format(repo_name), tags)
952+
_github_api_url + '/repos/{0}/git/refs/tags'.format(repo_name), tags)
949953
for ref in tags:
950954
if ref["ref"] not in tag_names:
951955
data.append(ref)
@@ -1001,7 +1005,7 @@ def gh_ref_create(repo_name, reference, sha):
10011005
'sha': sha
10021006
}
10031007
response = _request(
1004-
'POST', GITHUB_API + '/repos/{0}/git/refs'.format(repo_name),
1008+
'POST', _github_api_url + '/repos/{0}/git/refs'.format(repo_name),
10051009
data=json.dumps(data),
10061010
headers={'Content-Type': 'application/json'})
10071011
response.raise_for_status()
@@ -1040,7 +1044,7 @@ def gh_ref_delete(repo_name, pattern, keep_pattern=None, tags=False,
10401044
continue
10411045
response = _request(
10421046
'DELETE',
1043-
GITHUB_API + '/repos/{0}/git/{1}'.format(repo_name, ref['ref']))
1047+
_github_api_url + '/repos/{0}/git/{1}'.format(repo_name, ref['ref']))
10441048
response.raise_for_status()
10451049
return len(removed_refs) > 0
10461050

@@ -1053,7 +1057,7 @@ def gh_commit_get(repo_name, sha):
10531057
try:
10541058
response = _request(
10551059
'GET',
1056-
GITHUB_API + '/repos/{0}/git/commits/{1}'.format(repo_name, sha))
1060+
_github_api_url + '/repos/{0}/git/commits/{1}'.format(repo_name, sha))
10571061
response.raise_for_status()
10581062
return response.json()
10591063
except requests.exceptions.HTTPError as exc_info:

0 commit comments

Comments
 (0)