Kaydet (Commit) d19572aa authored tarafından Joffrey F's avatar Joffrey F Kaydeden (comit) GitHub

Merge pull request #1493 from funkyfuture/model_properties

Adds a few model properties
......@@ -13,5 +13,4 @@ html/*
__pycache__
# Compiled Documentation
site/
Makefile
docs/_build
FROM python:3.5
RUN mkdir /src
WORKDIR /src
ARG uid=1000
ARG gid=1000
COPY requirements.txt /src/requirements.txt
RUN pip install -r requirements.txt
RUN addgroup --gid $gid sphinx \
&& useradd --uid $uid --gid $gid -M sphinx
COPY docs-requirements.txt /src/docs-requirements.txt
RUN pip install -r docs-requirements.txt
WORKDIR /src
COPY requirements.txt docs-requirements.txt ./
RUN pip install -r requirements.txt -r docs-requirements.txt
COPY . /src
USER sphinx
......@@ -16,7 +16,7 @@ build-py3:
.PHONY: build-docs
build-docs:
docker build -t docker-sdk-python-docs -f Dockerfile-docs .
docker build -t docker-sdk-python-docs -f Dockerfile-docs --build-arg uid=$(shell id -u) --build-arg gid=$(shell id -g) .
.PHONY: build-dind-certs
build-dind-certs:
......@@ -77,7 +77,7 @@ flake8: build
.PHONY: docs
docs: build-docs
docker run --rm -it -v `pwd`:/code docker-sdk-python-docs sphinx-build docs ./_build
docker run --rm -it -v `pwd`:/src docker-sdk-python-docs sphinx-build docs docs/_build
.PHONY: shell
shell: build
......
......@@ -18,6 +18,24 @@ class Container(Model):
if self.attrs.get('Name') is not None:
return self.attrs['Name'].lstrip('/')
@property
def image(self):
"""
The image of the container.
"""
image_id = self.attrs['Image']
if image_id is None:
return None
return self.client.images.get(image_id.split(':')[1])
@property
def labels(self):
"""
The labels of a container as dictionary.
"""
result = self.attrs['Config'].get('Labels')
return result or {}
@property
def status(self):
"""
......
......@@ -15,6 +15,14 @@ class Image(Model):
def __repr__(self):
return "<%s: '%s'>" % (self.__class__.__name__, "', '".join(self.tags))
@property
def labels(self):
"""
The labels of an image as dictionary.
"""
result = self.attrs['Config'].get('Labels')
return result or {}
@property
def short_id(self):
"""
......
......@@ -21,11 +21,13 @@ Container objects
.. autoclass:: Container()
.. py:attribute:: attrs
.. autoattribute:: id
.. autoattribute:: short_id
.. autoattribute:: image
.. autoattribute:: labels
.. autoattribute:: name
.. autoattribute:: short_id
.. autoattribute:: status
.. py:attribute:: attrs
The raw representation of this object from the server.
......
......@@ -26,10 +26,11 @@ Image objects
.. autoclass:: Image()
.. autoattribute:: id
.. autoattribute:: short_id
.. autoattribute:: tags
.. py:attribute:: attrs
.. py:attribute:: attrs
.. autoattribute:: id
.. autoattribute:: labels
.. autoattribute:: short_id
.. autoattribute:: tags
The raw representation of this object from the server.
......
......@@ -134,7 +134,7 @@ def get_fake_inspect_container(tty=False):
status_code = 200
response = {
'Id': FAKE_CONTAINER_ID,
'Config': {'Privileged': True, 'Tty': tty},
'Config': {'Labels': {'foo': 'bar'}, 'Privileged': True, 'Tty': tty},
'ID': FAKE_CONTAINER_ID,
'Image': 'busybox:latest',
'Name': 'foobar',
......@@ -158,6 +158,7 @@ def get_fake_inspect_image():
'Parent': "27cf784147099545",
'Created': "2013-03-23T22:24:18.818426-07:00",
'Container': FAKE_CONTAINER_ID,
'Config': {'Labels': {'bar': 'foo'}},
'ContainerConfig':
{
"Hostname": "",
......
......@@ -384,12 +384,22 @@ class ContainerTest(unittest.TestCase):
container.get_archive('foo')
client.api.get_archive.assert_called_with(FAKE_CONTAINER_ID, 'foo')
def test_image(self):
client = make_fake_client()
container = client.containers.get(FAKE_CONTAINER_ID)
assert container.image.id == FAKE_IMAGE_ID
def test_kill(self):
client = make_fake_client()
container = client.containers.get(FAKE_CONTAINER_ID)
container.kill(signal=5)
client.api.kill.assert_called_with(FAKE_CONTAINER_ID, signal=5)
def test_labels(self):
client = make_fake_client()
container = client.containers.get(FAKE_CONTAINER_ID)
assert container.labels == {'foo': 'bar'}
def test_logs(self):
client = make_fake_client()
container = client.containers.get(FAKE_CONTAINER_ID)
......
......@@ -21,6 +21,11 @@ class ImageCollectionTest(unittest.TestCase):
assert isinstance(image, Image)
assert image.id == FAKE_IMAGE_ID
def test_labels(self):
client = make_fake_client()
image = client.images.get(FAKE_IMAGE_ID)
assert image.labels == {'bar': 'foo'}
def test_list(self):
client = make_fake_client()
images = client.images.list(all=True)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment