diff options
author | Joffrey F <f.joffrey@gmail.com> | 2017-06-19 14:56:23 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-19 14:56:23 -0700 |
commit | 75e850e531027ef4f3f918a803efc1cf19d7579d (patch) | |
tree | 0e861c866e26d705613bc4f71c911338501304f5 | |
parent | 8645d1d41b69763b7dfb4dd0cbe3a3ab2d7f5321 (diff) | |
parent | d33e9ad030effb126dea39181ef401c80c442f15 (diff) | |
download | docker-py-75e850e531027ef4f3f918a803efc1cf19d7579d.tar.gz |
Merge pull request #1649 from shin-/1639-exec-id-check-resource
Update check_resource decorator to account for new resource names
-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 97a39b6..52674b1 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 @@ -661,7 +661,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. @@ -680,7 +680,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. @@ -701,7 +701,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): """ @@ -732,7 +732,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. @@ -752,7 +752,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. @@ -775,7 +775,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): """ @@ -843,7 +843,7 @@ class ContainerApiMixin(object): logs=True ) - @utils.check_resource + @utils.check_resource('container') def pause(self, container): """ Pauses all processes within a container. @@ -859,7 +859,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``. @@ -908,7 +908,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): """ @@ -956,7 +956,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. @@ -980,7 +980,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. @@ -998,7 +998,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. @@ -1017,7 +1017,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. @@ -1038,7 +1038,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 @@ -1077,7 +1077,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 @@ -1103,7 +1103,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. @@ -1124,7 +1124,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. @@ -1146,7 +1146,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. @@ -1159,7 +1159,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, @@ -1224,7 +1224,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 3a45454..5ebb41a 100644 --- a/docker/api/network.py +++ b/docker/api/network.py @@ -167,6 +167,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. @@ -179,6 +180,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. @@ -198,7 +200,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, @@ -235,7 +237,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): |