Skip to content

Commit 049a4b1

Browse files
feat(network): Add create method to Network class (#627)
This PR adds `create` method to the `Network` class to enable a non-context-manager usage. Fixes #627
1 parent 01d6c18 commit 049a4b1

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

core/testcontainers/core/network.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,13 @@ def connect(self, container_id: str, network_aliases: Optional[list] = None):
3232
def remove(self) -> None:
3333
self._network.remove()
3434

35-
def __enter__(self) -> "Network":
35+
def create(self) -> "Network":
3636
self._network = self._docker.client.networks.create(self.name, **self._docker_network_kw)
3737
self.id = self._network.id
3838
return self
3939

40+
def __enter__(self) -> "Network":
41+
return self.create()
42+
4043
def __exit__(self, exc_type, exc_val, exc_tb) -> None:
4144
self.remove()

core/tests/test_network.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1+
from http import HTTPStatus
12
from testcontainers.core.container import DockerContainer
23
from testcontainers.core.docker_client import DockerClient
34
from testcontainers.core.network import Network
45

6+
import docker.errors
7+
import pytest
8+
59
NGINX_ALPINE_SLIM_IMAGE = "nginx:1.25.4-alpine-slim"
610

711

@@ -14,6 +18,31 @@ def test_network_gets_created_and_cleaned_up():
1418
assert not docker.client.networks.list(network.name)
1519

1620

21+
def test_network_create_wo_cm():
22+
network = Network()
23+
network.create()
24+
docker = DockerClient()
25+
networks_list = docker.client.networks.list(network.name)
26+
assert networks_list[0].name == network.name
27+
assert networks_list[0].id == network.id
28+
29+
network.remove()
30+
assert not docker.client.networks.list(network.name)
31+
32+
33+
def test_network_create_errors():
34+
network = Network()
35+
network.create()
36+
37+
# calling create the second time should raise an error
38+
with pytest.raises(docker.errors.APIError) as excinfo:
39+
network.create()
40+
41+
assert excinfo.value.response.status_code == HTTPStatus.CONFLICT
42+
excinfo.match(f"network with name {network.name} already exists")
43+
network.remove()
44+
45+
1746
def test_containers_can_communicate_over_network():
1847
with Network() as network:
1948
with (

0 commit comments

Comments
 (0)