mirror of https://github.com/docker/docker-py.git
_url can take arbitrarily many arguments
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
This commit is contained in:
parent
26e22bbd39
commit
29b12cf007
|
@ -111,21 +111,22 @@ class Client(
|
||||||
def _delete(self, url, **kwargs):
|
def _delete(self, url, **kwargs):
|
||||||
return self.delete(url, **self._set_request_timeout(kwargs))
|
return self.delete(url, **self._set_request_timeout(kwargs))
|
||||||
|
|
||||||
def _url(self, pathfmt, resource_id=None, versioned_api=True):
|
def _url(self, pathfmt, *args, **kwargs):
|
||||||
if resource_id and not isinstance(resource_id, six.string_types):
|
for arg in args:
|
||||||
raise ValueError(
|
if not isinstance(arg, six.string_types):
|
||||||
'Expected a resource ID string but found {0} ({1}) '
|
raise ValueError(
|
||||||
'instead'.format(resource_id, type(resource_id))
|
'Expected a string but found {0} ({1}) '
|
||||||
)
|
'instead'.format(arg, type(arg))
|
||||||
elif resource_id:
|
)
|
||||||
resource_id = six.moves.urllib.parse.quote_plus(resource_id)
|
|
||||||
|
|
||||||
if versioned_api:
|
args = map(six.moves.urllib.parse.quote_plus, args)
|
||||||
|
|
||||||
|
if kwargs.get('versioned_api', True):
|
||||||
return '{0}/v{1}{2}'.format(
|
return '{0}/v{1}{2}'.format(
|
||||||
self.base_url, self._version, pathfmt.format(resource_id)
|
self.base_url, self._version, pathfmt.format(*args)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
return '{0}{1}'.format(self.base_url, pathfmt.format(resource_id))
|
return '{0}{1}'.format(self.base_url, pathfmt.format(*args))
|
||||||
|
|
||||||
def _raise_for_status(self, response, explanation=None):
|
def _raise_for_status(self, response, explanation=None):
|
||||||
"""Raises stored :class:`APIError`, if one occurred."""
|
"""Raises stored :class:`APIError`, if one occurred."""
|
||||||
|
|
|
@ -104,7 +104,9 @@ def fake_put(self, url, *args, **kwargs):
|
||||||
def fake_delete(self, url, *args, **kwargs):
|
def fake_delete(self, url, *args, **kwargs):
|
||||||
return fake_request('DELETE', url, *args, **kwargs)
|
return fake_request('DELETE', url, *args, **kwargs)
|
||||||
|
|
||||||
url_prefix = 'http+docker://localunixsocket/v{0}/'.format(
|
url_base = 'http+docker://localunixsocket/'
|
||||||
|
url_prefix = '{0}v{1}/'.format(
|
||||||
|
url_base,
|
||||||
docker.constants.DEFAULT_DOCKER_API_VERSION)
|
docker.constants.DEFAULT_DOCKER_API_VERSION)
|
||||||
|
|
||||||
|
|
||||||
|
@ -174,6 +176,14 @@ class DockerClientTest(Cleanup, base.BaseTestCase):
|
||||||
url, '{0}{1}'.format(url_prefix, 'hello/somename/world')
|
url, '{0}{1}'.format(url_prefix, 'hello/somename/world')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
url = self.client._url(
|
||||||
|
'/hello/{0}/world/{1}', 'somename', 'someothername'
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
url,
|
||||||
|
'{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(
|
self.assertEqual(
|
||||||
url, '{0}{1}'.format(url_prefix, 'hello/%2Fsome%3Fname/world')
|
url, '{0}{1}'.format(url_prefix, 'hello/%2Fsome%3Fname/world')
|
||||||
|
@ -187,8 +197,13 @@ class DockerClientTest(Cleanup, base.BaseTestCase):
|
||||||
url = self.client._url('/simple')
|
url = self.client._url('/simple')
|
||||||
self.assertEqual(url, '{0}{1}'.format(url_prefix, 'simple'))
|
self.assertEqual(url, '{0}{1}'.format(url_prefix, 'simple'))
|
||||||
|
|
||||||
url = self.client._url('/simple', None)
|
def test_url_unversioned_api(self):
|
||||||
self.assertEqual(url, '{0}{1}'.format(url_prefix, 'simple'))
|
url = self.client._url(
|
||||||
|
'/hello/{0}/world', 'somename', versioned_api=False
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
url, '{0}{1}'.format(url_base, 'hello/somename/world')
|
||||||
|
)
|
||||||
|
|
||||||
#########################
|
#########################
|
||||||
# INFORMATION TESTS #
|
# INFORMATION TESTS #
|
||||||
|
@ -202,6 +217,15 @@ class DockerClientTest(Cleanup, base.BaseTestCase):
|
||||||
timeout=DEFAULT_TIMEOUT_SECONDS
|
timeout=DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_version_no_api_version(self):
|
||||||
|
self.client.version(False)
|
||||||
|
|
||||||
|
fake_request.assert_called_with(
|
||||||
|
'GET',
|
||||||
|
url_base + 'version',
|
||||||
|
timeout=DEFAULT_TIMEOUT_SECONDS
|
||||||
|
)
|
||||||
|
|
||||||
def test_retrieve_server_version(self):
|
def test_retrieve_server_version(self):
|
||||||
client = docker.Client(version="auto")
|
client = docker.Client(version="auto")
|
||||||
self.assertTrue(isinstance(client._version, six.string_types))
|
self.assertTrue(isinstance(client._version, six.string_types))
|
||||||
|
|
Loading…
Reference in New Issue