diff --git a/extensions/chaeo/accessors.py b/extensions/chaeo/accessors.py index b782c51bc2d0a40b2f2b0921fe91d1a6b0afdc02..928aabbc770a876a08afa43614b7303e865eafc6 100644 --- a/extensions/chaeo/accessors.py +++ b/extensions/chaeo/accessors.py @@ -1,4 +1,7 @@ +from pathlib import Path + import numpy as np + from model_server.accessors import generate_file_accessor, InMemoryDataAccessor class MonoPatchStack(InMemoryDataAccessor): @@ -48,11 +51,17 @@ class MonoPatchStack(InMemoryDataAccessor): class MonoPatchStackFromFile(MonoPatchStack): def __init__(self, fpath): - super().__init__(generate_file_accessor(fpath).data[:, :, 0, :]) + if not Path(fpath).exists(): + raise FileNotFoundError(f'Could not find {fpath}') + self.file_acc = generate_file_accessor(fpath) + super().__init__(self.file_acc.data[:, :, 0, :]) class Error(Exception): pass class InvalidDataForPatchStackError(Error): - pass \ No newline at end of file + pass + +class FileNotFoundError(Error): + pass diff --git a/extensions/chaeo/tests/test_accessors.py b/extensions/chaeo/tests/test_accessors.py index 842b8fbc77f94e61bb36391e08acde1ab8ee2540..83ea1100e417298dd263496d24fd6a62e381024d 100644 --- a/extensions/chaeo/tests/test_accessors.py +++ b/extensions/chaeo/tests/test_accessors.py @@ -2,7 +2,8 @@ import unittest import numpy as np -from extensions.chaeo.accessors import MonoPatchStack +from conf.testing import monozstackmask +from extensions.chaeo.accessors import MonoPatchStack, MonoPatchStackFromFile @@ -26,4 +27,19 @@ class TestCziImageFileAccess(unittest.TestCase): acc = MonoPatchStack([np.random.rand(h, w) for _ in range(0, 4)]) self.assertEqual(acc.count, n) self.assertEqual(acc.hw, (h, w)) - self.assertEqual(acc.make_tczyx().shape, (n, 1, 1, h, w)) \ No newline at end of file + self.assertEqual(acc.make_tczyx().shape, (n, 1, 1, h, w)) + + def test_make_patch_stack_from_file(self): + h = monozstackmask['h'] + w = monozstackmask['w'] + c = monozstackmask['c'] + n = monozstackmask['z'] + acc = MonoPatchStackFromFile(monozstackmask['path']) + self.assertEqual(acc.hw, (h, w)) + self.assertEqual(acc.count, n) + self.assertEqual(acc.make_tczyx().shape, (n, c, 1, h, w)) + + def test_raises_filenotfound(self): + from extensions.chaeo.accessors import FileNotFoundError + with self.assertRaises(FileNotFoundError): + acc = MonoPatchStackFromFile('c:/fake/file/name.tif') \ No newline at end of file