diff options
author | Tomas Tomecek <ttomecek@redhat.com> | 2016-07-27 10:26:16 +0200 |
---|---|---|
committer | Joffrey F <joffrey@docker.com> | 2016-08-17 12:20:13 -0700 |
commit | 3062ae4348ab916a9afd574cb70891b9131aff11 (patch) | |
tree | 4d941a1a8964e9066879ed006494ba43d75cb39a | |
parent | 95d9306d2a1fd22dffb12a0548abf2d2f744ed9d (diff) | |
download | docker-py-3062ae4348ab916a9afd574cb70891b9131aff11.tar.gz |
docker client consistency: don't quote ':/'
E.g.
docker client
`/v1.21/images/localhost:5000/busybox/push?tag=`
docker-py
`/v1.21/images/localhost%3A5000%2Fbusybox/push`
Signed-off-by: Tomas Tomecek <ttomecek@redhat.com>
-rw-r--r-- | docker/client.py | 4 | ||||
-rw-r--r-- | tests/unit/api_test.py | 10 |
2 files changed, 11 insertions, 3 deletions
diff --git a/docker/client.py b/docker/client.py index 1b5420e..9f75ce7 100644 --- a/docker/client.py +++ b/docker/client.py @@ -14,6 +14,7 @@ import json import struct +from functools import partial import requests import requests.exceptions @@ -157,7 +158,8 @@ class Client( 'instead'.format(arg, type(arg)) ) - args = map(six.moves.urllib.parse.quote_plus, args) + quote_f = partial(six.moves.urllib.parse.quote_plus, safe="/:") + args = map(quote_f, args) if kwargs.get('versioned_api', True): return '{0}/v{1}{2}'.format( diff --git a/tests/unit/api_test.py b/tests/unit/api_test.py index 696c073..712f57e 100644 --- a/tests/unit/api_test.py +++ b/tests/unit/api_test.py @@ -159,9 +159,15 @@ class DockerApiTest(DockerClientTest): '{0}{1}'.format(url_prefix, 'hello/somename/world/someothername') ) - url = self.client._url('/hello/{0}/world', '/some?name') + url = self.client._url('/hello/{0}/world', 'some?name') self.assertEqual( - url, '{0}{1}'.format(url_prefix, 'hello/%2Fsome%3Fname/world') + url, '{0}{1}'.format(url_prefix, 'hello/some%3Fname/world') + ) + + url = self.client._url("/images/{0}/push", "localhost:5000/image") + self.assertEqual( + url, + '{0}{1}'.format(url_prefix, 'images/localhost:5000/image/push') ) def test_url_invalid_resource(self): |