summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoffrey F <joffrey@docker.com>2015-04-27 12:36:18 -0700
committerJoffrey F <joffrey@docker.com>2015-04-27 12:36:18 -0700
commit0fd70b47e305b6f1e735cf07b78381001048cf87 (patch)
tree736c08cb55b0b2d55f4cc23e40b7b8c90307d7c7
parent2b153a63c86b1f9fa95f41095a0e39a89a79a5f1 (diff)
downloaddocker-py-0fd70b47e305b6f1e735cf07b78381001048cf87.tar.gz
Properly implement exec API
-rw-r--r--docker/client.py53
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: