From 08628f0c288b4a580136a5a43c8b6c62d7a9072b Mon Sep 17 00:00:00 2001 From: Christopher Rhodes <christopher.rhodes@embl.de> Date: Sun, 10 Nov 2024 08:22:14 +0100 Subject: [PATCH] Added unload method --- model_server/base/accessors.py | 4 ++++ model_server/base/session.py | 1 + tests/base/test_accessors.py | 12 ++++++++++-- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/model_server/base/accessors.py b/model_server/base/accessors.py index 4175ef9c..1241548a 100644 --- a/model_server/base/accessors.py +++ b/model_server/base/accessors.py @@ -29,6 +29,10 @@ class GenericImageDataAccessor(ABC): def loaded(self): return self._data is not None + def unload(self): + self._data = None + self._metadata = None + @property def chroma(self): return self.shape_dict['C'] diff --git a/model_server/base/session.py b/model_server/base/session.py index 5f8c6611..c61d6a6e 100644 --- a/model_server/base/session.py +++ b/model_server/base/session.py @@ -186,6 +186,7 @@ class _Session(object): self.log_info(f'Deleted accessor {accessor_id}') return accessor_id + # TODO: call unload method on file-backed accessors def del_all_accessors(self) -> list[str]: """ Remove (unload) all accessors but keep their info in dictionary diff --git a/tests/base/test_accessors.py b/tests/base/test_accessors.py index 2d9e9a6d..bef1506d 100644 --- a/tests/base/test_accessors.py +++ b/tests/base/test_accessors.py @@ -229,15 +229,23 @@ class TestCziImageFileAccess(unittest.TestCase): ) def test_lazy_load(self): + # initialize an accessor with lazy flag acc_cf = generate_file_accessor(data['czifile']['path'], lazy=True) - self.assertEqual(acc_cf._data, None) - self.assertEqual(acc_cf._metadata, None) + self.assertIsNone(acc_cf._data) + self.assertIsNone(acc_cf._metadata) + + # implicitly load by accessing its data property nda = acc_cf.data self.assertIsNotNone(acc_cf._data) self.assertIsNotNone(acc_cf._metadata) self.assertIsInstance(acc_cf._data, np.ndarray) self.assertIsInstance(acc_cf._metadata, dict) + # explicitly unload + acc_cf.unload() + self.assertIsNone(acc_cf._data) + self.assertIsNone(acc_cf._metadata) + class TestPatchStackAccessor(unittest.TestCase): def setUp(self) -> None: -- GitLab