diff --git a/dockercloud/__init__.py b/dockercloud/__init__.py index 8bb6aa5..b660249 100644 --- a/dockercloud/__init__.py +++ b/dockercloud/__init__.py @@ -31,9 +31,11 @@ basic_auth = auth.load_from_file("~/.docker/config.json") if os.environ.get('DOCKERCLOUD_USER') and os.environ.get('DOCKERCLOUD_PASS'): - basic_auth = base64.b64encode("%s:%s" % (os.environ.get('DOCKERCLOUD_USER'), os.environ.get('DOCKERCLOUD_PASS'))) + creds = "%s:%s" % (os.environ.get('DOCKERCLOUD_USER'), os.environ.get('DOCKERCLOUD_PASS')) + basic_auth = base64.b64encode(creds.encode()).decode() if os.environ.get('DOCKERCLOUD_USER') and os.environ.get('DOCKERCLOUD_APIKEY'): - basic_auth = base64.b64encode("%s:%s" % (os.environ.get('DOCKERCLOUD_USER'), os.environ.get('DOCKERCLOUD_APIKEY'))) + creds = "%s:%s" % (os.environ.get('DOCKERCLOUD_USER'), os.environ.get('DOCKERCLOUD_APIKEY')) + basic_auth = base64.b64encode(creds.encode()).decode() rest_host = os.environ.get("DOCKERCLOUD_REST_HOST") or 'https://cloud.docker.com/' stream_host = os.environ.get("DOCKERCLOUD_STREAM_HOST") or 'wss://ws.cloud.docker.com/' diff --git a/dockercloud/api/auth.py b/dockercloud/api/auth.py index 65d6668..d5987bd 100644 --- a/dockercloud/api/auth.py +++ b/dockercloud/api/auth.py @@ -12,9 +12,11 @@ HUB_INDEX = "https://index.docker.io/v1/" + def authenticate(username, password): verify_credential(username, password) - dockercloud.basic_auth = base64.b64encode("%s:%s" % (username, password)) + cred = "%s:%s" % (username, password) + dockercloud.basic_auth = base64.b64encode(cred.encode()) def verify_credential(username, password): @@ -71,12 +73,14 @@ def load_from_file(f="~/.docker/config.json"): def get_auth_header(): try: - dockercloud.basic_auth = base64.b64encode("%s:%s" % (dockercloud.user, dockercloud.password)) + cred = "%s:%s" % (dockercloud.user, dockercloud.password) + dockercloud.basic_auth = base64.b64encode(cred.encode()).decode() except: pass try: - dockercloud.basic_auth = base64.b64encode("%s:%s" % (dockercloud.user, dockercloud.apikey)) + cred = "%s:%s" % (dockercloud.user, dockercloud.apikey) + dockercloud.basic_auth = base64.b64encode(cred.encode()).decode() except: pass diff --git a/dockercloud/api/http.py b/dockercloud/api/http.py index f1d0696..ffd58ad 100644 --- a/dockercloud/api/http.py +++ b/dockercloud/api/http.py @@ -34,9 +34,9 @@ def new_session(): def send_request(method, path, inject_header=True, **kwargs): json = None - url = urljoin(dockercloud.rest_host.rstrip("/"), path.strip("/").encode("ascii", "ignore")) - if not url.endswith("/"): - url = "%s/" % url + url = urljoin(dockercloud.rest_host.encode(), path.strip("/").encode()) + if not url.endswith(b"/"): + url = b"%s/" % url user_agent = 'python-dockercloud/%s' % dockercloud.__version__ if dockercloud.user_agent: user_agent = "%s %s" % (dockercloud.user_agent, user_agent) diff --git a/requirements.txt b/requirements.txt index fe172c4..8fe1f99 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ future==0.15.0 +mock==2.0.0 requests==2.7.0 six==1.9.0 websocket-client==0.37.0 diff --git a/tests/test_action.py b/tests/test_action.py index f5893a7..32255a3 100644 --- a/tests/test_action.py +++ b/tests/test_action.py @@ -1,8 +1,12 @@ from __future__ import absolute_import import unittest +import six -import unittest.mock as mock +if six.PY2: + import mock +elif six.PY3: + import unittest.mock as mock import dockercloud from .fake_api import * diff --git a/tests/test_auth.py b/tests/test_auth.py index dd81a01..24ffa6b 100644 --- a/tests/test_auth.py +++ b/tests/test_auth.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import, print_function import os import tempfile @@ -23,7 +23,7 @@ def tearDown(self): def test_auth_authenticate(self, mock_verify_credential): dockercloud.auth.authenticate(FAKE_USER, FAKE_PASSWORD) mock_verify_credential.assert_called_with(FAKE_USER, FAKE_PASSWORD) - self.assertEqual(dockercloud.basic_auth, FAKE_BASIC_AUTH) + self.assertEqual(dockercloud.basic_auth, FAKE_BASIC_AUTH.encode('latin-1')) self.tearDown() def test_auth_is_authenticated(self): @@ -75,7 +75,7 @@ def test_auth_get_auth_header(self): dockercloud.basic_auth = FAKE_BASIC_AUTH self.assertEqual({'Authorization': FAKE_DOCKERCLOUD_AUTH}, dockercloud.auth.get_auth_header()) - print "====================" + print("====================") dockercloud.dockercloud_auth = None dockercloud.basic_auth = FAKE_BASIC_AUTH self.assertEqual({'Authorization': 'Basic %s' % (FAKE_BASIC_AUTH)}, dockercloud.auth.get_auth_header())