Skip to content

Commit 8c29c86

Browse files
committed
fixes
1 parent 631740e commit 8c29c86

File tree

4 files changed

+30
-20
lines changed

4 files changed

+30
-20
lines changed

core/README.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ Testcontainers Core
1414

1515
.. autoclass:: testcontainers.core.generic.DbContainer
1616

17+
.. autoclass:: testcontainers.core.transferable.Transferable
18+
1719
.. raw:: html
1820

1921
<hr>

core/testcontainers/core/container.py

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import contextlib
2-
import dataclasses
32
import io
43
import pathlib
54
import tarfile
@@ -74,7 +73,7 @@ def __init__(
7473
volumes: Optional[list[tuple[str, str, str]]] = None,
7574
network: Optional[Network] = None,
7675
network_aliases: Optional[list[str]] = None,
77-
transferrables: Optional[list[Transferable]] = None,
76+
transferables: Optional[list[Transferable]] = None,
7877
**kwargs: Any,
7978
) -> None:
8079
self.env = env or {}
@@ -102,7 +101,7 @@ def __init__(
102101
self.with_network_aliases(*network_aliases)
103102

104103
self._kwargs = kwargs
105-
self._transferables: list[Transferable] = transferrables or []
104+
self._transferables: list[Transferable] = transferables or []
106105

107106
def with_env(self, key: str, value: str) -> Self:
108107
self.env[key] = value
@@ -285,20 +284,23 @@ def _configure(self) -> None:
285284
pass
286285

287286
def with_copy_into_container(
288-
self, file_content: bytes | PathLike, destination_in_container: str, mode: int = 0o644
289-
):
287+
self, file_content: Union[bytes, pathlib.Path], destination_in_container: str, mode: int = 0o644
288+
) -> Self:
290289
self._transferables.append(Transferable(file_content, destination_in_container, mode))
291290
return self
292291

293-
def copy_into_container(self, file_content: bytes | PathLike, destination_in_container: str, mode: int = 0o644):
292+
def copy_into_container(
293+
self, file_content: Union[bytes, pathlib.Path], destination_in_container: str, mode: int = 0o644
294+
) -> None:
294295
return self._transfer_into_container(file_content, destination_in_container, mode)
295296

296-
def _transfer_into_container(self, source: bytes | PathLike, destination_in_container: str, mode: int):
297+
def _transfer_into_container(
298+
self, source: Union[bytes, pathlib.Path], destination_in_container: str, mode: int
299+
) -> None:
297300
if isinstance(source, bytes):
298301
file_content = source
299-
elif isinstance(source, PathLike):
300-
p = pathlib.Path(source)
301-
file_content = p.read_bytes()
302+
elif isinstance(source, pathlib.Path):
303+
file_content = source.read_bytes()
302304
else:
303305
raise TypeError("source must be bytes or PathLike")
304306

@@ -309,17 +311,21 @@ def _transfer_into_container(self, source: bytes | PathLike, destination_in_cont
309311
tarinfo.mode = mode
310312
tar.addfile(tarinfo, io.BytesIO(file_content))
311313
fileobj.seek(0)
314+
assert self._container is not None
312315
rv = self._container.put_archive(path="/", data=fileobj.getvalue())
313316
assert rv is True
314317

315-
def copy_from_container(self, source_in_container: str, destination_on_host: PathLike):
318+
def copy_from_container(self, source_in_container: str, destination_on_host: pathlib.Path) -> None:
319+
assert self._container is not None
316320
tar_stream, _ = self._container.get_archive(source_in_container)
317321

318322
for chunk in tar_stream:
319323
with tarfile.open(fileobj=io.BytesIO(chunk)) as tar:
320324
for member in tar.getmembers():
321325
with open(destination_on_host, "wb") as f:
322-
f.write(tar.extractfile(member).read())
326+
fileobj = tar.extractfile(member)
327+
assert fileobj is not None
328+
f.write(fileobj.read())
323329

324330

325331
class Reaper:
Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
import dataclasses
2-
import os
2+
import pathlib
33
from typing import Union
44

55

66
@dataclasses.dataclass
77
class Transferable:
8-
source: Union[bytes, os.PathLike]
8+
"""
9+
Wrapper class enabling copying files into a container
10+
"""
11+
12+
source: Union[bytes, pathlib.Path]
913
destination_in_container: str
1014
mode: int = 0o644

core/tests/test_core.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,9 @@ def test_copy_file_into_container_via_initializer(tmp_path: Path):
8888
my_file = tmp_path / "my_file"
8989
my_file.write_text("hello world")
9090
destination_in_container = "/tmp/my_file"
91+
transferables = [Transferable(my_file, destination_in_container)]
9192

92-
with DockerContainer(
93-
"bash", command="sleep infinity", transferrables=(Transferable(my_file, destination_in_container),)
94-
) as container:
93+
with DockerContainer("bash", command="sleep infinity", transferables=transferables) as container:
9594
# When
9695
result = container.exec(f"cat {destination_in_container}")
9796

@@ -137,10 +136,9 @@ def test_copy_bytes_to_container_via_initializer():
137136
# Given
138137
file_content = b"hello world"
139138
destination_in_container = "/tmp/my_file"
139+
transferables = [Transferable(file_content, destination_in_container)]
140140

141-
with DockerContainer(
142-
"bash", command="sleep infinity", transferrables=(Transferable(file_content, destination_in_container),)
143-
) as container:
141+
with DockerContainer("bash", command="sleep infinity", transferables=transferables) as container:
144142
# When
145143
result = container.exec(f"cat {destination_in_container}")
146144

0 commit comments

Comments
 (0)