From 975b647a3274f299df7260b6597aa88be90a7bb8 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Thu, 5 Oct 2017 16:21:16 +0200 Subject: Restructure: Move some tag handling into the business logic --- archivist/bl.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 archivist/bl.py (limited to 'archivist/bl.py') diff --git a/archivist/bl.py b/archivist/bl.py new file mode 100644 index 0000000..0815cf6 --- /dev/null +++ b/archivist/bl.py @@ -0,0 +1,52 @@ +from . import model as m +from .model import db +from .peewee_ext import sqlite_tuple_in +from .virtual_prefixes import is_virtual, query as query_virtual + +class BusinessException(Exception): + def __init__(self, message): + super().__init__(message) + self.message = message + +class PrefixTag: + def __init__(self, name, prefix = None, description = None): + self.name = name + self.prefix = prefix + self.description = description + + def __iter__(self): + yield self.prefix + yield self.name + + def is_virtual(self): + return is_virtual(self.prefix) + + @property + def virtual_query(self): + return query_virtual(self.prefix, self.name) + + def __str__(self): + if self.prefix: + return "%s:%s" % (self.prefix, self.name) + else: + return self.name + + def load(self): + return m.Tag.get(name = self.name, prefix = self.prefix) + + def create(self): + with db.atomic(): + if self.prefix: + prefix, created = m.Prefix.get_or_create(name = self.prefix) + + if not created and prefix.virtual: + raise BusinessException("Prefix '%s' is not allowed to carry additional tags." % self.prefix) + else: + prefix = None + + tag, created = m.Tag.create_or_get(name = self.name, prefix = self.prefix, description = self.description) + + if prefix is not None: + m.TagImplications.try_create(tag = tag, implies_tag = prefix.default_tag) + + return tag, created -- cgit v1.2.3-54-g00ecf