diff options
| author | Barry Warsaw | 2007-11-18 16:38:59 -0500 |
|---|---|---|
| committer | Barry Warsaw | 2007-11-18 16:38:59 -0500 |
| commit | eff07b15bedb17e51271a75f849447100b201734 (patch) | |
| tree | c429a9e854007a64ad8373f97295f66a1ac190c7 /Mailman/database/types.py | |
| parent | 2b7304d722e9ca628d6550dbb024dfa78322e91f (diff) | |
| parent | 8a7be9204a9170f9d9b0eb79c2726df0c7a1b4a9 (diff) | |
| download | mailman-eff07b15bedb17e51271a75f849447100b201734.tar.gz mailman-eff07b15bedb17e51271a75f849447100b201734.tar.zst mailman-eff07b15bedb17e51271a75f849447100b201734.zip | |
Diffstat (limited to 'Mailman/database/types.py')
| -rw-r--r-- | Mailman/database/types.py | 54 |
1 files changed, 23 insertions, 31 deletions
diff --git a/Mailman/database/types.py b/Mailman/database/types.py index 0f0e46fa3..ec886699d 100644 --- a/Mailman/database/types.py +++ b/Mailman/database/types.py @@ -15,51 +15,43 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, # USA. +__all__ = [ + 'Enum', + ] + + import sys -from datetime import timedelta -from sqlalchemy import types +from storm.properties import SimpleProperty +from storm.variables import UnicodeVariable, Variable -# SQLAlchemy custom type for storing munepy Enums in the database. -class EnumType(types.TypeDecorator): - # Enums can be stored as strings of the form: - # full.path.to.Enum:intval - impl = types.String +class _EnumVariable(Variable): + """Storm variable.""" - def convert_bind_param(self, value, engine): - if value is None: - return None - return '%s.%s:%d' % (value.enumclass.__module__, - value.enumclass.__name__, - int(value)) - - def convert_result_value(self, value, engine): + def parse_set(self, value, from_db): if value is None: return None + if not from_db: + return value path, intvalue = value.rsplit(':', 1) modulename, classname = path.rsplit('.', 1) __import__(modulename) cls = getattr(sys.modules[modulename], classname) return cls[int(intvalue)] - - -class TimeDeltaType(types.TypeDecorator): - # timedeltas are stored as the string representation of three integers, - # separated by colons. The values represent the three timedelta - # attributes days, seconds, microseconds. - impl = types.String - - def convert_bind_param(self, value, engine): + def parse_get(self, value, to_db): if value is None: return None - return '%s:%s:%s' % (value.days, value.seconds, value.microseconds) + if not to_db: + return value + return '%s.%s:%d' % (value.enumclass.__module__, + value.enumclass.__name__, + int(value)) - def convert_result_value(self, value, engine): - if value is None: - return None - parts = value.split(':') - assert len(parts) == 3, 'Bad timedelta representation: %s' % value - return timedelta(*(int(value) for value in parts)) + +class Enum(SimpleProperty): + """Custom munepy.Enum type for Storm.""" + + variable_class = _EnumVariable |
