Triple   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 47
Duplicated Lines 0 %

Test Coverage

Coverage 88%

Importance

Changes 5
Bugs 0 Features 0
Metric Value
c 5
b 0
f 0
dl 0
loc 47
ccs 22
cts 25
cp 0.88
rs 10
wmc 11

5 Methods

Rating   Name   Duplication   Size   Complexity  
A _check_attributes() 0 6 3
A as_dict() 0 8 3
A predicate_set() 0 8 2
A inverse_predicate_set() 0 8 2
A inverse() 0 3 1
1
"""Contains the class representing a triple node."""
2
3 1
from .abstractnode import register, AbstractNode
4 1
from .list import List
5
6 1
@register
7 1
class Triple(AbstractNode):
8
    """Represents a triple.
9
    https://github.com/ProjetPP/Documentation/blob/master/data-model.md#triple
10
    """
11 1
    __slots__ = ()
12 1
    _type = 'triple'
13 1
    _possible_attributes = ('subject', 'predicate', 'object', 'inverse_predicate')
14
15 1
    def _check_attributes(self, attributes):
16 1
        attributes['inverse_predicate'] = \
17
                attributes.get('inverse_predicate', List([]))
18 1
        super(Triple, self)._check_attributes(attributes)
19 1
        if not all(isinstance(x, AbstractNode) for x in attributes.values()):
20 1
            raise TypeError('One of Triple\'s constructor argument '
21
                            'is not an AbstractNode instance.')
22
23 1
    def as_dict(self):
24
        """Do not put inverse-predicate in the output dict if it
25
        is an empty list."""
26 1
        d = super(Triple, self).as_dict()
27 1
        if d['inverse-predicate']['type'] == 'list' and \
28
                d['inverse-predicate']['list'] == []:
29 1
            del d['inverse-predicate']
30 1
        return d
31
32 1
    @property
33
    def predicate_set(self):
34
        """Return a frozenset of predicates, extracting it from the list
35
        if it is a List node."""
36 1
        if isinstance(self.predicate, List):
37 1
            return frozenset(self.predicate.list)
38
        else:
39 1
            return frozenset({self.predicate})
40
41 1
    @property
42
    def inverse_predicate_set(self):
43
        """Return a frozenset of inverse predicates, extracting it from the list
44
        if it is a List node."""
45
        if isinstance(self.inverse_predicate, List):
46
            return frozenset(self.inverse_predicate.list)
47
        else:
48
            return frozenset({self.inverse_predicate})
49
50 1
    def inverse(self):
51 1
        return self.__class__(self.object, self.inverse_predicate,
52
                self.subject, self.predicate)
53