From 54cef11ce7852442009406714a1adffe01477fac Mon Sep 17 00:00:00 2001 From: Albert Wang Date: Sun, 11 Sep 2016 01:14:19 -0700 Subject: [PATCH] Support python 3 --- bin/github-backup | 54 +++++++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/bin/github-backup b/bin/github-backup index 5c93ce2..186e2a0 100755 --- a/bin/github-backup +++ b/bin/github-backup @@ -16,11 +16,25 @@ import select import subprocess import sys import time -import urlparse -import urllib -import urllib2 +try: + # python 3 + from urllib.parse import urlparse + from urllib.parse import quote as urlquote + from urllib.parse import urlencode + from urllib.error import HTTPError, URLError + from urllib.request import urlopen + from urllib.request import Request +except ImportError: + # python 2 + from urlparse import urlparse + from urllib import quote as urlquote + from urllib import urlencode + from urllib2 import HTTPError, URLError + from urllib2 import urlopen + from urllib2 import Request -from github_backup import __version__ +__version__='asdf' +# from github_backup import __version__ FNULL = open(os.devnull, 'w') @@ -80,8 +94,8 @@ def logging_subprocess(popenargs, rc = child.wait() if rc != 0: - print(u'{} returned {}:'.format(popenargs[0], rc), file=sys.stderr) - print('\t', u' '.join(popenargs), file=sys.stderr) + print('{} returned {}:'.format(popenargs[0], rc), file=sys.stderr) + print('\t', ' '.join(popenargs), file=sys.stderr) return rc @@ -97,7 +111,7 @@ def mkdir_p(*args): raise def mask_password(url, secret='*****'): - parsed = urlparse.urlparse(url) + parsed = urlparse(url) if not parsed.password: return url @@ -246,7 +260,7 @@ def get_auth(args, encode=True): if encode: password = args.password else: - password = urllib.quote(args.password) + password = urlquote(args.password) auth = args.username + ':' + password elif args.password: log_error('You must specify a username for basic auth') @@ -344,11 +358,11 @@ def _get_response(request, auth, template): while True: should_continue = False try: - r = urllib2.urlopen(request) - except urllib2.HTTPError as exc: + r = urlopen(request) + except HTTPError as exc: errors, should_continue = _request_http_error(exc, auth, errors) # noqa r = exc - except urllib2.URLError: + except URLError: should_continue = _request_url_error(template, retry_timeout) if not should_continue: raise @@ -361,12 +375,12 @@ def _get_response(request, auth, template): def _construct_request(per_page, page, query_args, template, auth): - querystring = urllib.urlencode(dict({ + querystring = urlencode(dict(list({ 'per_page': per_page, 'page': page - }.items() + query_args.items())) + }.items()) + list(query_args.items()))) - request = urllib2.Request(template + '?' + querystring) + request = Request(template + '?' + querystring) if auth is not None: request.add_header('Authorization', 'Basic ' + auth) return request @@ -551,10 +565,10 @@ def backup_issues(args, repo_cwd, repository, repos_template): if issues_skipped: issues_skipped_message = ' (skipped {0} pull requests)'.format(issues_skipped) - log_info('Saving {0} issues to disk{1}'.format(len(issues.keys()), issues_skipped_message)) + log_info('Saving {0} issues to disk{1}'.format(len(list(issues.keys())), issues_skipped_message)) comments_template = _issue_template + '/{0}/comments' events_template = _issue_template + '/{0}/events' - for number, issue in issues.iteritems(): + for number, issue in list(issues.items()): if args.include_issue_comments or args.include_everything: template = comments_template.format(number) issues[number]['comment_data'] = retrieve_data(args, template) @@ -597,10 +611,10 @@ def backup_pulls(args, repo_cwd, repository, repos_template): if not args.since or pull['updated_at'] >= args.since: pulls[pull['number']] = pull - log_info('Saving {0} pull requests to disk'.format(len(pulls.keys()))) + log_info('Saving {0} pull requests to disk'.format(len(list(pulls.keys())))) comments_template = _pulls_template + '/{0}/comments' commits_template = _pulls_template + '/{0}/commits' - for number, pull in pulls.iteritems(): + for number, pull in list(pulls.items()): if args.include_pull_comments or args.include_everything: template = comments_template.format(number) pulls[number]['comment_data'] = retrieve_data(args, template) @@ -634,8 +648,8 @@ def backup_milestones(args, repo_cwd, repository, repos_template): for milestone in _milestones: milestones[milestone['number']] = milestone - log_info('Saving {0} milestones to disk'.format(len(milestones.keys()))) - for number, milestone in milestones.iteritems(): + log_info('Saving {0} milestones to disk'.format(len(list(milestones.keys())))) + for number, milestone in list(milestones.items()): milestone_file = '{0}/{1}.json'.format(milestone_cwd, number) with codecs.open(milestone_file, 'w', encoding='utf-8') as f: json_dump(milestone, f)