diff --git a/docs/changelog.rst b/docs/changelog.rst index 6e70b1a..5324b29 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,6 +1,10 @@ Change history ============== +1.2.5a1 (2018-10-25) + +* Added EnumExt implementation + 1.2.5a0 (2018-10-22) * Enhance utils.use_kwargs. diff --git a/hobbit_core/__init__.py b/hobbit_core/__init__.py index 638530f..ad51bc8 100644 --- a/hobbit_core/__init__.py +++ b/hobbit_core/__init__.py @@ -1 +1 @@ -VERSION = [1, 2, 5, 'a0'] +VERSION = [1, 2, 5, 'a1'] diff --git a/hobbit_core/flask_hobbit/db.py b/hobbit_core/flask_hobbit/db.py index fa0d2b3..3063f7f 100644 --- a/hobbit_core/flask_hobbit/db.py +++ b/hobbit_core/flask_hobbit/db.py @@ -61,8 +61,33 @@ def reference_col(tablename, nullable=False, pk_name='id', **kwargs): class EnumExt(enum.Enum): + """ serialize/deserialize sqlalchemy enum field """ - TODO: - * extension. - """ - pass + @classmethod + def strict_dump(cls, key, verbose=False): + pos = 1 if verbose else 0 + return cls[key].value[pos] + + @classmethod + def dump(cls, key, verbose=False): + ret = {'key': cls[key].value[0], 'value': cls[key].value[1]} + if verbose: + ret.update({'label': key}) + return ret + + @classmethod + def load(cls, val): + pos = 1 if isinstance(val, str) else 0 + for elem in cls: + if elem.value[pos] == val: + return elem.name + + @classmethod + def to_opts(cls, verbose=False): + opts = [] + for elem in cls: + opt = {'key': elem.value[0], 'value': elem.value[1]} + if verbose: + opt.update({'label': elem.name}) + opts.append(opt) + return opts