summaryrefslogtreecommitdiff
path: root/archivist/model.py
diff options
context:
space:
mode:
Diffstat (limited to 'archivist/model.py')
-rw-r--r--archivist/model.py23
1 files changed, 18 insertions, 5 deletions
diff --git a/archivist/model.py b/archivist/model.py
index cbbc462..86c2cf1 100644
--- a/archivist/model.py
+++ b/archivist/model.py
@@ -63,25 +63,37 @@ class CompressedField(_CompressedField):
return value if value is None else self.decompress(value)
@table
+class DocumentContent(BaseModel):
+ blob = CompressedField()
+
+@table
class Document(BaseModel):
@unique
class Direction(Enum):
IN = 0
OUT = 1
- content = CompressedField()
created = DateField(default=datetime.date.today)
inserted = DateTimeField(default=datetime.datetime.now)
description = CharField(null=True)
original_path = CharField(null=True)
file_type = CharField(null=True)
direction = EnumField(Direction, null=True)
+ content = ForeignKeyField(DocumentContent, related_name = 'document')
@classmethod
- def matches(cls, prefix, value):
- return query_pseudo_prefix(prefix, value) or Document.id << (
- DocumentTag.select(DocumentTag.document)
- .join(Tag, on=Tag.matches(prefix, value)))
+ @db.atomic()
+ def create_from_file(cls, from_file, tags, **kwargs):
+ content = DocumentContent.create(blob=from_file.read())
+
+ doc = cls.create(content = content,
+ original_path = from_file.name,
+ **kwargs)
+
+ for t in tags:
+ DocumentTag.create(document = doc, tag = t)
+
+ return doc
@table
class Prefix(BaseModel):
@@ -95,6 +107,7 @@ class Prefix(BaseModel):
def create(cls, **query):
inst = super().create(**query)
Tag.create_prefix_default(inst)
+ return inst
@property
def default_tag(self):