From 55af627bf4912096cec41410f1c2e493b5d27fb3 Mon Sep 17 00:00:00 2001 From: Christopher Rhodes <christopher.rhodes@embl.de> Date: Mon, 3 Jun 2024 16:16:27 +0200 Subject: [PATCH] Added and tested apply function to support pipeline-line operations --- model_server/base/accessors.py | 10 ++++++++++ tests/test_accessors.py | 3 +-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/model_server/base/accessors.py b/model_server/base/accessors.py index 6f596ab7..f5db79c2 100644 --- a/model_server/base/accessors.py +++ b/model_server/base/accessors.py @@ -110,6 +110,16 @@ class GenericImageDataAccessor(ABC): def shape_dict(self): return dict(zip(('Y', 'X', 'C', 'Z'), self.data.shape)) + def apply(self, func): + """ + Apply func to data and return as a new in-memory accessor + :param func: function that receives and returns the same size np.ndarray + :return: InMemoryDataAccessor + """ + return InMemoryDataAccessor( + func(self.data) + ) + class InMemoryDataAccessor(GenericImageDataAccessor): def __init__(self, data): self._data = self.conform_data(data) diff --git a/tests/test_accessors.py b/tests/test_accessors.py index d2f06655..014eda2c 100644 --- a/tests/test_accessors.py +++ b/tests/test_accessors.py @@ -73,11 +73,10 @@ class TestCziImageFileAccess(unittest.TestCase): def test_write_two_channel_png(self): from model_server.base.process import resample_to_8bit - ch = 2 cf = CziImageFileAccessor(czifile['path']) acc = cf.get_channels([0, 1]) opa = output_path / f'{cf.fpath.stem}_2ch.png' - acc_out = InMemoryDataAccessor(resample_to_8bit(acc.data)) + acc_out = acc.apply(resample_to_8bit) self.assertTrue( write_accessor_data_to_file(opa, acc_out) -- GitLab