diff --git a/globusonline/transfer/api_client/__init__.py b/globusonline/transfer/api_client/__init__.py index 87c67c3..36f09d9 100644 --- a/globusonline/transfer/api_client/__init__.py +++ b/globusonline/transfer/api_client/__init__.py @@ -33,6 +33,7 @@ See https://transfer.api.globusonline.org for API documentation. """ +from __future__ import print_function import os.path import os import sys @@ -42,8 +43,14 @@ import urllib import time import ssl -from urlparse import urlparse -from httplib import BadStatusLine +try: + from urlparse import urlparse +except: + from urllib.parse import urlparse +try: + from httplib import BadStatusLine +except: + from http.client import BadStatusLine from datetime import datetime, timedelta from globusonline.transfer.api_client.verified_https \ @@ -230,14 +237,14 @@ def _request(self, method, path, body=None, content_type=None): headers["Content-Type"] = content_type if self.print_request: - print - print ">>>REQUEST>>>:" - print "%s %s" % (method, url) + print("") + print(">>>REQUEST>>>:") + print("%s %s" % (method, url)) for h in headers.iteritems(): - print "%s: %s" % h - print + print("%s: %s" % h) + print("") if body: - print body + print(body) if self.goauth: headers["Authorization"] = "Globus-Goauthtoken %s" % self.goauth @@ -253,7 +260,7 @@ def do_request(): response_body = r.read() return r, response_body - for attempt in xrange(self.max_attempts): + for attempt in range(self.max_attempts): r = None try: try: @@ -298,13 +305,13 @@ def do_request(): time.sleep(RETRY_WAIT_SECONDS) if self.print_response: - print - print "<< dst)" + print("Successful Transfers (src -> dst)") for t in transfer_list: - print " %s -> %s" % (t[u'source_path'], - t[u'destination_path']) + print(" %s -> %s" % (t[u'source_path'], + t[u'destination_path'])) def wait_for_task(task_id, timeout=120, poll_interval=30): @@ -175,8 +176,8 @@ def wait_for_task(task_id, timeout=120, poll_interval=30): def display_endpoint_list(): code, reason, endpoint_list = api.endpoint_list(limit=100) - print "Found %d endpoints for user %s:" \ - % (endpoint_list["length"], api.username) + print("Found %d endpoints for user %s:" \ + % (endpoint_list["length"], api.username)) for ep in endpoint_list["DATA"]: _print_endpoint(ep) @@ -188,30 +189,30 @@ def display_endpoint(endpoint_name): def _print_endpoint(ep): name = ep["canonical_name"] - print name + print(name) if ep["activated"]: - print " activated (expires: %s)" % ep["expire_time"] + print(" activated (expires: %s)" % ep["expire_time"]) else: - print " not activated" + print(" not activated") if ep["public"]: - print " public" + print(" public") else: - print " not public" + print(" not public") if ep["myproxy_server"]: - print " default myproxy server: %s" % ep["myproxy_server"] + print(" default myproxy server: %s" % ep["myproxy_server"]) else: - print " no default myproxy server" + print(" no default myproxy server") servers = ep.get("DATA", ()) - print " servers:" + print(" servers:") for s in servers: uri = s["uri"] if not uri: uri = "GC endpoint, no uri available" - print " " + uri, + print(" " + uri,) if s["subject"]: - print " (%s)" % s["subject"] + print(" (%s)" % s["subject"]) else: - print + print("") def display_ls(endpoint_name, path=""): @@ -222,13 +223,13 @@ def display_ls(endpoint_name, path=""): # and will be mapped to the user's default directory (typically # their home directory) by the Transfer API. path = data["path"] - print "Contents of %s on %s:" % (path, endpoint_name) + print("Contents of %s on %s:" % (path, endpoint_name)) headers = "name, type, permissions, size, user, group, last_modified" headers_list = headers.split(", ") - print headers + print(headers) for file_or_dir in data["DATA"]: - print ", ".join([unicode(file_or_dir[field]) - for field in headers_list]) + print(", ".join([unicode(file_or_dir[field]) + for field in headers_list])) if __name__ == '__main__': diff --git a/globusonline/transfer/api_client/examples/myproxy_activate.py b/globusonline/transfer/api_client/examples/myproxy_activate.py index 5f88fd2..4a46368 100755 --- a/globusonline/transfer/api_client/examples/myproxy_activate.py +++ b/globusonline/transfer/api_client/examples/myproxy_activate.py @@ -24,7 +24,7 @@ The endpoint name may contain a # which is a shell comment, so be sure to quote the endpoint name. """ - +from __future__ import print_function import sys from getpass import getpass @@ -47,8 +47,8 @@ def input_default(field_name, default, private=False): if default: value = default else: - print "Error: %s is required, please enter a value" \ - % field_name + print("Error: %s is required, please enter a value" \ + % field_name) return value @@ -79,8 +79,8 @@ def prompt_requirement(reqs, req_name, private=False): try: _, _, result = api.endpoint_activate(ep, reqs) - print "Activation successful" - print "Subject:", result["subject"] - print "Expires:", result["expire_time"] + print("Activation successful") + print("Subject:", result["subject"]) + print("Expires:", result["expire_time"]) except APIError as e: - print "Error: %s" % e.message + print("Error: %s" % e.message) diff --git a/globusonline/transfer/api_client/goauth.py b/globusonline/transfer/api_client/goauth.py index 9d961c2..f47a4ff 100755 --- a/globusonline/transfer/api_client/goauth.py +++ b/globusonline/transfer/api_client/goauth.py @@ -21,8 +21,12 @@ for password. The token is printed to stdout. """ +from __future__ import print_function import sys -import urlparse +try: + import urlparse +except: + from urllib.parse import urlparse import getpass from collections import namedtuple import json @@ -69,13 +73,13 @@ def get_access_token(username=None, password=None, ca_certs=None): from globusonline.transfer.api_client import get_ca ca_certs = get_ca(HOST) if username is None: - print "Globus Online Username: ", + print("Globus Online Username: ",) sys.stdout.flush() username = sys.stdin.readline().strip() if password is None: password = getpass.getpass("Globus Online Password: ") - basic_auth = base64.b64encode("%s:%s" % (username, password)) + basic_auth = base64.b64encode(("%s:%s" % (username, password)).encode('ascii')).decode("ascii") headers = { "Content-type": "application/json; charset=UTF-8", "Hostname": HOST, "Accept": "application/json; charset=UTF-8", @@ -88,7 +92,7 @@ def get_access_token(username=None, password=None, ca_certs=None): elif response.status > 299 or response.status < 200: raise GOAuthError("error response: %d %s" % (response.status, response.reason)) - data = json.loads(response.read()) + data = json.loads(response.read().decode('ascii')) token = data.get("access_token") if token is None: raise GOAuthError("no token in response") @@ -138,7 +142,7 @@ def process_args(args=None, parser=None): try: result = get_access_token(ca_certs=options.server_ca_file, username=username) - print result.token + print(result.token) except Exception as e: sys.stderr.write(str(e) + "\n") sys.exit(2) diff --git a/globusonline/transfer/api_client/verified_https.py b/globusonline/transfer/api_client/verified_https.py index da848e3..1c37209 100644 --- a/globusonline/transfer/api_client/verified_https.py +++ b/globusonline/transfer/api_client/verified_https.py @@ -21,12 +21,19 @@ See http://www.muchtooscrawled.com/2010/03/https-certificate-verification-in-python-with-urllib2/ """ +from __future__ import print_function import socket import ssl import os import re -from httplib import HTTPSConnection -from urlparse import urlsplit +try: + from httplib import HTTPSConnection +except: + from http.client import HTTPSConnection +try: + from urlparse import urlsplit +except: + from urllib.parse import urlsplit __all__ = ["VerifiedHTTPSConnection"] @@ -199,10 +206,10 @@ def exit_usage(): sys.exit("Timout!") else: raise - print r.status, r.reason + print(r.status, r.reason) for h in r.getheaders(): - print "%s: %s" % h - print r.read(), + print("%s: %s" % h) + print(r.read(),) if __name__ == '__main__':