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)
|
||||
|
||||
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:
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
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)
|
||||
|
|
|
@ -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.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):
|
||||
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue