mirror of https://github.com/docker/docker-py.git
Merge branch 'filters' of github.com:irachex/docker-py into irachex-filters
Conflicts: docker/utils/__init__.py docker/utils/utils.py tests/utils_test.py
This commit is contained in:
commit
c4bb57286a
|
@ -492,7 +492,8 @@ class Client(requests.Session):
|
||||||
json=True)
|
json=True)
|
||||||
|
|
||||||
def containers(self, quiet=False, all=False, trunc=True, latest=False,
|
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 = {
|
params = {
|
||||||
'limit': 1 if latest else limit,
|
'limit': 1 if latest else limit,
|
||||||
'all': 1 if all else 0,
|
'all': 1 if all else 0,
|
||||||
|
@ -501,6 +502,8 @@ class Client(requests.Session):
|
||||||
'since': since,
|
'since': since,
|
||||||
'before': before
|
'before': before
|
||||||
}
|
}
|
||||||
|
if filters:
|
||||||
|
params['filters'] = utils.convert_filters(filters)
|
||||||
u = self._url("/containers/json")
|
u = self._url("/containers/json")
|
||||||
res = self._result(self._get(u, params=params), True)
|
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)))
|
res = self._get(self._url("/images/{0}/history".format(image)))
|
||||||
return self._result(res, True)
|
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 viz:
|
||||||
if utils.compare_version('1.7', self._version) >= 0:
|
if utils.compare_version('1.7', self._version) >= 0:
|
||||||
raise Exception('Viz output is not supported in API >= 1.7!')
|
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,
|
'only_ids': 1 if quiet else 0,
|
||||||
'all': 1 if all 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),
|
res = self._result(self._get(self._url("/images/json"), params=params),
|
||||||
True)
|
True)
|
||||||
if quiet:
|
if quiet:
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from .utils import (
|
from .utils import (
|
||||||
compare_version, convert_port_bindings, convert_volume_binds,
|
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
|
) # flake8: noqa
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
import io
|
import io
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
|
import json
|
||||||
import tarfile
|
import tarfile
|
||||||
import tempfile
|
import tempfile
|
||||||
from distutils.version import StrictVersion
|
from distutils.version import StrictVersion
|
||||||
|
@ -279,3 +280,14 @@ def kwargs_from_env(ssl_version=None, assert_hostname=None):
|
||||||
ssl_version=ssl_version,
|
ssl_version=ssl_version,
|
||||||
assert_hostname=assert_hostname)
|
assert_hostname=assert_hostname)
|
||||||
return params
|
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
|
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):
|
def test_list_containers(self):
|
||||||
try:
|
try:
|
||||||
self.client.containers(all=True)
|
self.client.containers(all=True)
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
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
|
||||||
import os.path
|
import os.path
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
from docker.client import Client
|
||||||
|
from docker.errors import DockerException
|
||||||
|
from docker.utils import (
|
||||||
|
parse_repository_tag, parse_host, convert_filters, kwargs_from_env
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class UtilsTest(unittest.TestCase):
|
class UtilsTest(unittest.TestCase):
|
||||||
|
@ -80,8 +81,20 @@ class UtilsTest(unittest.TestCase):
|
||||||
self.assertEquals(kwargs['base_url'], client.base_url)
|
self.assertEquals(kwargs['base_url'], client.base_url)
|
||||||
self.assertEquals(kwargs['tls'].verify, client.verify)
|
self.assertEquals(kwargs['tls'].verify, client.verify)
|
||||||
self.assertEquals(kwargs['tls'].cert, client.cert)
|
self.assertEquals(kwargs['tls'].cert, client.cert)
|
||||||
except TypeError, e:
|
except TypeError as e:
|
||||||
self.fail(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__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
Loading…
Reference in New Issue