diff options
author | Joffrey F <joffrey@docker.com> | 2017-06-15 18:34:00 -0700 |
---|---|---|
committer | Joffrey F <joffrey@docker.com> | 2017-06-15 18:34:00 -0700 |
commit | d33e9ad030effb126dea39181ef401c80c442f15 (patch) | |
tree | e4b5f568a2acacde35904587693c737f611c34c7 | |
parent | 8fc6540fea8d4ed86f187a064872b6d616208e8b (diff) | |
download | docker-py-d33e9ad030effb126dea39181ef401c80c442f15.tar.gz |
Update check_resource decorator to account for new resource names
Signed-off-by: Joffrey F <joffrey@docker.com>
-rw-r--r-- | docker/api/client.py | 2 | ||||
-rw-r--r-- | docker/api/container.py | 48 | ||||
-rw-r--r-- | docker/api/exec_api.py | 4 | ||||
-rw-r--r-- | docker/api/image.py | 12 | ||||
-rw-r--r-- | docker/api/network.py | 6 | ||||
-rw-r--r-- | docker/api/plugin.py | 8 | ||||
-rw-r--r-- | docker/api/secret.py | 4 | ||||
-rw-r--r-- | docker/api/service.py | 10 | ||||
-rw-r--r-- | docker/api/swarm.py | 4 | ||||
-rw-r--r-- | docker/types/services.py | 2 | ||||
-rw-r--r-- | docker/utils/decorators.py | 31 |
11 files changed, 66 insertions, 65 deletions
diff --git a/docker/api/client.py b/docker/api/client.py index 54ec6ab..6e567b1 100644 --- a/docker/api/client.py +++ b/docker/api/client.py @@ -248,7 +248,7 @@ class APIClient( 'stream': 1 } - @check_resource + @check_resource('container') def _attach_websocket(self, container, params=None): url = self._url("/containers/{0}/attach/ws", container) req = requests.Request("POST", url, params=self._attach_params(params)) diff --git a/docker/api/container.py b/docker/api/container.py index 97b5405..f7ff971 100644 --- a/docker/api/container.py +++ b/docker/api/container.py @@ -10,7 +10,7 @@ from ..types import ( class ContainerApiMixin(object): - @utils.check_resource + @utils.check_resource('container') def attach(self, container, stdout=True, stderr=True, stream=False, logs=False): """ @@ -54,7 +54,7 @@ class ContainerApiMixin(object): return self._read_from_socket(response, stream) - @utils.check_resource + @utils.check_resource('container') def attach_socket(self, container, params=None, ws=False): """ Like ``attach``, but returns the underlying socket-like object for the @@ -93,7 +93,7 @@ class ContainerApiMixin(object): ) ) - @utils.check_resource + @utils.check_resource('container') def commit(self, container, repository=None, tag=None, message=None, author=None, changes=None, conf=None): """ @@ -195,7 +195,7 @@ class ContainerApiMixin(object): x['Id'] = x['Id'][:12] return res - @utils.check_resource + @utils.check_resource('container') def copy(self, container, resource): """ Identical to the ``docker cp`` command. Get files/folders from the @@ -659,7 +659,7 @@ class ContainerApiMixin(object): """ return EndpointConfig(self._version, *args, **kwargs) - @utils.check_resource + @utils.check_resource('container') def diff(self, container): """ Inspect changes on a container's filesystem. @@ -678,7 +678,7 @@ class ContainerApiMixin(object): self._get(self._url("/containers/{0}/changes", container)), True ) - @utils.check_resource + @utils.check_resource('container') def export(self, container): """ Export the contents of a filesystem as a tar archive. @@ -699,7 +699,7 @@ class ContainerApiMixin(object): self._raise_for_status(res) return res.raw - @utils.check_resource + @utils.check_resource('container') @utils.minimum_version('1.20') def get_archive(self, container, path): """ @@ -730,7 +730,7 @@ class ContainerApiMixin(object): utils.decode_json_header(encoded_stat) if encoded_stat else None ) - @utils.check_resource + @utils.check_resource('container') def inspect_container(self, container): """ Identical to the `docker inspect` command, but only for containers. @@ -750,7 +750,7 @@ class ContainerApiMixin(object): self._get(self._url("/containers/{0}/json", container)), True ) - @utils.check_resource + @utils.check_resource('container') def kill(self, container, signal=None): """ Kill a container or send a signal to a container. @@ -773,7 +773,7 @@ class ContainerApiMixin(object): self._raise_for_status(res) - @utils.check_resource + @utils.check_resource('container') def logs(self, container, stdout=True, stderr=True, stream=False, timestamps=False, tail='all', since=None, follow=None): """ @@ -836,7 +836,7 @@ class ContainerApiMixin(object): logs=True ) - @utils.check_resource + @utils.check_resource('container') def pause(self, container): """ Pauses all processes within a container. @@ -852,7 +852,7 @@ class ContainerApiMixin(object): res = self._post(url) self._raise_for_status(res) - @utils.check_resource + @utils.check_resource('container') def port(self, container, private_port): """ Lookup the public-facing port that is NAT-ed to ``private_port``. @@ -901,7 +901,7 @@ class ContainerApiMixin(object): return h_ports - @utils.check_resource + @utils.check_resource('container') @utils.minimum_version('1.20') def put_archive(self, container, path, data): """ @@ -949,7 +949,7 @@ class ContainerApiMixin(object): url = self._url('/containers/prune') return self._result(self._post(url, params=params), True) - @utils.check_resource + @utils.check_resource('container') def remove_container(self, container, v=False, link=False, force=False): """ Remove a container. Similar to the ``docker rm`` command. @@ -973,7 +973,7 @@ class ContainerApiMixin(object): self._raise_for_status(res) @utils.minimum_version('1.17') - @utils.check_resource + @utils.check_resource('container') def rename(self, container, name): """ Rename a container. Similar to the ``docker rename`` command. @@ -991,7 +991,7 @@ class ContainerApiMixin(object): res = self._post(url, params=params) self._raise_for_status(res) - @utils.check_resource + @utils.check_resource('container') def resize(self, container, height, width): """ Resize the tty session. @@ -1010,7 +1010,7 @@ class ContainerApiMixin(object): res = self._post(url, params=params) self._raise_for_status(res) - @utils.check_resource + @utils.check_resource('container') def restart(self, container, timeout=10): """ Restart a container. Similar to the ``docker restart`` command. @@ -1031,7 +1031,7 @@ class ContainerApiMixin(object): res = self._post(url, params=params) self._raise_for_status(res) - @utils.check_resource + @utils.check_resource('container') def start(self, container, *args, **kwargs): """ Start a container. Similar to the ``docker start`` command, but @@ -1070,7 +1070,7 @@ class ContainerApiMixin(object): self._raise_for_status(res) @utils.minimum_version('1.17') - @utils.check_resource + @utils.check_resource('container') def stats(self, container, decode=None, stream=True): """ Stream statistics for a specific container. Similar to the @@ -1096,7 +1096,7 @@ class ContainerApiMixin(object): return self._result(self._get(url, params={'stream': False}), json=True) - @utils.check_resource + @utils.check_resource('container') def stop(self, container, timeout=10): """ Stops a container. Similar to the ``docker stop`` command. @@ -1117,7 +1117,7 @@ class ContainerApiMixin(object): timeout=(timeout + (self.timeout or 0))) self._raise_for_status(res) - @utils.check_resource + @utils.check_resource('container') def top(self, container, ps_args=None): """ Display the running processes of a container. @@ -1139,7 +1139,7 @@ class ContainerApiMixin(object): params['ps_args'] = ps_args return self._result(self._get(u, params=params), True) - @utils.check_resource + @utils.check_resource('container') def unpause(self, container): """ Unpause all processes within a container. @@ -1152,7 +1152,7 @@ class ContainerApiMixin(object): self._raise_for_status(res) @utils.minimum_version('1.22') - @utils.check_resource + @utils.check_resource('container') def update_container( self, container, blkio_weight=None, cpu_period=None, cpu_quota=None, cpu_shares=None, cpuset_cpus=None, cpuset_mems=None, mem_limit=None, @@ -1217,7 +1217,7 @@ class ContainerApiMixin(object): res = self._post_json(url, data=data) return self._result(res, True) - @utils.check_resource + @utils.check_resource('container') def wait(self, container, timeout=None): """ Block until a container stops, then return its exit code. Similar to diff --git a/docker/api/exec_api.py b/docker/api/exec_api.py index 3ff6525..2b407ce 100644 --- a/docker/api/exec_api.py +++ b/docker/api/exec_api.py @@ -6,7 +6,7 @@ from .. import utils class ExecApiMixin(object): @utils.minimum_version('1.15') - @utils.check_resource + @utils.check_resource('container') def exec_create(self, container, cmd, stdout=True, stderr=True, stdin=False, tty=False, privileged=False, user='', environment=None): @@ -110,7 +110,7 @@ class ExecApiMixin(object): self._raise_for_status(res) @utils.minimum_version('1.15') - @utils.check_resource + @utils.check_resource('exec_id') def exec_start(self, exec_id, detach=False, tty=False, stream=False, socket=False): """ diff --git a/docker/api/image.py b/docker/api/image.py index 09eb086..181c4a1 100644 --- a/docker/api/image.py +++ b/docker/api/image.py @@ -12,7 +12,7 @@ log = logging.getLogger(__name__) class ImageApiMixin(object): - @utils.check_resource + @utils.check_resource('image') def get_image(self, image): """ Get a tarball of an image. Similar to the ``docker save`` command. @@ -39,7 +39,7 @@ class ImageApiMixin(object): self._raise_for_status(res) return res.raw - @utils.check_resource + @utils.check_resource('image') def history(self, image): """ Show the history of an image. @@ -228,7 +228,7 @@ class ImageApiMixin(object): image=image, repository=repository, tag=tag, changes=changes ) - @utils.check_resource + @utils.check_resource('image') def insert(self, image, url, path): if utils.compare_version('1.12', self._version) >= 0: raise errors.DeprecatedMethod( @@ -241,7 +241,7 @@ class ImageApiMixin(object): } return self._result(self._post(api_url, params=params)) - @utils.check_resource + @utils.check_resource('image') def inspect_image(self, image): """ Get detailed information about an image. Similar to the ``docker @@ -443,7 +443,7 @@ class ImageApiMixin(object): return self._result(response) - @utils.check_resource + @utils.check_resource('image') def remove_image(self, image, force=False, noprune=False): """ Remove an image. Similar to the ``docker rmi`` command. @@ -477,7 +477,7 @@ class ImageApiMixin(object): True ) - @utils.check_resource + @utils.check_resource('image') def tag(self, image, repository, tag=None, force=False): """ Tag an image into a repository. Similar to the ``docker tag`` command. diff --git a/docker/api/network.py b/docker/api/network.py index 74f4cd2..bd2959f 100644 --- a/docker/api/network.py +++ b/docker/api/network.py @@ -156,6 +156,7 @@ class NetworkApiMixin(object): return self._result(self._post(url, params=params), True) @minimum_version('1.21') + @check_resource('net_id') def remove_network(self, net_id): """ Remove a network. Similar to the ``docker network rm`` command. @@ -168,6 +169,7 @@ class NetworkApiMixin(object): self._raise_for_status(res) @minimum_version('1.21') + @check_resource('net_id') def inspect_network(self, net_id, verbose=None): """ Get detailed information about a network. @@ -187,7 +189,7 @@ class NetworkApiMixin(object): res = self._get(url, params=params) return self._result(res, json=True) - @check_resource + @check_resource('image') @minimum_version('1.21') def connect_container_to_network(self, container, net_id, ipv4_address=None, ipv6_address=None, @@ -224,7 +226,7 @@ class NetworkApiMixin(object): res = self._post_json(url, data=data) self._raise_for_status(res) - @check_resource + @check_resource('image') @minimum_version('1.21') def disconnect_container_from_network(self, container, net_id, force=False): diff --git a/docker/api/plugin.py b/docker/api/plugin.py index ba40c88..87520cc 100644 --- a/docker/api/plugin.py +++ b/docker/api/plugin.py @@ -5,7 +5,7 @@ from .. import auth, utils class PluginApiMixin(object): @utils.minimum_version('1.25') - @utils.check_resource + @utils.check_resource('name') def configure_plugin(self, name, options): """ Configure a plugin. @@ -171,7 +171,7 @@ class PluginApiMixin(object): return self._result(self._get(url, params=params), True) @utils.minimum_version('1.25') - @utils.check_resource + @utils.check_resource('name') def push_plugin(self, name): """ Push a plugin to the registry. @@ -195,7 +195,7 @@ class PluginApiMixin(object): return self._stream_helper(res, decode=True) @utils.minimum_version('1.25') - @utils.check_resource + @utils.check_resource('name') def remove_plugin(self, name, force=False): """ Remove an installed plugin. @@ -215,7 +215,7 @@ class PluginApiMixin(object): return True @utils.minimum_version('1.26') - @utils.check_resource + @utils.check_resource('name') def upgrade_plugin(self, name, remote, privileges): """ Upgrade an installed plugin. diff --git a/docker/api/secret.py b/docker/api/secret.py index 03534a6..1760a39 100644 --- a/docker/api/secret.py +++ b/docker/api/secret.py @@ -36,7 +36,7 @@ class SecretApiMixin(object): ) @utils.minimum_version('1.25') - @utils.check_resource + @utils.check_resource('id') def inspect_secret(self, id): """ Retrieve secret metadata @@ -54,7 +54,7 @@ class SecretApiMixin(object): return self._result(self._get(url), True) @utils.minimum_version('1.25') - @utils.check_resource + @utils.check_resource('id') def remove_secret(self, id): """ Remove a secret diff --git a/docker/api/service.py b/docker/api/service.py index aea93cb..0f14776 100644 --- a/docker/api/service.py +++ b/docker/api/service.py @@ -113,7 +113,7 @@ class ServiceApiMixin(object): ) @utils.minimum_version('1.24') - @utils.check_resource + @utils.check_resource('service') def inspect_service(self, service): """ Return information about a service. @@ -132,7 +132,7 @@ class ServiceApiMixin(object): return self._result(self._get(url), True) @utils.minimum_version('1.24') - @utils.check_resource + @utils.check_resource('task') def inspect_task(self, task): """ Retrieve information about a task. @@ -151,7 +151,7 @@ class ServiceApiMixin(object): return self._result(self._get(url), True) @utils.minimum_version('1.24') - @utils.check_resource + @utils.check_resource('service') def remove_service(self, service): """ Stop and remove a service. @@ -195,7 +195,7 @@ class ServiceApiMixin(object): return self._result(self._get(url, params=params), True) @utils.minimum_version('1.25') - @utils.check_resource + @utils.check_resource('service') def service_logs(self, service, details=False, follow=False, stdout=False, stderr=False, since=0, timestamps=False, tail='all', is_tty=None): @@ -269,7 +269,7 @@ class ServiceApiMixin(object): return self._result(self._get(url, params=params), True) @utils.minimum_version('1.24') - @utils.check_resource + @utils.check_resource('service') def update_service(self, service, version, task_template=None, name=None, labels=None, mode=None, update_config=None, networks=None, endpoint_config=None, diff --git a/docker/api/swarm.py b/docker/api/swarm.py index 8877056..4fa0c4a 100644 --- a/docker/api/swarm.py +++ b/docker/api/swarm.py @@ -117,7 +117,7 @@ class SwarmApiMixin(object): url = self._url('/swarm') return self._result(self._get(url), True) - @utils.check_resource + @utils.check_resource('node_id') @utils.minimum_version('1.24') def inspect_node(self, node_id): """ @@ -228,7 +228,7 @@ class SwarmApiMixin(object): return self._result(self._get(url, params=params), True) - @utils.check_resource + @utils.check_resource('node_id') @utils.minimum_version('1.24') def remove_node(self, node_id, force=False): """ diff --git a/docker/types/services.py b/docker/types/services.py index 7456a42..9cec34e 100644 --- a/docker/types/services.py +++ b/docker/types/services.py @@ -443,7 +443,7 @@ class SecretReference(dict): gid (string): GID of the secret file's group. Default: 0 mode (int): File access mode inside the container. Default: 0o444 """ - @check_resource + @check_resource('secret_id') def __init__(self, secret_id, secret_name, filename=None, uid=None, gid=None, mode=0o444): self['SecretName'] = secret_name diff --git a/docker/utils/decorators.py b/docker/utils/decorators.py index 18cde41..5e195c0 100644 --- a/docker/utils/decorators.py +++ b/docker/utils/decorators.py @@ -4,22 +4,21 @@ from .. import errors from . import utils -def check_resource(f): - @functools.wraps(f) - def wrapped(self, resource_id=None, *args, **kwargs): - if resource_id is None: - if kwargs.get('container'): - resource_id = kwargs.pop('container') - elif kwargs.get('image'): - resource_id = kwargs.pop('image') - if isinstance(resource_id, dict): - resource_id = resource_id.get('Id', resource_id.get('ID')) - if not resource_id: - raise errors.NullResource( - 'Resource ID was not provided' - ) - return f(self, resource_id, *args, **kwargs) - return wrapped +def check_resource(resource_name): + def decorator(f): + @functools.wraps(f) + def wrapped(self, resource_id=None, *args, **kwargs): + if resource_id is None and kwargs.get(resource_name): + resource_id = kwargs.pop(resource_name) + if isinstance(resource_id, dict): + resource_id = resource_id.get('Id', resource_id.get('ID')) + if not resource_id: + raise errors.NullResource( + 'Resource ID was not provided' + ) + return f(self, resource_id, *args, **kwargs) + return wrapped + return decorator def minimum_version(version): |