From 26af148a048e68c56ad32aaafe69bed9eace90da Mon Sep 17 00:00:00 2001
From: David Hammer <dhammer@mailbox.org>
Date: Fri, 21 Jan 2022 16:24:50 +0100
Subject: [PATCH] Wrap frame filter type in enum

---
 src/calng/base_correction.py | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/src/calng/base_correction.py b/src/calng/base_correction.py
index 59c48000..14a1b6b1 100644
--- a/src/calng/base_correction.py
+++ b/src/calng/base_correction.py
@@ -1,3 +1,4 @@
+import enum
 import pathlib
 import threading
 from timeit import default_timer
@@ -41,6 +42,13 @@ from ._version import version as deviceVersion
 
 PROCESSING_STATE_TIMEOUT = 10
 
+
+class FramefilterSpecType(enum.Enum):
+    NONE = "none"
+    RANGE = "range"
+    COMMASEPARATED = "commaseparated"
+
+
 preview_schema = Schema()
 (
     NODE_ELEMENT(preview_schema).key("image").commit(),
@@ -297,7 +305,7 @@ class BaseCorrection(PythonDevice):
                 "are parsed and passed directly to numpy.arange. 'commaseparated' "
                 "reads a list of integers separated by commas."
             )
-            .options("none,arange,commaseparated")
+            .options(",".join(spectype.value for spectype in FramefilterSpecType))
             .assignmentOptional()
             .defaultValue("none")
             .reconfigurable()
@@ -830,12 +838,12 @@ class BaseCorrection(PythonDevice):
         afterwards."""
         # TODO: add some validation to preReconfigure
         self.log.DEBUG("Updating frame filter")
-        filter_type = self.get("frameFilter.type")
+        filter_type = FramefilterSpecType(self.get("frameFilter.type"))
         filter_string = self.get("frameFilter.spec")
 
-        if filter_type == "none" or filter_string.strip() == "":
+        if filter_type is FramefilterSpecType.NONE or filter_string.strip() == "":
             self._frame_filter = None
-        elif filter_type == "arange":
+        elif filter_type is Framefilterspectype.RANGE:
             try:
                 numbers = tuple(int(part) for part in filter_string.split(","))
             except (ValueError, TypeError):
@@ -844,7 +852,7 @@ class BaseCorrection(PythonDevice):
                 )
             else:
                 self._frame_filter = np.arange(*numbers, dtype=np.uint16)
-        elif filter_type == "commaseparated":
+        elif filter_type is Framefilterspectype.COMMASEPARATED:
             try:
                 self._frame_filter = np.fromstring(
                     filter_string, sep=",", dtype=np.uint16
-- 
GitLab