summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoffrey F <joffrey@docker.com>2018-01-29 16:28:58 -0800
committerJoffrey F <joffrey@docker.com>2018-01-29 16:29:04 -0800
commit600cc15cbc6d8b98e5d542820480fe9cb379e8de (patch)
tree8f5ea671872c344d6b6f44bb51b2e68d6644f666
parent5728eebf79b0f43e7033952fbf8f8e4b7f7bef20 (diff)
parenta63b726d40096e45ebb0598511573efea13b320f (diff)
downloaddocker-py-600cc15cbc6d8b98e5d542820480fe9cb379e8de.tar.gz
Merge branch 'container_exec_run' of https://github.com/funkyfuture/docker-py into funkyfuture-container_exec_run
Signed-off-by: Joffrey F <joffrey@docker.com>
-rw-r--r--docker/models/containers.py17
-rw-r--r--docker/types/__init__.py3
-rw-r--r--docker/types/containers.py6
3 files changed, 18 insertions, 8 deletions
diff --git a/docker/models/containers.py b/docker/models/containers.py
index 9644b00..ed3f7ac 100644
--- a/docker/models/containers.py
+++ b/docker/models/containers.py
@@ -3,7 +3,7 @@ import copy
from ..api import APIClient
from ..errors import (ContainerError, ImageNotFound,
create_unexpected_kwargs_error)
-from ..types import HostConfig
+from ..types import ExecResult, HostConfig
from ..utils import version_gte
from .images import Image
from .resource import Collection, Model
@@ -150,9 +150,10 @@ class Container(Model):
workdir (str): Path to working directory for this exec session
Returns:
- (tuple): A tuple of (exit_code, output)
+ (ExecResult): A tuple of (exit_code, output)
exit_code: (int):
- Exit code for the executed command
+ Exit code for the executed command or ``None`` if
+ either ``stream```or ``socket`` is ``True``.
output: (generator or str):
If ``stream=True``, a generator yielding response chunks.
If ``socket=True``, a socket object for the connection.
@@ -170,10 +171,12 @@ class Container(Model):
exec_output = self.client.api.exec_start(
resp['Id'], detach=detach, tty=tty, stream=stream, socket=socket
)
- exit_code = 0
- if stream is False:
- exit_code = self.client.api.exec_inspect(resp['Id'])['ExitCode']
- return (exit_code, exec_output)
+ if socket or stream:
+ return ExecResult(None, exec_output)
+ else:
+ return ExecResult(
+ self.client.api.exec_inspect(resp['Id'])['ExitCode'],
+ exec_output)
def export(self):
"""
diff --git a/docker/types/__init__.py b/docker/types/__init__.py
index 39c93e3..bd19638 100644
--- a/docker/types/__init__.py
+++ b/docker/types/__init__.py
@@ -1,5 +1,6 @@
# flake8: noqa
-from .containers import ContainerConfig, HostConfig, LogConfig, Ulimit
+from .containers import (ContainerConfig, ExecResult, HostConfig, LogConfig,
+ Ulimit)
from .healthcheck import Healthcheck
from .networks import EndpointConfig, IPAMConfig, IPAMPool, NetworkingConfig
from .services import (
diff --git a/docker/types/containers.py b/docker/types/containers.py
index 15dd86c..8d1f271 100644
--- a/docker/types/containers.py
+++ b/docker/types/containers.py
@@ -1,3 +1,4 @@
+from collections import namedtuple
import six
import warnings
@@ -11,6 +12,11 @@ from .base import DictType
from .healthcheck import Healthcheck
+ExecResult = namedtuple('ExecResult', 'exit_code,output')
+""" A result of Container.exec_run with the properties ``exit_code`` and
+ ``output``. """
+
+
class LogConfigTypesEnum(object):
_values = (
'json-file',