diff options
| author | Joffrey F <f.joffrey@gmail.com> | 2017-12-13 16:33:06 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-12-13 16:33:06 -0800 |
| commit | aad0c760026abf4283e772d729889ba58c343e7d (patch) | |
| tree | d47ee76110ad5be61329a809fdb32fb8dccdbba8 | |
| parent | a916bfdde24e5452ea1b1b074ec04badd29377c5 (diff) | |
| parent | 36ed843e2bbfd50698c16bfbd898d915019ca94d (diff) | |
| download | docker-py-aad0c760026abf4283e772d729889ba58c343e7d.tar.gz | |
Merge pull request #1812 from rycus86/greedy_network_list
Fetch network details with network lists greedily
| -rw-r--r-- | docker/models/networks.py | 21 | ||||
| -rw-r--r-- | tests/integration/models_networks_test.py | 10 | ||||
| -rw-r--r-- | tests/unit/models_networks_test.py | 4 |
3 files changed, 28 insertions, 7 deletions
diff --git a/docker/models/networks.py b/docker/models/networks.py index 158af99..1c2fbf2 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 @@ -153,7 +154,7 @@ class NetworkCollection(Collection): resp = self.client.api.create_network(name, *args, **kwargs) return self.get(resp['Id']) - def get(self, network_id): + def get(self, network_id, *args, **kwargs): """ Get a network by its ID. @@ -175,7 +176,9 @@ class NetworkCollection(Collection): If the server returns an error. """ - return self.prepare_model(self.client.api.inspect_network(network_id)) + return self.prepare_model( + self.client.api.inspect_network(network_id, *args, **kwargs) + ) def list(self, *args, **kwargs): """ @@ -184,6 +187,13 @@ class NetworkCollection(Collection): Args: names (:py:class:`list`): List of names to filter by. ids (:py:class:`list`): List of ids to filter by. + filters (dict): Filters to be processed on the network list. + Available filters: + - ``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: (list of :py:class:`Network`) The networks on the server. @@ -192,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/models_networks_test.py b/tests/integration/models_networks_test.py index 105dcc5..08d7ad2 100644 --- a/tests/integration/models_networks_test.py +++ b/tests/integration/models_networks_test.py @@ -3,7 +3,7 @@ from .. import helpers from .base import BaseIntegrationTest, TEST_API_VERSION -class ImageCollectionTest(BaseIntegrationTest): +class NetworkCollectionTest(BaseIntegrationTest): def test_create(self): client = docker.from_env(version=TEST_API_VERSION) @@ -47,7 +47,7 @@ class ImageCollectionTest(BaseIntegrationTest): assert network.id not in [n.id for n in client.networks.list()] -class ImageTest(BaseIntegrationTest): +class NetworkTest(BaseIntegrationTest): def test_connect_disconnect(self): client = docker.from_env(version=TEST_API_VERSION) @@ -59,6 +59,12 @@ class ImageTest(BaseIntegrationTest): network.connect(container) container.start() assert client.networks.get(network.id).containers == [container] + network_containers = list( + c + for net in client.networks.list(ids=[network.id], greedy=True) + for c in net.containers + ) + assert network_containers == [container] network.disconnect(container) assert network.containers == [] assert client.networks.get(network.id).containers == [] diff --git a/tests/unit/models_networks_test.py b/tests/unit/models_networks_test.py index 943b904..58c9fce 100644 --- a/tests/unit/models_networks_test.py +++ b/tests/unit/models_networks_test.py @@ -4,7 +4,7 @@ from .fake_api import FAKE_NETWORK_ID, FAKE_CONTAINER_ID from .fake_api_client import make_fake_client -class ImageCollectionTest(unittest.TestCase): +class NetworkCollectionTest(unittest.TestCase): def test_create(self): client = make_fake_client() @@ -37,7 +37,7 @@ class ImageCollectionTest(unittest.TestCase): assert client.api.networks.called_once_with(names=["foobar"]) -class ImageTest(unittest.TestCase): +class NetworkTest(unittest.TestCase): def test_connect(self): client = make_fake_client() |
