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

Complexity

Conditions 1

Size

Total Lines 33
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 16
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 25
nop 9
dl 0
loc 33
ccs 16
cts 16
cp 1
crap 1
rs 9.28
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__(
22
        self,
23
        items: BlockItems,
24
        *,
25
        items_in_row: int = None,
26
        front_marker: CallbackDataMarker = "",
27
        back_marker: CallbackDataMarker = "",
28
        copy_text_to_callback: Optional[bool] = True,
29
        alignment: Union[bool, Iterable] = None,
30
        alignment_reverse: Optional[bool] = None,
31 1
    ) -> None:
32 1
        self._items = None
33
        self.items = items
34 1
35 1
        self._items_in_row = None
36
        self.items_in_row = items_in_row
37 1
38 1
        self._front_marker = str()
39
        self.front_marker = front_marker
40 1
41 1
        self._back_marker = str()
42
        self.back_marker = back_marker
43 1
44 1
        self._copy_text_to_callback = True
45
        self.copy_text_to_callback = copy_text_to_callback
46 1
47 1
        self._alignment = None
48
        self.alignment = alignment
49 1
50 1
        self._alignment_reverse = None
51
        self.alignment_reverse = alignment_reverse
52 1
53
        self._items_sliced = None
54 1
55 1
    @property
56 1
    def items(self) -> BlockItems:
57
        return self._items
58 1
59 1
    @items.setter
60 1
    def items(self, items_value) -> None:
61 1
        if items_value is None or not items_value:
62 1
            raise ValueError("Items should not be None")
63 1
        if not isinstance(items_value, list):
64
            items_value = [
65
                items_value,
66
            ]
67 1
68 1
        self.is_all_items_in_limits(items_value)
69 1
        self.is_row_in_limits(items_value)
70
        self._items = items_value
71 1
72 1
    @property
73 1
    def items_in_row(self) -> int:
74
        return self._items_in_row
75 1
76 1
    @items_in_row.setter
77 1
    def items_in_row(self, items_in_row_value) -> None:
78 1
        self.is_items_in_row_limits(items_in_row_value)
79
        self._items_in_row = items_in_row_value
80 1
81 1
    @property
82 1
    def front_marker(self) -> CallbackDataMarker:
83
        return self._front_marker
84 1
85 1
    @front_marker.setter
86 1
    def front_marker(self, front_marker_value) -> None:
87 1
        Button.get_checked_marker(front_marker_value)
88
        self._front_marker = front_marker_value
89 1
90 1
    @property
91 1
    def back_marker(self) -> CallbackDataMarker:
92
        return self._back_marker
93 1
94 1
    @back_marker.setter
95 1
    def back_marker(self, back_marker_value) -> None:
96 1
        Button.get_checked_marker(back_marker_value)
97
        self._back_marker = back_marker_value
98 1
99 1
    @property
100 1
    def copy_text_to_callback(self) -> bool:
101
        return self._copy_text_to_callback
102 1
103 1
    @copy_text_to_callback.setter
104 1
    def copy_text_to_callback(self, copy_text_to_callback_value) -> None:
105 1
        if not isinstance(copy_text_to_callback_value, (bool, type(None))):
106
            raise TypeError(
107
                "'copy_text_to_callback' should have only bool or none type"
108 1
            )
109
        self._copy_text_to_callback = copy_text_to_callback_value
110 1
111 1
    @property
112
    def alignment(self) -> Union[bool, Iterable]:
113 1
114
        return self._alignment
115 1
116 1
    @alignment.setter
117 1
    def alignment(self, alignment_value) -> None:
118 1
        if alignment_value is None or isinstance(alignment_value, bool):
119 1
            self._alignment = alignment_value
120 1
            return
121 1
        self.is_alignment_iterable(alignment_value)
122 1
        self.is_alignment_in_limits(alignment_value)
123
        self._alignment = alignment_value
124 1
125 1
    @property
126 1
    def alignment_reverse(self) -> bool:
127
        return self._alignment_reverse
128 1
129 1
    @alignment_reverse.setter
130 1
    def alignment_reverse(self, alignment_reverse_value) -> None:
131
        self._alignment_reverse = alignment_reverse_value
132