Only allow greedy queries on the model

Signed-off-by: Viktor Adam <rycus86@gmail.com>
This commit is contained in:
Viktor Adam 2017-11-21 21:59:11 +00:00
parent 2878900a71
commit 36ed843e2b
4 changed files with 9 additions and 54 deletions

View File

@ -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=[<driver-name>]`` Matches a network's driver.
- ``label=[<key>]`` or ``label=[<key>=<value>]``.
- ``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,

View File

@ -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)

View File

@ -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'))

View File

@ -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):