summaryrefslogtreecommitdiff
path: root/docker/api/exec_api.py
diff options
context:
space:
mode:
authorTianon Gravi <tianon@debian.org>2015-11-08 10:31:39 -0800
committerTianon Gravi <tianon@debian.org>2015-11-08 10:31:39 -0800
commit0db60a1e341b25c36bebb5903f0ce87126d7eee4 (patch)
tree601d639621dd6d0a0301861c1279f8fcc866528c /docker/api/exec_api.py
parent90baa554e7b2f26eb2b43bb528d82b170b505903 (diff)
Import python-docker_1.5.0.orig.tar.gz
Diffstat (limited to 'docker/api/exec_api.py')
-rw-r--r--docker/api/exec_api.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/docker/api/exec_api.py b/docker/api/exec_api.py
new file mode 100644
index 0000000..c66b9dd
--- /dev/null
+++ b/docker/api/exec_api.py
@@ -0,0 +1,70 @@
+import shlex
+
+import six
+
+from .. import errors
+from .. import utils
+
+
+class ExecApiMixin(object):
+ @utils.minimum_version('1.15')
+ @utils.check_resource
+ def exec_create(self, container, cmd, stdout=True, stderr=True, tty=False,
+ privileged=False, user=''):
+ if privileged and utils.compare_version('1.19', self._version) < 0:
+ raise errors.InvalidVersion(
+ 'Privileged exec is not supported in API < 1.19'
+ )
+ if user and utils.compare_version('1.19', self._version) < 0:
+ raise errors.InvalidVersion(
+ 'User-specific exec is not supported in API < 1.19'
+ )
+ if isinstance(cmd, six.string_types):
+ cmd = shlex.split(str(cmd))
+
+ data = {
+ 'Container': container,
+ 'User': user,
+ 'Privileged': privileged,
+ 'Tty': tty,
+ 'AttachStdin': False,
+ 'AttachStdout': stdout,
+ 'AttachStderr': stderr,
+ 'Cmd': cmd
+ }
+
+ url = self._url('/containers/{0}/exec', container)
+ res = self._post_json(url, data=data)
+ return self._result(res, True)
+
+ @utils.minimum_version('1.16')
+ def exec_inspect(self, exec_id):
+ if isinstance(exec_id, dict):
+ exec_id = exec_id.get('Id')
+ res = self._get(self._url("/exec/{0}/json", exec_id))
+ return self._result(res, True)
+
+ @utils.minimum_version('1.15')
+ def exec_resize(self, exec_id, height=None, width=None):
+ if isinstance(exec_id, dict):
+ exec_id = exec_id.get('Id')
+
+ params = {'h': height, 'w': width}
+ url = self._url("/exec/{0}/resize", exec_id)
+ res = self._post(url, params=params)
+ self._raise_for_status(res)
+
+ @utils.minimum_version('1.15')
+ def exec_start(self, exec_id, detach=False, tty=False, stream=False):
+ if isinstance(exec_id, dict):
+ exec_id = exec_id.get('Id')
+
+ data = {
+ 'Tty': tty,
+ 'Detach': detach
+ }
+
+ res = self._post_json(
+ self._url('/exec/{0}/start', exec_id), data=data, stream=stream
+ )
+ return self._get_result_tty(stream, res, tty)