summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRené 'Necoro' Neumann <necoro@necoro.net>2017-12-03 18:06:10 +0100
committerRené 'Necoro' Neumann <necoro@necoro.net>2017-12-03 18:06:10 +0100
commitef092edc64ac489fe25d83bad05e4c1660b2444b (patch)
tree1df27bd3cfe51e3a454d94ba88997f174d6e161f
parentc447aeb3d35ab2d7678b683ab2fa16a726109885 (diff)
downloadarchivist-master.tar.gz
archivist-master.tar.bz2
archivist-master.zip
Enhance CharField with 'nocase' optionHEADmaster
-rw-r--r--archivist/model.py6
-rw-r--r--archivist/peewee_ext.py10
2 files changed, 12 insertions, 4 deletions
diff --git a/archivist/model.py b/archivist/model.py
index 1544f3f..2676204 100644
--- a/archivist/model.py
+++ b/archivist/model.py
@@ -8,7 +8,7 @@ import datetime
from enum import Enum, unique
from pkg_resources import resource_filename
-from .peewee_ext import EnumField, CompressedField, SQLIndex
+from .peewee_ext import EnumField, CharField, CompressedField, SQLIndex
from .peewee_fixes import * # dummy to force evaluation of those fixes
db = SqliteExtDatabase('test.db', pragmas=[('foreign_keys', 'ON')])
@@ -96,7 +96,7 @@ class Document(BaseModel):
@table
class Prefix(BaseModel):
__keys__ = ('name',)
- name = CharField(primary_key = True)
+ name = CharField(primary_key = True, nocase=True)
virtual = BooleanField(default = False)
description = CharField(null=True)
@@ -122,7 +122,7 @@ class Prefix(BaseModel):
class Tag(BaseModel):
__keys__ = ('name', 'prefix')
- name = CharField()
+ name = CharField(nocase=True)
prefix = ForeignKeyField(Prefix, null=True, related_name = 'tag', db_column = 'prefix')
description = CharField(null=True)
default = BooleanField(default = False)
diff --git a/archivist/peewee_ext.py b/archivist/peewee_ext.py
index edcb9c9..011f80d 100644
--- a/archivist/peewee_ext.py
+++ b/archivist/peewee_ext.py
@@ -1,5 +1,5 @@
from peewee import Field, SQL
-from playhouse.fields import CompressedField as _CompressedField
+from playhouse.fields import CompressedField as _CompressedField, CharField as _CharField
from itertools import starmap
from functools import reduce
@@ -11,6 +11,14 @@ def sqlite_tuple_in(fields, values):
subqueries = (reduce(op.and_, starmap(op.eq, zip(fields, value_tuple))) for value_tuple in values)
return reduce(op.or_, subqueries)
+class CharField(_CharField):
+ def __init__(self, *args, **kwargs):
+ constraints = kwargs.pop('constraints', [])
+ nocase = kwargs.pop('nocase', False)
+ if nocase:
+ constraints.append(SQL('COLLATE NOCASE'))
+ super().__init__(*args, constraints=constraints, **kwargs)
+
class CompressedField(_CompressedField):
def db_value(self, value):
return value if value is None else self.compress(value)