From 247a64165b014960be2d26f9d7a16559b36ac8bf Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Sun, 26 Feb 2017 18:21:57 +0100 Subject: Introduce enum fields --- archivist/model.py | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/archivist/model.py b/archivist/model.py index dd4c87e..d1ef6c7 100644 --- a/archivist/model.py +++ b/archivist/model.py @@ -4,6 +4,7 @@ from playhouse.hybrid import * from playhouse.sqlite_ext import SqliteExtDatabase import datetime +from enum import Enum, unique from pkg_resources import resource_filename from .prefixes import query_pseudo_prefix @@ -30,14 +31,42 @@ class BaseModel(Model): class Meta: database = db +class EnumField(Field): + db_field = 'enum' + + def __init__(self, enum_class, *args, **kwargs): + super().__init__(*args, **kwargs) + self.enum_class = enum_class + + def _enum_value(self, value): + return self.enum_class(int(value)) + + def db_value(self, value): + if value is None: + return value + + if isinstance(value, self.enum_class): + return value.value + + # force check of enum value + return self._enum_value(value).value + + def python_value(self, value): + return value if value is None else self._enum_value(value) + @table class Document(BaseModel): + @unique + class Direction(Enum): + IN = 0 + OUT = 1 + content = CompressedField() created = DateField(default=datetime.datetime.now) + inserted = DateTimeField(default=datetime.datetime.now) description = CharField(null=True) - direction = BooleanField(null=True) original_path = CharField(null=True) - inserted = DateTimeField(default=datetime.datetime.now) + direction = EnumField(Direction, null=True) @classmethod def matches(cls, prefix, value): -- cgit v1.2.3-54-g00ecf (unfollow)
Commit message (Collapse)AuthorFilesLines
2022-11-15[openlink] Update for newer firefoxRené 'Necoro' Neumann1-1/+1
2022-11-15[i3] New thunderbird has windows in lowercase. Fix matchingRené 'Necoro' Neumann1-5/+5
2022-11-15[zsh] Port cci to new stg versionRené 'Necoro' Neumann1-5/+2
2021-05-21[git] Default to master on initRené 'Necoro' Neumann1-0/+3
2021-03-05[zsh] Remove variable ECHANGELOG_USERRené 'Necoro' Neumann1-1/+0
2021-03-05CleanupRené 'Necoro' Neumann4-101/+0
2021-03-05[vim] Remove gnupg pluginRené 'Necoro' Neumann1-3/+0
2021-03-05[urxvt] Disable iso14755 mode -- whatever this may beRené 'Necoro' Neumann1-0/+3
2021-03-05[screen] define a login shellRené 'Necoro' Neumann1-0/+3
2020-11-28Nobody is using mercurial anymore...René 'Necoro' Neumann1-19/+0