mirror of https://github.com/docker/docker-py.git
Add test for container list with sparse=True
Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
parent
726d7f31ca
commit
d310d95fbc
|
@ -4,8 +4,10 @@ from collections import namedtuple
|
||||||
|
|
||||||
from ..api import APIClient
|
from ..api import APIClient
|
||||||
from ..constants import DEFAULT_DATA_CHUNK_SIZE
|
from ..constants import DEFAULT_DATA_CHUNK_SIZE
|
||||||
from ..errors import (ContainerError, ImageNotFound,
|
from ..errors import (
|
||||||
create_unexpected_kwargs_error)
|
ContainerError, DockerException, ImageNotFound,
|
||||||
|
create_unexpected_kwargs_error
|
||||||
|
)
|
||||||
from ..types import HostConfig
|
from ..types import HostConfig
|
||||||
from ..utils import version_gte
|
from ..utils import version_gte
|
||||||
from .images import Image
|
from .images import Image
|
||||||
|
@ -27,7 +29,7 @@ class Container(Model):
|
||||||
"""
|
"""
|
||||||
The image of the container.
|
The image of the container.
|
||||||
"""
|
"""
|
||||||
image_id = self.attrs['Image']
|
image_id = self.attrs.get('ImageID', self.attrs['Image'])
|
||||||
if image_id is None:
|
if image_id is None:
|
||||||
return None
|
return None
|
||||||
return self.client.images.get(image_id.split(':')[1])
|
return self.client.images.get(image_id.split(':')[1])
|
||||||
|
@ -37,15 +39,23 @@ class Container(Model):
|
||||||
"""
|
"""
|
||||||
The labels of a container as dictionary.
|
The labels of a container as dictionary.
|
||||||
"""
|
"""
|
||||||
result = self.attrs['Config'].get('Labels')
|
try:
|
||||||
return result or {}
|
result = self.attrs['Config'].get('Labels')
|
||||||
|
return result or {}
|
||||||
|
except KeyError:
|
||||||
|
raise DockerException(
|
||||||
|
'Label data is not available for sparse objects. Call reload()'
|
||||||
|
' to retrieve all information'
|
||||||
|
)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def status(self):
|
def status(self):
|
||||||
"""
|
"""
|
||||||
The status of the container. For example, ``running``, or ``exited``.
|
The status of the container. For example, ``running``, or ``exited``.
|
||||||
"""
|
"""
|
||||||
return self.attrs['State']['Status']
|
if isinstance(self.attrs['State'], dict):
|
||||||
|
return self.attrs['State']['Status']
|
||||||
|
return self.attrs['State']
|
||||||
|
|
||||||
def attach(self, **kwargs):
|
def attach(self, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
@ -863,14 +873,16 @@ class ContainerCollection(Collection):
|
||||||
container. Give the container name or id.
|
container. Give the container name or id.
|
||||||
- `since` (str): Only containers created after a particular
|
- `since` (str): Only containers created after a particular
|
||||||
container. Give container name or id.
|
container. Give container name or id.
|
||||||
sparse (bool): Do not inspect containers. Returns partial
|
|
||||||
informations, but guaranteed not to block. Use reload() on
|
|
||||||
each container to get the full list of attributes.
|
|
||||||
|
|
||||||
A comprehensive list can be found in the documentation for
|
A comprehensive list can be found in the documentation for
|
||||||
`docker ps
|
`docker ps
|
||||||
<https://docs.docker.com/engine/reference/commandline/ps>`_.
|
<https://docs.docker.com/engine/reference/commandline/ps>`_.
|
||||||
|
|
||||||
|
sparse (bool): Do not inspect containers. Returns partial
|
||||||
|
information, but guaranteed not to block. Use
|
||||||
|
:py:meth:`Container.reload` on resulting objects to retrieve
|
||||||
|
all attributes. Default: ``False``
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
(list of :py:class:`Container`)
|
(list of :py:class:`Container`)
|
||||||
|
|
||||||
|
|
|
@ -159,6 +159,28 @@ class ContainerCollectionTest(BaseIntegrationTest):
|
||||||
|
|
||||||
container = containers[0]
|
container = containers[0]
|
||||||
assert container.attrs['Config']['Image'] == 'alpine'
|
assert container.attrs['Config']['Image'] == 'alpine'
|
||||||
|
assert container.status == 'running'
|
||||||
|
assert container.image == client.images.get('alpine')
|
||||||
|
|
||||||
|
container.kill()
|
||||||
|
container.remove()
|
||||||
|
assert container_id not in [c.id for c in client.containers.list()]
|
||||||
|
|
||||||
|
def test_list_sparse(self):
|
||||||
|
client = docker.from_env(version=TEST_API_VERSION)
|
||||||
|
container_id = client.containers.run(
|
||||||
|
"alpine", "sleep 300", detach=True).id
|
||||||
|
self.tmp_containers.append(container_id)
|
||||||
|
containers = [c for c in client.containers.list(sparse=True) if c.id ==
|
||||||
|
container_id]
|
||||||
|
assert len(containers) == 1
|
||||||
|
|
||||||
|
container = containers[0]
|
||||||
|
assert container.attrs['Image'] == 'alpine'
|
||||||
|
assert container.status == 'running'
|
||||||
|
assert container.image == client.images.get('alpine')
|
||||||
|
with pytest.raises(docker.errors.DockerException):
|
||||||
|
container.labels
|
||||||
|
|
||||||
container.kill()
|
container.kill()
|
||||||
container.remove()
|
container.remove()
|
||||||
|
|
Loading…
Reference in New Issue