summaryrefslogtreecommitdiff
path: root/archivist/model.py
diff options
context:
space:
mode:
Diffstat (limited to 'archivist/model.py')
-rw-r--r--archivist/model.py13
1 files changed, 10 insertions, 3 deletions
diff --git a/archivist/model.py b/archivist/model.py
index 79b0514..dd4c87e 100644
--- a/archivist/model.py
+++ b/archivist/model.py
@@ -1,12 +1,16 @@
from peewee import *
from playhouse.fields import CompressedField
from playhouse.hybrid import *
+from playhouse.sqlite_ext import SqliteExtDatabase
import datetime
+from pkg_resources import resource_filename
from .prefixes import query_pseudo_prefix
+from .closure import ClosureTable
-db = SqliteDatabase('test.db', pragmas=[('foreign_keys', 'ON')])
+db = SqliteExtDatabase('test.db', pragmas=[('foreign_keys', 'ON')])
+db.load_extension(resource_filename(__name__, 'sqlext/closure'))
__tables__ = []
__all__ = ['create_tables', 'drop_tables']
@@ -101,11 +105,14 @@ class DocumentTag(BaseModel):
@table
class TagImplications(BaseModel):
- tag = ForeignKeyField(Tag)
- implies_tag = ForeignKeyField(Tag, related_name = 'implications')
+ tag = ForeignKeyField(Tag, related_name = 'implications')
+ implies_tag = ForeignKeyField(Tag, related_name = '_implied_by')
class Meta:
primary_key = CompositeKey('tag', 'implies_tag')
def __repr__(self):
return "<%s %d --> %d>" % (self.__class__.__name__, self.tag_id, self.implies_tag_id)
+
+TagClosure = ClosureTable(Tag, TagImplications, TagImplications.implies_tag, TagImplications.tag)
+table(TagClosure)