Provider.force_display_language()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nop 2
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
import enum
2
3
from skosprovider_sqlalchemy.models import ConceptScheme
4
from sqlalchemy import Column
5
from sqlalchemy import DateTime
6
from sqlalchemy import Enum
7
from sqlalchemy import ForeignKey
8
from sqlalchemy import Integer
9
from sqlalchemy import JSON
10
from sqlalchemy import String
11
from sqlalchemy import Text
12
from sqlalchemy.orm import declarative_base
13
from sqlalchemy.ext.hybrid import hybrid_property
14
from sqlalchemy.orm import relationship
15
from sqlalchemy.sql import func
16
17
Base = declarative_base()
18
19
20
class IDGenerationStrategy(enum.Enum):
21
    NUMERIC = enum.auto()
22
    GUID = enum.auto()
23
    MANUAL = enum.auto()
24
25
26
class ExpandStrategy(enum.Enum):
27
    RECURSE = 'recurse'
28
    VISIT = 'visit'
29
30
31
class ConceptschemeVisitLog(Base):
32
    __tablename__ = 'conceptscheme_visit_log'
33
    id = Column(Integer, primary_key=True, autoincrement=True)
34
    conceptscheme_id = Column(String(25), nullable=False)
35
    visited_at = Column(DateTime, default=func.now(), nullable=False)
36
    origin = Column(String(25), nullable=False)
37
38
39
class ConceptVisitLog(Base):
40
    __tablename__ = 'concept_visit_log'
41
    id = Column(Integer, primary_key=True, autoincrement=True)
42
    concept_id = Column(String, nullable=False)
43
    conceptscheme_id = Column(String(25), nullable=False)
44
    visited_at = Column(DateTime, default=func.now(), nullable=False)
45
    origin = Column(String(25), nullable=False)
46
47
48
class ConceptschemeCounts(Base):
49
    __tablename__ = 'conceptscheme_counts'
50
    id = Column(Integer, primary_key=True, autoincrement=True)
51
    conceptscheme_id = Column(String(25), nullable=False)
52
    counted_at = Column(DateTime, default=func.now(), nullable=False)
53
    triples = Column(Integer, nullable=False)
54
    conceptscheme_triples = Column(Integer, nullable=False)
55
    avg_concept_triples = Column(Integer, nullable=False)
56
57
58
class Provider(Base):
59
    __tablename__ = 'provider'
60
61
    id = Column(String, primary_key=True)
62
    conceptscheme_id = Column(
63
        Integer,
64
        ForeignKey(ConceptScheme.id),
65
        nullable=False,
66
    )
67
    uri_pattern = Column(Text, nullable=False)
68
    meta = Column('metadata', JSON, nullable=False)  # metadata is reserved in sqlalchemy
69
    expand_strategy = Column(Enum(ExpandStrategy))
70
71
    conceptscheme = relationship(
72
        ConceptScheme, uselist=False, single_parent=True, cascade='all, delete-orphan',
73
    )
74
75
    @hybrid_property
76
    def default_language(self):
77
        return self.meta.get('default_language')
78
79
    @default_language.setter
80
    def default_language(self, value):
81
        self.meta['default_language'] = value
82
83
    @hybrid_property
84
    def force_display_language(self):
85
        return self.meta.get('atramhasis.force_display_language')
86
87
    @force_display_language.setter
88
    def force_display_language(self, value):
89
        self.meta['atramhasis.force_display_language'] = value
90
91
    @hybrid_property
92
    def id_generation_strategy(self):
93
        return IDGenerationStrategy[self.meta.get('atramhasis.id_generation_strategy')]
94
95
    @id_generation_strategy.setter
96
    def id_generation_strategy(self, value):
97
        self.meta['atramhasis.id_generation_strategy'] = value.name
98
99
    @hybrid_property
100
    def subject(self):
101
        return self.meta.get('subject')
102
103
    @subject.setter
104
    def subject(self, value):
105
        self.meta['subject'] = value
106