From cc7ed4553679ab431e6423e1b48a29fd555054c8 Mon Sep 17 00:00:00 2001 From: Joakim Hove Date: Fri, 23 Feb 2018 13:20:40 +0100 Subject: [PATCH] Added functionality to get an enum from the name. --- cwrap/basecenum.py | 8 ++++++++ tests/test_basecenum.py | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/cwrap/basecenum.py b/cwrap/basecenum.py index f1e6281..1d2a5d4 100644 --- a/cwrap/basecenum.py +++ b/cwrap/basecenum.py @@ -49,6 +49,14 @@ def from_param(cls, c_class_object): raise ValueError("c_class_object must be an BaseCEnum instance!") return c_class_object.value + @classmethod + def from_string(cls, name): + for enum in cls.enum_namespace[cls]: + if enum.name == name: + return enum + + raise ValueError("No such enum:%s" % name) + @classmethod def addEnum(cls, name, value): name = str(name) diff --git a/tests/test_basecenum.py b/tests/test_basecenum.py index 45dfb68..3d6651a 100644 --- a/tests/test_basecenum.py +++ b/tests/test_basecenum.py @@ -90,3 +90,17 @@ class MyLonelyEnum(BaseCEnum): self.assertEqual(str(tri), 'THREE') self.assertEqual(tri.name, 'THREE') self.assertEqual(tri.value, 3) + + + def test_from_name(self): + class EnumName(BaseCEnum): + pass + + EnumName.addEnum("ONE", 1) + EnumName.addEnum("TWO", 2) + + with self.assertRaises(ValueError): + enum = EnumName.from_string("No-not-this") + + one = EnumName.from_string("ONE") + self.assertEqual(one, EnumName.ONE)