-
Notifications
You must be signed in to change notification settings - Fork 11
/
models.py
105 lines (81 loc) · 3.22 KB
/
models.py
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import enum
from skosprovider_sqlalchemy.models import ConceptScheme
from sqlalchemy import Column
from sqlalchemy import DateTime
from sqlalchemy import Enum
from sqlalchemy import ForeignKey
from sqlalchemy import Integer
from sqlalchemy import JSON
from sqlalchemy import String
from sqlalchemy import Text
from sqlalchemy.orm import declarative_base
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
Base = declarative_base()
class IDGenerationStrategy(enum.Enum):
NUMERIC = enum.auto()
GUID = enum.auto()
MANUAL = enum.auto()
class ExpandStrategy(enum.Enum):
RECURSE = 'recurse'
VISIT = 'visit'
class ConceptschemeVisitLog(Base):
__tablename__ = 'conceptscheme_visit_log'
id = Column(Integer, primary_key=True, autoincrement=True)
conceptscheme_id = Column(String(25), nullable=False)
visited_at = Column(DateTime, default=func.now(), nullable=False)
origin = Column(String(25), nullable=False)
class ConceptVisitLog(Base):
__tablename__ = 'concept_visit_log'
id = Column(Integer, primary_key=True, autoincrement=True)
concept_id = Column(Integer, nullable=False)
conceptscheme_id = Column(String(25), nullable=False)
visited_at = Column(DateTime, default=func.now(), nullable=False)
origin = Column(String(25), nullable=False)
class ConceptschemeCounts(Base):
__tablename__ = 'conceptscheme_counts'
id = Column(Integer, primary_key=True, autoincrement=True)
conceptscheme_id = Column(String(25), nullable=False)
counted_at = Column(DateTime, default=func.now(), nullable=False)
triples = Column(Integer, nullable=False)
conceptscheme_triples = Column(Integer, nullable=False)
avg_concept_triples = Column(Integer, nullable=False)
class Provider(Base):
__tablename__ = 'provider'
id = Column(String, primary_key=True)
conceptscheme_id = Column(
Integer,
ForeignKey(ConceptScheme.id),
nullable=False,
)
uri_pattern = Column(Text, nullable=False)
meta = Column('metadata', JSON, nullable=False) # metadata is reserved in sqlalchemy
expand_strategy = Column(Enum(ExpandStrategy))
conceptscheme = relationship(
ConceptScheme, uselist=False, single_parent=True, cascade='all, delete-orphan',
)
@hybrid_property
def default_language(self):
return self.meta.get('default_language')
@default_language.setter
def default_language(self, value):
self.meta['default_language'] = value
@hybrid_property
def force_display_language(self):
return self.meta.get('atramhasis.force_display_language')
@force_display_language.setter
def force_display_language(self, value):
self.meta['atramhasis.force_display_language'] = value
@hybrid_property
def id_generation_strategy(self):
return IDGenerationStrategy[self.meta.get('atramhasis.id_generation_strategy')]
@id_generation_strategy.setter
def id_generation_strategy(self, value):
self.meta['atramhasis.id_generation_strategy'] = value.name
@hybrid_property
def subject(self):
return self.meta.get('subject')
@subject.setter
def subject(self, value):
self.meta['subject'] = value