diff --git a/Dockerfile.py3 b/Dockerfile.py3 new file mode 100644 index 0000000..3f9f12e --- /dev/null +++ b/Dockerfile.py3 @@ -0,0 +1,8 @@ +FROM python:3.5.3-alpine + +RUN apk update && apk add ca-certificates + +ADD . /sdk +WORKDIR sdk +RUN python setup.py install + diff --git a/docker-compose.test.yml b/docker-compose.test.yml index f4d914a..f767563 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -1,3 +1,11 @@ -sut: - build: . - command: python setup.py test +version: '3' +services: + sut: + build: . + command: python setup.py test + + sut-py3: + build: + context: . + dockerfile: Dockerfile.py3 + command: python setup.py test diff --git a/dockercloud/__init__.py b/dockercloud/__init__.py index 482dbc9..9715fba 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 ccfec44..eb4e88f 100644 --- a/dockercloud/api/auth.py +++ b/dockercloud/api/auth.py @@ -15,7 +15,8 @@ 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): @@ -73,12 +74,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 7dd08bf..2db2bd3 100644 --- a/dockercloud/api/http.py +++ b/dockercloud/api/http.py @@ -16,7 +16,7 @@ def get_session(time=time): - if (dockercloud.reconnection_interval >= 0): + if dockercloud.reconnection_interval is not None and (dockercloud.reconnection_interval >= 0): global last_connection_time if (time.time() - last_connection_time > dockercloud.reconnection_interval): new_session() @@ -40,9 +40,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_auth.py b/tests/test_auth.py index 6ce8ab5..48c6273 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 @@ -26,7 +26,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):