ResultException.query()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 8
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 8
rs 10
c 0
b 0
f 0
cc 1
nop 1
1
import os
2
3
4
class ResultException(RuntimeError):
5
    """
6
    Exception for situations where the result (set) of a query does not meet the expectations. Either a mismatch between
7
    the actual and expected numbers of rows selected or an unexpected NULL value was selected.
8
    """
9
10
    # ------------------------------------------------------------------------------------------------------------------
11
    def __init__(self, expected_row_count: str, actual_row_count: int, query: str):
12
        """
13
        Object constructor.
14
15
        :param str expected_row_count: The expected row count.
16
        :param int actual_row_count: The actual row count.
17
        :param str query: The query.
18
        """
19
        RuntimeError.__init__(self, self.__message(expected_row_count, actual_row_count, query))
20
21
        self._expected_row_count: str = expected_row_count
22
        """
23
        The expected row count.
24
        """
25
26
        self._actual_row_count: int = actual_row_count
27
        """
28
        The actual row count.
29
        """
30
31
        self._query: str = query
32
        """
33
        The query.
34
        """
35
36
    # ------------------------------------------------------------------------------------------------------------------
37
    @property
38
    def expected_row_count(self) -> str:
39
        """
40
        The expected row count.
41
42
        :rtype: str
43
        """
44
        return self._expected_row_count
45
46
    # ------------------------------------------------------------------------------------------------------------------
47
    @property
48
    def actual_row_count(self) -> int:
49
        """
50
        The actual row count.
51
52
        :rtype: str
53
        """
54
        return self._actual_row_count
55
56
    # ------------------------------------------------------------------------------------------------------------------
57
    @property
58
    def query(self) -> str:
59
        """
60
        The query.
61
62
        :rtype: str
63
        """
64
        return self._query
65
66
    # ------------------------------------------------------------------------------------------------------------------
67
    @staticmethod
68
    def __message(expected_row_count: str, actual_row_count: int, query: str) -> str:
69
        """
70
        Composes the exception message.
71
72
        :param str expected_row_count: The expected row count.
73
        :param int actual_row_count: The actual row count.
74
        :param str query: The query.
75
76
        :rtype: str
77
        """
78
        query = query.strip()
79
80
        message = 'Wrong number of rows selected'
81
        message += os.linesep
82
        message += 'Expected number of rows: {}'.format(expected_row_count)
83
        message += os.linesep
84
        message += 'Actual number of rows: {}'.format(actual_row_count)
85
        message += os.linesep
86
        message += 'Query:'
87
        message += os.linesep if os.linesep in query else ' '
88
        message += query
89
90
        return message
91
92
# ----------------------------------------------------------------------------------------------------------------------
93