29
29
from storm.properties import SimpleProperty
30
30
from storm.variables import Variable
32
from mailman.utilities.modules import find_name
36
34
class _EnumVariable(Variable):
35
"""Storm variable for supporting flufl.enum.Enum types.
39
To use this, make the database column a TEXT.
37
To use this, make the database column a INTEGER.
40
def __init__(self, *args, **kws):
41
self._enum = kws.pop('enum')
42
super(_EnumVariable, self).__init__(*args, **kws)
42
44
def parse_set(self, value, from_db):
47
path, colon, intvalue = value.rpartition(':')
48
class_ = find_name(path)
49
return class_[int(intvalue)]
49
return self._enum[value]
51
51
def parse_get(self, value, to_db):
56
return '{0}.{1}:{2}'.format(
57
value.enumclass.__module__,
58
value.enumclass.__name__,
62
59
class Enum(SimpleProperty):
63
"""Custom Enum type for Storm."""
60
"""Custom Enum type for Storm supporting flufl.enum.Enums."""
65
62
variable_class = _EnumVariable
64
def __init__(self, enum=None):
65
super(Enum, self).__init__(enum=enum)