keyboa.base.Base.__init__()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 32
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 16
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 24
nop 8
dl 0
loc 32
ccs 16
cts 16
cp 1
crap 1
rs 9.304
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
# -*- coding:utf-8 -*-
2 1
"""
3
This module contains basic class with initial Keyboa data.
4
"""
5
# pylint: disable = C0116
6
7 1
from typing import Union, Iterable, Optional
8 1
from keyboa.button import Button
9 1
from keyboa.base_check import BaseCheck
10 1
from keyboa.constants import (
11
    BlockItems,
12
    CallbackDataMarker,
13
)
14
15
16 1
class Base(BaseCheck):  # pylint: disable = R0902
17
    """
18
    Base initial class for Keyboa
19
    """
20
21 1
    def __init__(  # pylint: disable = R0913
22
        self,
23
        items: BlockItems,
24
        items_in_row: int = None,
25
        front_marker: CallbackDataMarker = str(),
26
        back_marker: CallbackDataMarker = str(),
27
        copy_text_to_callback: Optional[bool] = True,
28
        alignment: Union[bool, Iterable] = None,
29
        alignment_reverse: Optional[bool] = None,
30
    ):
31 1
        self._items = None
32 1
        self.items = items
33
34 1
        self._items_in_row = None
35 1
        self.items_in_row = items_in_row
36
37 1
        self._front_marker = str()
38 1
        self.front_marker = front_marker
39
40 1
        self._back_marker = str()
41 1
        self.back_marker = back_marker
42
43 1
        self._copy_text_to_callback = True
44 1
        self.copy_text_to_callback = copy_text_to_callback
45
46 1
        self._alignment = None
47 1
        self.alignment = alignment
48
49 1
        self._alignment_reverse = None
50 1
        self.alignment_reverse = alignment_reverse
51
52 1
        self._items_sliced = None
53
54 1
    @property
55 1
    def items(self) -> BlockItems:
56 1
        return self._items
57
58 1
    @items.setter
59 1
    def items(self, items_value) -> None:
60 1
        if items_value is None or not items_value:
61 1
            raise ValueError("Items should not be None")
62 1
        if not isinstance(items_value, list):
63 1
            items_value = [
64
                items_value,
65
            ]
66
67 1
        self.is_all_items_in_limits(items_value)
68 1
        self.is_row_in_limits(items_value)
69 1
        self._items = items_value
70
71 1
    @property
72 1
    def items_in_row(self) -> int:
73 1
        return self._items_in_row
74
75 1
    @items_in_row.setter
76 1
    def items_in_row(self, items_in_row_value) -> None:
77 1
        self.is_items_in_row_limits(items_in_row_value)
78 1
        self._items_in_row = items_in_row_value
79
80 1
    @property
81 1
    def front_marker(self) -> CallbackDataMarker:
82 1
        return self._front_marker
83
84 1
    @front_marker.setter
85 1
    def front_marker(self, front_marker_value) -> None:
86 1
        Button.get_checked_marker(front_marker_value)
87 1
        self._front_marker = front_marker_value
88
89 1
    @property
90 1
    def back_marker(self) -> CallbackDataMarker:
91 1
        return self._back_marker
92
93 1
    @back_marker.setter
94 1
    def back_marker(self, back_marker_value) -> None:
95 1
        Button.get_checked_marker(back_marker_value)
96 1
        self._back_marker = back_marker_value
97
98 1
    @property
99 1
    def copy_text_to_callback(self) -> bool:
100 1
        return self._copy_text_to_callback
101
102 1
    @copy_text_to_callback.setter
103 1
    def copy_text_to_callback(self, copy_text_to_callback_value) -> None:
104 1
        if not isinstance(copy_text_to_callback_value, (bool, type(None))):
105 1
            raise TypeError(
106
                "'copy_text_to_callback' should have only bool or none type"
107
            )
108 1
        self._copy_text_to_callback = copy_text_to_callback_value
109
110 1
    @property
111 1
    def alignment(self) -> Union[bool, Iterable]:
112
113 1
        return self._alignment
114
115 1
    @alignment.setter
116 1
    def alignment(self, alignment_value) -> None:
117 1
        if alignment_value is None or isinstance(alignment_value, bool):
118 1
            self._alignment = alignment_value
119 1
            return
120 1
        self.is_alignment_iterable(alignment_value)
121 1
        self.is_alignment_in_limits(alignment_value)
122 1
        self._alignment = alignment_value
123
124 1
    @property
125 1
    def alignment_reverse(self) -> bool:
126 1
        return self._alignment_reverse
127
128 1
    @alignment_reverse.setter
129 1
    def alignment_reverse(self, alignment_reverse_value) -> None:
130
        self._alignment_reverse = alignment_reverse_value
131