Completed
Branch sils/matlab (a0e7c4)
by Lasse
01:55
created

coalib.results.LineDiff.change()   B

Complexity

Conditions 5

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 5
dl 0
loc 10
rs 8.5455
1
from coalib.misc.Decorators import generate_repr
2
3
4
@generate_repr('change', 'delete', 'add_after')
5
class LineDiff:
6
    """
7
    A LineDiff holds the difference between two strings.
8
    """
9
10
    def __init__(self, change=False, delete=False, add_after=False):
11
        """
12
        Creates a new LineDiff object. Note that a line cannot be
13
        changed _and_ deleted at the same time.
14
15
        :param change: False or a tuple (original, replacement)
16
        :param delete: True/False
17
        :param add_after: False or a list of lines to append after this ones
18
        """
19
        self._delete = False  # change property setter will need this value
20
                              # for assertion
21
        self.change = change
22
        self.delete = delete
23
        self.add_after = add_after
24
25
    def __eq__(self, other):
26
        return (self.change == other.change and
27
                self.delete == other.delete and
28
                self.add_after == other.add_after)
29
30
    @property
31
    def change(self):
32
        return self._change
33
34
    @change.setter
35
    def change(self, value):
36
        if value is not False and not isinstance(value, tuple):
37
            raise TypeError("change must be False or a tuple with an original "
38
                            "and a replacement string.")
39
        if value is not False and self.delete is not False:
40
            raise AssertionError("A line cannot be changed and deleted "
41
                                 "at the same time.")
42
43
        self._change = value
44
45
    @property
46
    def delete(self):
47
        return self._delete
48
49
    @delete.setter
50
    def delete(self, value):
51
        if not isinstance(value, bool):
52
            raise TypeError("delete can only be a boolean value.")
53
        if value is not False and self.change is not False:
54
            raise AssertionError("A line cannot be changed and deleted "
55
                                 "at the same time.")
56
57
        self._delete = value
58
59
    @property
60
    def add_after(self):
61
        return self._add_after
62
63
    @add_after.setter
64
    def add_after(self, value):
65
        if value is not False and not isinstance(value, list):
66
            raise TypeError(
67
                "add_after must be False or a list of lines to append.")
68
69
        self._add_after = value if value != [] else False
70