mirror of
https://github.com/josegonzalez/python-github-backup.git
synced 2025-12-05 16:18:02 +01:00
Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
751b0d6e82 | ||
|
|
ea633ca2bb | ||
|
|
a2115ce3e5 | ||
|
|
8a00bb1903 | ||
|
|
e53f8d4724 | ||
|
|
356f5f674b | ||
|
|
13128635cb | ||
|
|
6e6842b025 | ||
|
|
272177c395 | ||
|
|
70f711ea68 | ||
|
|
3fc9957aac | ||
|
|
78098aae23 |
23
CHANGES.rst
23
CHANGES.rst
@@ -1,9 +1,30 @@
|
||||
Changelog
|
||||
=========
|
||||
|
||||
0.32.0 (2020-04-13)
|
||||
0.35.0 (2020-08-05)
|
||||
-------------------
|
||||
------------------------
|
||||
- Make API request throttling optional. [Samantha Baldwin]
|
||||
|
||||
|
||||
0.34.0 (2020-07-24)
|
||||
-------------------
|
||||
- Add logic for transforming gist repository urls to ssh. [Matt Fields]
|
||||
|
||||
|
||||
0.33.0 (2020-04-13)
|
||||
-------------------
|
||||
- Add basic API request throttling. [Enrico Tröger]
|
||||
|
||||
A simple approach to throttle API requests and so keep within the rate
|
||||
limits of the API. Can be enabled with "--throttle-limit" to specify
|
||||
when throttling should start.
|
||||
"--throttle-pause" defines the time to sleep between further API
|
||||
requests.
|
||||
|
||||
|
||||
0.32.0 (2020-04-13)
|
||||
-------------------
|
||||
- Add timestamp to log messages. [Enrico Tröger]
|
||||
|
||||
|
||||
|
||||
10
README.rst
10
README.rst
@@ -41,7 +41,8 @@ CLI Usage is as follows::
|
||||
[-P] [-F] [--prefer-ssh] [-v]
|
||||
[--keychain-name OSX_KEYCHAIN_ITEM_NAME]
|
||||
[--keychain-account OSX_KEYCHAIN_ITEM_ACCOUNT]
|
||||
[--releases] [--assets]
|
||||
[--releases] [--assets] [--throttle-limit THROTTLE_LIMIT]
|
||||
[--throttle-pause THROTTLE_PAUSE]
|
||||
USER
|
||||
|
||||
Backup a github account
|
||||
@@ -111,6 +112,13 @@ CLI Usage is as follows::
|
||||
binaries
|
||||
--assets include assets alongside release information; only
|
||||
applies if including releases
|
||||
--throttle-limit THROTTLE_LIMIT
|
||||
start throttling of GitHub API requests after this
|
||||
amount of API requests remain
|
||||
--throttle-pause THROTTLE_PAUSE
|
||||
wait this amount of seconds when API request
|
||||
throttling is active (default: 30.0, requires
|
||||
--throttle-limit to be set)
|
||||
|
||||
|
||||
The package can be used to backup an *entire* organization or repository, including issues and wikis in the most appropriate format (clones for wikis, json files for issues).
|
||||
|
||||
@@ -1 +1 @@
|
||||
__version__ = '0.32.0'
|
||||
__version__ = '0.35.0'
|
||||
|
||||
@@ -331,6 +331,16 @@ def parse_args():
|
||||
action='store_true',
|
||||
dest='include_assets',
|
||||
help='include assets alongside release information; only applies if including releases')
|
||||
parser.add_argument('--throttle-limit',
|
||||
dest='throttle_limit',
|
||||
type=int,
|
||||
default=0,
|
||||
help='start throttling of GitHub API requests after this amount of API requests remain')
|
||||
parser.add_argument('--throttle-pause',
|
||||
dest='throttle_pause',
|
||||
type=float,
|
||||
default=30.0,
|
||||
help='wait this amount of seconds when API request throttling is active (default: 30.0, requires --throttle-limit to be set)')
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
@@ -409,7 +419,13 @@ def get_github_host(args):
|
||||
|
||||
def get_github_repo_url(args, repository):
|
||||
if repository.get('is_gist'):
|
||||
return repository['git_pull_url']
|
||||
if args.prefer_ssh:
|
||||
# The git_pull_url value is always https for gists, so we need to transform it to ssh form
|
||||
repo_url = re.sub('^https?:\/\/(.+)\/(.+)\.git$', r'git@\1:\2.git', repository['git_pull_url'])
|
||||
repo_url = re.sub('^git@gist\.', 'git@', repo_url) # strip gist subdomain for better hostkey compatibility
|
||||
else:
|
||||
repo_url = repository['git_pull_url']
|
||||
return repo_url
|
||||
|
||||
if args.prefer_ssh:
|
||||
return repository['ssh_url']
|
||||
@@ -439,6 +455,14 @@ def retrieve_data_gen(args, template, query_args=None, single_request=False):
|
||||
r, errors = _get_response(request, auth, template)
|
||||
|
||||
status_code = int(r.getcode())
|
||||
# be gentle with API request limit and throttle requests if remaining requests getting low
|
||||
limit_remaining = int(r.headers.get('x-ratelimit-remaining', 0))
|
||||
if args.throttle_limit and limit_remaining <= args.throttle_limit:
|
||||
log_info(
|
||||
'API request limit hit: {} requests left, pausing further requests for {}s'.format(
|
||||
limit_remaining,
|
||||
args.throttle_pause))
|
||||
time.sleep(args.throttle_pause)
|
||||
|
||||
retries = 0
|
||||
while retries < 3 and status_code == 502:
|
||||
|
||||
Reference in New Issue
Block a user