From c0452a4c3203563f3e6d40f4fe24289c3c61be58 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Al=C3=A1n=20Mu=C3=B1oz?= <amuoz@ed.ac.uk>
Date: Wed, 29 Jun 2022 18:19:39 +0100
Subject: [PATCH] feat(image): add wrapper to pick image class

---
 aliby/io/image.py | 26 ++++++++++++++++++++++----
 1 file changed, 22 insertions(+), 4 deletions(-)

diff --git a/aliby/io/image.py b/aliby/io/image.py
index 257f5f6b..2f8878de 100644
--- a/aliby/io/image.py
+++ b/aliby/io/image.py
@@ -1,17 +1,35 @@
 #!/usr/bin/env python3
 
-from pathlib import Path
+import typing as t
 from datetime import datetime
-
-import xmltodict
-from tifffile import TiffFile
+from pathlib import Path, PosixPath
 
 import dask.array as da
+import xmltodict
 from dask.array.image import imread
+from tifffile import TiffFile
 
 from aliby.io.omero import Argo, get_data_lazy
 
 
+def get_image_class(source: t.Union[str, int, t.Dict[str, str], PosixPath]):
+    """
+    Wrapper to pick the appropiate Image class depending on the source of data.
+    """
+    if isinstance(source, int):
+        instatiator = Image
+    elif isinstance(source, dict) or (
+        isinstance(source, (str, PosixPath)) and Path(source).is_dir()
+    ):
+        instatiator = ImageDirectory
+    elif isinstance(source, str) and Path(source).is_file():
+        instatiator = ImageLocal
+    else:
+        raise ("Invalid data source at {}".format(source))
+
+    return instatiator
+
+
 class ImageLocal:
     def __init__(self, path: str, dimorder=None, *args, **kwargs):
         self.path = path
-- 
GitLab