diff --git a/cads_adaptors/adaptors/__init__.py b/cads_adaptors/adaptors/__init__.py index d2425ef4..d525fd31 100644 --- a/cads_adaptors/adaptors/__init__.py +++ b/cads_adaptors/adaptors/__init__.py @@ -1,5 +1,6 @@ import abc import contextlib +import pathlib from typing import Any, BinaryIO import cads_adaptors.tools.logger @@ -85,6 +86,7 @@ def __init__( self, form: list[dict[str, Any]] | dict[str, Any] | None, context: Context | None = None, + cache_tmp_path: pathlib.Path | None = None, **config: Any, ) -> None: self.form = form @@ -93,6 +95,9 @@ def __init__( self.context = Context() else: self.context = context + self.cache_tmp_path = ( + pathlib.Path() if cache_tmp_path is None else cache_tmp_path + ) @abc.abstractmethod def normalise_request(self, request: Request) -> Request: @@ -184,11 +189,19 @@ def retrieve(self, request: Request) -> BinaryIO: microseconds=time_elapsed.microsecond, ).total_seconds() + self.context.add_stdout(f"Sleeping {time_sleep} s") time.sleep(time_sleep) - with open("dummy.grib", "wb") as fp: + + dummy_file = self.cache_tmp_path / "dummy.grib" + self.context.add_stdout(f"Writing {size} B to {dummy_file!s}") + tic = time.perf_counter() + with dummy_file.open("wb") as fp: with open("/dev/urandom", "rb") as random: while size > 0: length = min(size, 10240) fp.write(random.read(length)) size -= length - return open("dummy.grib", "rb") + toc = time.perf_counter() + self.context.add_stdout(f"Elapsed time to write the file: {toc - tic} s") + + return dummy_file.open("rb") diff --git a/tests/test_10_cache_tmp_path.py b/tests/test_10_cache_tmp_path.py new file mode 100644 index 00000000..67a701e0 --- /dev/null +++ b/tests/test_10_cache_tmp_path.py @@ -0,0 +1,11 @@ +import os +import pathlib + +import cads_adaptors + + +def test_cache_tmp_path_dummy_adaptor(tmp_path: pathlib.Path) -> None: + dummy_adaptor = cads_adaptors.DummyAdaptor(None, cache_tmp_path=tmp_path) + result = dummy_adaptor.retrieve({"size": 1}) + assert result.name == str(tmp_path / "dummy.grib") + assert os.path.getsize(result.name) == 1