From a11a8cac3bf65f3174027c607fed840368f789ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20tom=20W=C3=B6rden?= <h.tomwoerden@indiscale.com> Date: Fri, 1 Oct 2021 18:10:20 +0200 Subject: [PATCH] ENH: add converter that checks input against enum When importing a table using the TableImporter, it is now possible to use the enum_converter to assure that values are part of a supplied enum. --- src/caosadvancedtools/table_importer.py | 13 +++++++++++++ unittests/test_table_importer.py | 10 ++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/caosadvancedtools/table_importer.py b/src/caosadvancedtools/table_importer.py index 04c8ea23..89d404de 100755 --- a/src/caosadvancedtools/table_importer.py +++ b/src/caosadvancedtools/table_importer.py @@ -145,6 +145,19 @@ def win_path_converter(val): return path.as_posix() +def enum_converter(val, options, ignore_case=True): + if ignore_case: + val = val.lower() + options = [o.lower() for o in options] + + if val not in options: + raise ValueError( + "Field value is '{}', but it should be one of the following " + "values: {}.".format(val, ", ".join( + ["'{}'".format(o) for o in options]))) + + return val + class TSVImporter(object): def __init__(self, converters, obligatory_columns=[], unique_columns=[]): raise NotImplementedError() diff --git a/unittests/test_table_importer.py b/unittests/test_table_importer.py index 60ca940b..a9672b83 100644 --- a/unittests/test_table_importer.py +++ b/unittests/test_table_importer.py @@ -33,6 +33,7 @@ from caosadvancedtools.table_importer import (XLSImporter, assure_name_format, incomplete_date_converter, win_path_converter, win_path_list_converter, + enum_converter, yes_no_converter) @@ -49,6 +50,15 @@ class ConverterTest(unittest.TestCase): self.assertRaises(ValueError, yes_no_converter, "True") self.assertRaises(ValueError, yes_no_converter, "true") + def test_enum(self): + self.assertEqual("false", enum_converter("false", + ["FALSE", "TRUE"])) + self.assertEqual("FALSE", enum_converter("FALSE", + ["FALSE", "TRUE"], False)) + self.assertRaises(ValueError, enum_converter, "FALSE", []) + self.assertRaises(ValueError, enum_converter, "FALSE", ["fals"]) + self.assertRaises(ValueError, enum_converter, "FALSE", ["false"], False) + def test_assure_name_format(self): self.assertEqual(assure_name_format("Müstermann, Max"), "Müstermann, Max") -- GitLab