Triple.inverse_predicate_set()   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 3.6875

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
c 1
b 0
f 0
dl 0
loc 8
ccs 1
cts 4
cp 0.25
crap 3.6875
rs 9.4285
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