1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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
|