From 36ed843e2bbfd50698c16bfbd898d915019ca94d Mon Sep 17 00:00:00 2001 From: Viktor Adam Date: Tue, 21 Nov 2017 21:59:11 +0000 Subject: [PATCH] Only allow greedy queries on the model Signed-off-by: Viktor Adam --- docker/api/network.py | 10 ++----- docker/models/networks.py | 8 +++++- tests/integration/api_network_test.py | 41 --------------------------- tests/unit/models_networks_test.py | 4 --- 4 files changed, 9 insertions(+), 54 deletions(-) diff --git a/docker/api/network.py b/docker/api/network.py index 09f5a8bd..79778085 100644 --- a/docker/api/network.py +++ b/docker/api/network.py @@ -6,7 +6,7 @@ from .. import utils class NetworkApiMixin(object): @minimum_version('1.21') - def networks(self, names=None, ids=None, filters=None, greedy=False): + def networks(self, names=None, ids=None, filters=None): """ List networks. Similar to the ``docker networks ls`` command. @@ -18,8 +18,6 @@ class NetworkApiMixin(object): - ``driver=[]`` Matches a network's driver. - ``label=[]`` or ``label=[=]``. - ``type=["custom"|"builtin"]`` Filters networks by type. - greedy (bool): Fetch more details for each network individually. - You might want this to get the containers attached to them. Returns: (dict): List of network objects. @@ -38,11 +36,7 @@ class NetworkApiMixin(object): params = {'filters': utils.convert_filters(filters)} url = self._url("/networks") res = self._get(url, params=params) - result = self._result(res, json=True) - if greedy: - return [self.inspect_network(net['Id']) for net in result] - else: - return result + return self._result(res, json=True) @minimum_version('1.21') def create_network(self, name, driver=None, options=None, ipam=None, diff --git a/docker/models/networks.py b/docker/models/networks.py index 06ff22b1..1c2fbf24 100644 --- a/docker/models/networks.py +++ b/docker/models/networks.py @@ -1,4 +1,5 @@ from ..api import APIClient +from ..utils import version_gte from .containers import Container from .resource import Model, Collection @@ -201,8 +202,13 @@ class NetworkCollection(Collection): :py:class:`docker.errors.APIError` If the server returns an error. """ + greedy = kwargs.pop('greedy', False) resp = self.client.api.networks(*args, **kwargs) - return [self.prepare_model(item) for item in resp] + networks = [self.prepare_model(item) for item in resp] + if greedy and version_gte(self.client.api._version, '1.28'): + for net in networks: + net.reload() + return networks def prune(self, filters=None): self.client.api.prune_networks(filters=filters) diff --git a/tests/integration/api_network_test.py b/tests/integration/api_network_test.py index bb900d45..f4fefde5 100644 --- a/tests/integration/api_network_test.py +++ b/tests/integration/api_network_test.py @@ -112,17 +112,6 @@ class TestNetworks(BaseAPIIntegrationTest): [container['Id']] ) - network_list = self.client.networks(ids=[net_id], greedy=True) - self.assertEqual( - list( - key - for net in network_list - for key in net['Containers'].keys() - if net['Id'] == net_id - ), - [container['Id']] - ) - with pytest.raises(docker.errors.APIError): self.client.connect_container_to_network(container, net_id) @@ -151,29 +140,10 @@ class TestNetworks(BaseAPIIntegrationTest): [container['Id']] ) - network_list = self.client.networks(ids=[net_id], greedy=True) - self.assertEqual( - list( - key - for net in network_list - for key in net['Containers'].keys() - if net['Id'] == net_id - ), - [container['Id']] - ) - self.client.disconnect_container_from_network(container, net_id, True) network_data = self.client.inspect_network(net_id) self.assertFalse(network_data.get('Containers')) - network_list = self.client.networks(ids=[net_id], greedy=True) - self.assertFalse(list( - key - for net in network_list - for key in net['Containers'].keys() - if net['Id'] == net_id - )) - with pytest.raises(docker.errors.APIError): self.client.disconnect_container_from_network( container, net_id, force=True @@ -213,17 +183,6 @@ class TestNetworks(BaseAPIIntegrationTest): list(network_data['Containers'].keys()), [container['Id']]) - network_list = self.client.networks(ids=[net_id], greedy=True) - self.assertEqual( - list( - key - for net in network_list - for key in net['Containers'].keys() - if net['Id'] == net_id - ), - [container['Id']] - ) - self.client.disconnect_container_from_network(container, net_id) network_data = self.client.inspect_network(net_id) self.assertFalse(network_data.get('Containers')) diff --git a/tests/unit/models_networks_test.py b/tests/unit/models_networks_test.py index df0650a2..58c9fce6 100644 --- a/tests/unit/models_networks_test.py +++ b/tests/unit/models_networks_test.py @@ -36,10 +36,6 @@ class NetworkCollectionTest(unittest.TestCase): client.networks.list(names=["foobar"]) assert client.api.networks.called_once_with(names=["foobar"]) - client = make_fake_client() - client.networks.list(greedy=True) - assert client.api.networks.called_once_with(greedy=True) - class NetworkTest(unittest.TestCase):