Kaydet (Commit) 790ed552 authored tarafından Joffrey F's avatar Joffrey F

Merge branch 'irachex-filters'

......@@ -492,7 +492,8 @@ class Client(requests.Session):
json=True)
def containers(self, quiet=False, all=False, trunc=True, latest=False,
since=None, before=None, limit=-1, size=False):
since=None, before=None, limit=-1, size=False,
filters=None):
params = {
'limit': 1 if latest else limit,
'all': 1 if all else 0,
......@@ -501,6 +502,8 @@ class Client(requests.Session):
'since': since,
'before': before
}
if filters:
params['filters'] = utils.convert_filters(filters)
u = self._url("/containers/json")
res = self._result(self._get(u, params=params), True)
......@@ -615,7 +618,8 @@ class Client(requests.Session):
res = self._get(self._url("/images/{0}/history".format(image)))
return self._result(res, True)
def images(self, name=None, quiet=False, all=False, viz=False):
def images(self, name=None, quiet=False, all=False, viz=False,
filters=None):
if viz:
if utils.compare_version('1.7', self._version) >= 0:
raise Exception('Viz output is not supported in API >= 1.7!')
......@@ -625,6 +629,8 @@ class Client(requests.Session):
'only_ids': 1 if quiet else 0,
'all': 1 if all else 0,
}
if filters:
params['filters'] = utils.convert_filters(filters)
res = self._result(self._get(self._url("/images/json"), params=params),
True)
if quiet:
......
from .utils import (
compare_version, convert_port_bindings, convert_volume_binds,
mkbuildcontext, ping, tar, parse_repository_tag, parse_host, kwargs_from_env
mkbuildcontext, ping, tar, parse_repository_tag, parse_host,
kwargs_from_env, convert_filters
) # flake8: noqa
......@@ -15,6 +15,7 @@
import io
import os
import os.path
import json
import tarfile
import tempfile
from distutils.version import StrictVersion
......@@ -279,3 +280,14 @@ def kwargs_from_env(ssl_version=None, assert_hostname=None):
ssl_version=ssl_version,
assert_hostname=assert_hostname)
return params
def convert_filters(filters):
result = {}
for k, v in six.iteritems(filters):
if isinstance(v, bool):
v = 'true' if v else 'false'
if not isinstance(v, list):
v = [v, ]
result[k] = v
return json.dumps(result)
......@@ -184,6 +184,19 @@ class DockerClientTest(Cleanup, unittest.TestCase):
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
)
def test_images_filters(self):
try:
self.client.images(filters={'dangling': True})
except Exception as e:
self.fail('Command should not raise exception: {0}'.format(e))
fake_request.assert_called_with(
url_prefix + 'images/json',
params={'filter': None, 'only_ids': 0, 'all': 0,
'filters': '{"dangling": ["true"]}'},
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
)
def test_list_containers(self):
try:
self.client.containers(all=True)
......
import os
import os.path
import unittest
from docker.errors import DockerException
from docker.utils import parse_repository_tag, parse_host, kwargs_from_env
from docker.client import Client
import os
import os.path
from docker.errors import DockerException
from docker.utils import (
parse_repository_tag, parse_host, convert_filters, kwargs_from_env
)
class UtilsTest(unittest.TestCase):
......@@ -80,8 +81,20 @@ class UtilsTest(unittest.TestCase):
self.assertEquals(kwargs['base_url'], client.base_url)
self.assertEquals(kwargs['tls'].verify, client.verify)
self.assertEquals(kwargs['tls'].cert, client.cert)
except TypeError, e:
except TypeError as e:
self.fail(e)
def test_convert_filters(self):
tests = [
({'dangling': True}, '{"dangling": ["true"]}'),
({'dangling': "true"}, '{"dangling": ["true"]}'),
({'exited': 0}, '{"exited": [0]}'),
({'exited': [0, 1]}, '{"exited": [0, 1]}'),
]
for filters, expected in tests:
self.assertEqual(convert_filters(filters), expected)
if __name__ == '__main__':
unittest.main()
......@@ -6,6 +6,7 @@ skipsdist=True
usedevelop=True
commands =
{envbindir}/coverage run -p tests/test.py
{envbindir}/coverage run -p tests/utils_test.py
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
......@@ -14,6 +15,7 @@ deps =
usedevelop=True
commands =
{envbindir}/coverage run -p tests/test.py
{envbindir}/coverage run -p tests/utils_test.py
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
......@@ -22,6 +24,7 @@ deps =
usedevelop=True
commands =
{envbindir}/coverage run -p tests/test.py
{envbindir}/coverage run -p tests/utils_test.py
{envbindir}/coverage combine
{envbindir}/coverage report
{envbindir}/coverage html
......
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