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