diff options
author | Joffrey F <joffrey@docker.com> | 2015-04-27 12:36:18 -0700 |
---|---|---|
committer | Joffrey F <joffrey@docker.com> | 2015-04-27 12:36:18 -0700 |
commit | 0fd70b47e305b6f1e735cf07b78381001048cf87 (patch) | |
tree | 736c08cb55b0b2d55f4cc23e40b7b8c90307d7c7 | |
parent | 2b153a63c86b1f9fa95f41095a0e39a89a79a5f1 (diff) | |
download | docker-py-0fd70b47e305b6f1e735cf07b78381001048cf87.tar.gz |
Properly implement exec API
-rw-r--r-- | docker/client.py | 53 |
1 files changed, 48 insertions, 5 deletions
diff --git a/docker/client.py b/docker/client.py index 774224c..7e9ff3a 100644 --- a/docker/client.py +++ b/docker/client.py @@ -17,6 +17,7 @@ import os import re import shlex import struct +import warnings from datetime import datetime import requests @@ -515,6 +516,18 @@ class Client(requests.Session): @check_resource def execute(self, container, cmd, detach=False, stdout=True, stderr=True, stream=False, tty=False): + warnings.warn( + 'Client.execute is being deprecated. Please use exec_create & ' + 'exec_start instead', DeprecationWarning + ) + create_res = self.exec_create( + container, cmd, detach, stdout, stderr, tty + ) + + return self.exec_start(create_res, detach, tty, stream) + + def exec_create(self, container, cmd, detach=False, stdout=True, + stderr=True, tty=False): if utils.compare_version('1.15', self._version) < 0: raise errors.InvalidVersion('Exec is not supported in API < 1.15') if isinstance(container, dict): @@ -534,14 +547,44 @@ class Client(requests.Session): 'Cmd': cmd } - # create the command url = self._url('/containers/{0}/exec'.format(container)) res = self._post_json(url, data=data) - self._raise_for_status(res) + return self._result(res, True) + + def exec_inspect(self, exec_id): + if utils.compare_version('1.15', self._version) < 0: + raise errors.InvalidVersion('Exec is not supported in API < 1.15') + if isinstance(exec_id, dict): + exec_id = exec_id.get('Id') + res = self._get(self._url("/exec/{0}/json".format(exec_id))) + return self._result(res, True) + + def exec_resize(self, exec_id, height=None, width=None): + if utils.compare_version('1.15', self._version) < 0: + raise errors.InvalidVersion('Exec is not supported in API < 1.15') + if isinstance(exec_id, dict): + exec_id = exec_id.get('Id') + data = { + 'h': height, + 'w': width + } + res = self._post_json( + self._url('exec/{0}/resize'.format(exec_id)), data + ) + res.raise_for_status() + + def exec_start(self, exec_id, detach=False, tty=False, stream=False): + if utils.compare_version('1.15', self._version) < 0: + raise errors.InvalidVersion('Exec is not supported in API < 1.15') + if isinstance(exec_id, dict): + exec_id = exec_id.get('Id') + + data = { + 'Tty': tty, + 'Detach': detach + } - # start the command - cmd_id = res.json().get('Id') - res = self._post_json(self._url('/exec/{0}/start'.format(cmd_id)), + res = self._post_json(self._url('/exec/{0}/start'.format(exec_id)), data=data, stream=stream) self._raise_for_status(res) if stream: |