summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRené 'Necoro' Neumann <necoro@necoro.net>2017-02-26 18:21:57 +0100
committerRené 'Necoro' Neumann <necoro@necoro.net>2017-02-26 18:21:57 +0100
commit247a64165b014960be2d26f9d7a16559b36ac8bf (patch)
treef650abadd5a08c76ccb148ae35430e02e2c8d37e
parentb00b51565e4f3aefd6e86c1c9d9c46f70711887b (diff)
downloadarchivist-247a64165b014960be2d26f9d7a16559b36ac8bf.tar.gz
archivist-247a64165b014960be2d26f9d7a16559b36ac8bf.tar.bz2
archivist-247a64165b014960be2d26f9d7a16559b36ac8bf.zip
Introduce enum fields
-rw-r--r--archivist/model.py33
1 files 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):