diff --git a/src/caosadvancedtools/table_importer.py b/src/caosadvancedtools/table_importer.py index 04c8ea23b19ee0cc055dc58b69f1b3d6fecd1b55..89d404deb047f96c0fa017cc0dfef391cf9f8868 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 60ca940b0471eaddf6e8c47b1cacbbfe90d22cac..a9672b83a8b76eb87b001c304036c9a207fdbd5b 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")