Passed
Pull Request — develop (#812)
by
unknown
01:15
created

Provider.force_display_language()   A

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(Integer, 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(ConceptScheme, uselist=False)
72
73
    @hybrid_property
74
    def default_language(self):
75
        return self.meta.get('default_language')
76
77
    @default_language.setter
78
    def default_language(self, value):
79
        self.meta['default_language'] = value
80
81
    @hybrid_property
82
    def force_display_language(self):
83
        return self.meta.get('atramhasis.force_display_language')
84
85
    @force_display_language.setter
86
    def force_display_language(self, value):
87
        self.meta['atramhasis.force_display_language'] = value
88
89
    @hybrid_property
90
    def id_generation_strategy(self):
91
        return IDGenerationStrategy[self.meta.get('atramhasis.id_generation_strategy')]
92
93
    @id_generation_strategy.setter
94
    def id_generation_strategy(self, value):
95
        self.meta['atramhasis.id_generation_strategy'] = value.name
96
97
    @hybrid_property
98
    def subject(self):
99
        return self.meta.get('subject')
100
101
    @subject.setter
102
    def subject(self, value):
103
        self.meta['subject'] = value
104