mirror of https://github.com/docker/docker-py.git
Move image/container ID resolution to @check_resource decorator.
This commit is contained in:
parent
08444cf355
commit
947febcbd8
|
@ -251,8 +251,6 @@ class Client(requests.Session):
|
||||||
@check_resource
|
@check_resource
|
||||||
def attach(self, container, stdout=True, stderr=True,
|
def attach(self, container, stdout=True, stderr=True,
|
||||||
stream=False, logs=False):
|
stream=False, logs=False):
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
params = {
|
params = {
|
||||||
'logs': logs and 1 or 0,
|
'logs': logs and 1 or 0,
|
||||||
'stdout': stdout and 1 or 0,
|
'stdout': stdout and 1 or 0,
|
||||||
|
@ -297,9 +295,6 @@ class Client(requests.Session):
|
||||||
if ws:
|
if ws:
|
||||||
return self._attach_websocket(container, params)
|
return self._attach_websocket(container, params)
|
||||||
|
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
|
|
||||||
u = self._url("/containers/{0}/attach".format(container))
|
u = self._url("/containers/{0}/attach".format(container))
|
||||||
return self._get_raw_response_socket(self.post(
|
return self._get_raw_response_socket(self.post(
|
||||||
u, None, params=self._attach_params(params), stream=True))
|
u, None, params=self._attach_params(params), stream=True))
|
||||||
|
@ -410,8 +405,6 @@ class Client(requests.Session):
|
||||||
@check_resource
|
@check_resource
|
||||||
def commit(self, container, repository=None, tag=None, message=None,
|
def commit(self, container, repository=None, tag=None, message=None,
|
||||||
author=None, conf=None):
|
author=None, conf=None):
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
params = {
|
params = {
|
||||||
'container': container,
|
'container': container,
|
||||||
'repo': repository,
|
'repo': repository,
|
||||||
|
@ -448,8 +441,6 @@ class Client(requests.Session):
|
||||||
|
|
||||||
@check_resource
|
@check_resource
|
||||||
def copy(self, container, resource):
|
def copy(self, container, resource):
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
res = self._post_json(
|
res = self._post_json(
|
||||||
self._url("/containers/{0}/copy".format(container)),
|
self._url("/containers/{0}/copy".format(container)),
|
||||||
data={"Resource": resource},
|
data={"Resource": resource},
|
||||||
|
@ -493,8 +484,6 @@ class Client(requests.Session):
|
||||||
|
|
||||||
@check_resource
|
@check_resource
|
||||||
def diff(self, container):
|
def diff(self, container):
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
return self._result(self._get(self._url("/containers/{0}/changes".
|
return self._result(self._get(self._url("/containers/{0}/changes".
|
||||||
format(container))), True)
|
format(container))), True)
|
||||||
|
|
||||||
|
@ -539,8 +528,6 @@ class Client(requests.Session):
|
||||||
raise errors.InvalidVersion(
|
raise errors.InvalidVersion(
|
||||||
'Privileged exec is not supported in API < 1.19'
|
'Privileged exec is not supported in API < 1.19'
|
||||||
)
|
)
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
if isinstance(cmd, six.string_types):
|
if isinstance(cmd, six.string_types):
|
||||||
cmd = shlex.split(str(cmd))
|
cmd = shlex.split(str(cmd))
|
||||||
|
|
||||||
|
@ -605,8 +592,6 @@ class Client(requests.Session):
|
||||||
|
|
||||||
@check_resource
|
@check_resource
|
||||||
def export(self, container):
|
def export(self, container):
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
res = self._get(self._url("/containers/{0}/export".format(container)),
|
res = self._get(self._url("/containers/{0}/export".format(container)),
|
||||||
stream=True)
|
stream=True)
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
|
@ -744,16 +729,12 @@ class Client(requests.Session):
|
||||||
|
|
||||||
@check_resource
|
@check_resource
|
||||||
def inspect_container(self, container):
|
def inspect_container(self, container):
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
return self._result(
|
return self._result(
|
||||||
self._get(self._url("/containers/{0}/json".format(container))),
|
self._get(self._url("/containers/{0}/json".format(container))),
|
||||||
True)
|
True)
|
||||||
|
|
||||||
@check_resource
|
@check_resource
|
||||||
def inspect_image(self, image):
|
def inspect_image(self, image):
|
||||||
if isinstance(image, dict):
|
|
||||||
image = image.get('Id')
|
|
||||||
return self._result(
|
return self._result(
|
||||||
self._get(self._url("/images/{0}/json".format(image))),
|
self._get(self._url("/images/{0}/json".format(image))),
|
||||||
True
|
True
|
||||||
|
@ -761,8 +742,6 @@ class Client(requests.Session):
|
||||||
|
|
||||||
@check_resource
|
@check_resource
|
||||||
def kill(self, container, signal=None):
|
def kill(self, container, signal=None):
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
url = self._url("/containers/{0}/kill".format(container))
|
url = self._url("/containers/{0}/kill".format(container))
|
||||||
params = {}
|
params = {}
|
||||||
if signal is not None:
|
if signal is not None:
|
||||||
|
@ -810,8 +789,6 @@ class Client(requests.Session):
|
||||||
@check_resource
|
@check_resource
|
||||||
def logs(self, container, stdout=True, stderr=True, stream=False,
|
def logs(self, container, stdout=True, stderr=True, stream=False,
|
||||||
timestamps=False, tail='all'):
|
timestamps=False, tail='all'):
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
if utils.compare_version('1.11', self._version) >= 0:
|
if utils.compare_version('1.11', self._version) >= 0:
|
||||||
params = {'stderr': stderr and 1 or 0,
|
params = {'stderr': stderr and 1 or 0,
|
||||||
'stdout': stdout and 1 or 0,
|
'stdout': stdout and 1 or 0,
|
||||||
|
@ -844,8 +821,6 @@ class Client(requests.Session):
|
||||||
|
|
||||||
@check_resource
|
@check_resource
|
||||||
def pause(self, container):
|
def pause(self, container):
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
url = self._url('/containers/{0}/pause'.format(container))
|
url = self._url('/containers/{0}/pause'.format(container))
|
||||||
res = self._post(url)
|
res = self._post(url)
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
|
@ -855,8 +830,6 @@ class Client(requests.Session):
|
||||||
|
|
||||||
@check_resource
|
@check_resource
|
||||||
def port(self, container, private_port):
|
def port(self, container, private_port):
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
res = self._get(self._url("/containers/{0}/json".format(container)))
|
res = self._get(self._url("/containers/{0}/json".format(container)))
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
json_ = res.json()
|
json_ = res.json()
|
||||||
|
@ -954,8 +927,6 @@ class Client(requests.Session):
|
||||||
|
|
||||||
@check_resource
|
@check_resource
|
||||||
def remove_container(self, container, v=False, link=False, force=False):
|
def remove_container(self, container, v=False, link=False, force=False):
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
params = {'v': v, 'link': link, 'force': force}
|
params = {'v': v, 'link': link, 'force': force}
|
||||||
res = self._delete(self._url("/containers/" + container),
|
res = self._delete(self._url("/containers/" + container),
|
||||||
params=params)
|
params=params)
|
||||||
|
@ -963,8 +934,6 @@ class Client(requests.Session):
|
||||||
|
|
||||||
@check_resource
|
@check_resource
|
||||||
def remove_image(self, image, force=False, noprune=False):
|
def remove_image(self, image, force=False, noprune=False):
|
||||||
if isinstance(image, dict):
|
|
||||||
image = image.get('Id')
|
|
||||||
params = {'force': force, 'noprune': noprune}
|
params = {'force': force, 'noprune': noprune}
|
||||||
res = self._delete(self._url("/images/" + image), params=params)
|
res = self._delete(self._url("/images/" + image), params=params)
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
|
@ -975,8 +944,6 @@ class Client(requests.Session):
|
||||||
raise errors.InvalidVersion(
|
raise errors.InvalidVersion(
|
||||||
'rename was only introduced in API version 1.17'
|
'rename was only introduced in API version 1.17'
|
||||||
)
|
)
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
url = self._url("/containers/{0}/rename".format(container))
|
url = self._url("/containers/{0}/rename".format(container))
|
||||||
params = {'name': name}
|
params = {'name': name}
|
||||||
res = self._post(url, params=params)
|
res = self._post(url, params=params)
|
||||||
|
@ -984,9 +951,6 @@ class Client(requests.Session):
|
||||||
|
|
||||||
@check_resource
|
@check_resource
|
||||||
def resize(self, container, height, width):
|
def resize(self, container, height, width):
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
|
|
||||||
params = {'h': height, 'w': width}
|
params = {'h': height, 'w': width}
|
||||||
url = self._url("/containers/{0}/resize".format(container))
|
url = self._url("/containers/{0}/resize".format(container))
|
||||||
res = self._post(url, params=params)
|
res = self._post(url, params=params)
|
||||||
|
@ -994,8 +958,6 @@ class Client(requests.Session):
|
||||||
|
|
||||||
@check_resource
|
@check_resource
|
||||||
def restart(self, container, timeout=10):
|
def restart(self, container, timeout=10):
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
params = {'t': timeout}
|
params = {'t': timeout}
|
||||||
url = self._url("/containers/{0}/restart".format(container))
|
url = self._url("/containers/{0}/restart".format(container))
|
||||||
res = self._post(url, params=params)
|
res = self._post(url, params=params)
|
||||||
|
@ -1060,9 +1022,6 @@ class Client(requests.Session):
|
||||||
ipc_mode=ipc_mode, security_opt=security_opt, ulimits=ulimits
|
ipc_mode=ipc_mode, security_opt=security_opt, ulimits=ulimits
|
||||||
)
|
)
|
||||||
|
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
|
|
||||||
url = self._url("/containers/{0}/start".format(container))
|
url = self._url("/containers/{0}/start".format(container))
|
||||||
if not start_config:
|
if not start_config:
|
||||||
start_config = None
|
start_config = None
|
||||||
|
@ -1081,15 +1040,11 @@ class Client(requests.Session):
|
||||||
raise errors.InvalidVersion(
|
raise errors.InvalidVersion(
|
||||||
'Stats retrieval is not supported in API < 1.17!')
|
'Stats retrieval is not supported in API < 1.17!')
|
||||||
|
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
url = self._url("/containers/{0}/stats".format(container))
|
url = self._url("/containers/{0}/stats".format(container))
|
||||||
return self._stream_helper(self._get(url, stream=True), decode=decode)
|
return self._stream_helper(self._get(url, stream=True), decode=decode)
|
||||||
|
|
||||||
@check_resource
|
@check_resource
|
||||||
def stop(self, container, timeout=10):
|
def stop(self, container, timeout=10):
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
params = {'t': timeout}
|
params = {'t': timeout}
|
||||||
url = self._url("/containers/{0}/stop".format(container))
|
url = self._url("/containers/{0}/stop".format(container))
|
||||||
|
|
||||||
|
@ -1111,8 +1066,6 @@ class Client(requests.Session):
|
||||||
|
|
||||||
@check_resource
|
@check_resource
|
||||||
def top(self, container):
|
def top(self, container):
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
u = self._url("/containers/{0}/top".format(container))
|
u = self._url("/containers/{0}/top".format(container))
|
||||||
return self._result(self._get(u), True)
|
return self._result(self._get(u), True)
|
||||||
|
|
||||||
|
@ -1122,16 +1075,12 @@ class Client(requests.Session):
|
||||||
|
|
||||||
@check_resource
|
@check_resource
|
||||||
def unpause(self, container):
|
def unpause(self, container):
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
url = self._url('/containers/{0}/unpause'.format(container))
|
url = self._url('/containers/{0}/unpause'.format(container))
|
||||||
res = self._post(url)
|
res = self._post(url)
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
|
|
||||||
@check_resource
|
@check_resource
|
||||||
def wait(self, container, timeout=None):
|
def wait(self, container, timeout=None):
|
||||||
if isinstance(container, dict):
|
|
||||||
container = container.get('Id')
|
|
||||||
url = self._url("/containers/{0}/wait".format(container))
|
url = self._url("/containers/{0}/wait".format(container))
|
||||||
res = self._post(url, timeout=timeout)
|
res = self._post(url, timeout=timeout)
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
|
|
|
@ -8,6 +8,8 @@ def check_resource(f):
|
||||||
resource_id = kwargs.pop('container')
|
resource_id = kwargs.pop('container')
|
||||||
elif kwargs.get('image'):
|
elif kwargs.get('image'):
|
||||||
resource_id = kwargs.pop('image')
|
resource_id = kwargs.pop('image')
|
||||||
|
if isinstance(resource_id, dict):
|
||||||
|
resource_id = resource_id.get('Id')
|
||||||
if not resource_id:
|
if not resource_id:
|
||||||
raise errors.NullResource(
|
raise errors.NullResource(
|
||||||
'image or container param is undefined'
|
'image or container param is undefined'
|
||||||
|
|
|
@ -1786,15 +1786,16 @@ class DockerClientTest(Cleanup, base.BaseTestCase):
|
||||||
timeout=DEFAULT_TIMEOUT_SECONDS
|
timeout=DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_inspect_container_empty_id(self):
|
def test_inspect_container_undefined_id(self):
|
||||||
try:
|
for arg in None, '', {True: True}:
|
||||||
self.client.inspect_container('')
|
try:
|
||||||
except docker.errors.NullResource as e:
|
self.client.inspect_container(arg)
|
||||||
self.assertEqual(
|
except docker.errors.NullResource as e:
|
||||||
e.args[0], 'image or container param is undefined'
|
self.assertEqual(
|
||||||
)
|
e.args[0], 'image or container param is undefined'
|
||||||
else:
|
)
|
||||||
self.fail('Command expected NullResource exception')
|
else:
|
||||||
|
self.fail('Command expected NullResource exception')
|
||||||
|
|
||||||
def test_container_stats(self):
|
def test_container_stats(self):
|
||||||
try:
|
try:
|
||||||
|
@ -1967,15 +1968,16 @@ class DockerClientTest(Cleanup, base.BaseTestCase):
|
||||||
timeout=DEFAULT_TIMEOUT_SECONDS
|
timeout=DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_inspect_image_empty_id(self):
|
def test_inspect_image_undefined_id(self):
|
||||||
try:
|
for arg in None, '', {True: True}:
|
||||||
self.client.inspect_image('')
|
try:
|
||||||
except docker.errors.NullResource as e:
|
self.client.inspect_image(arg)
|
||||||
self.assertEqual(
|
except docker.errors.NullResource as e:
|
||||||
e.args[0], 'image or container param is undefined'
|
self.assertEqual(
|
||||||
)
|
e.args[0], 'image or container param is undefined'
|
||||||
else:
|
)
|
||||||
self.fail('Command expected NullResource exception')
|
else:
|
||||||
|
self.fail('Command expected NullResource exception')
|
||||||
|
|
||||||
def test_insert_image(self):
|
def test_insert_image(self):
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in New Issue