This commit is contained in:
2025-10-03 18:35:32 +03:00
parent 3eb7f2e398
commit ab5710ba22
6 changed files with 178 additions and 27 deletions

View File

@@ -0,0 +1,17 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Тест BoolExtension" type="tests" factoryName="Autodetect">
<module name="anb_python_components" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/tests/extensions" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="_new_additionalArguments" value="&quot;&quot;" />
<option name="_new_target" value="&quot;$PROJECT_DIR$/tests/extensions/bool_extension_test.py&quot;" />
<option name="_new_targetType" value="&quot;PATH&quot;" />
<method v="2" />
</configuration>
</component>

View File

@@ -9,6 +9,9 @@ class BoolExtension:
"""
def __init__(self):
"""
Инициализация расширения.
"""
pass
@staticmethod
@@ -37,30 +40,30 @@ class BoolExtension:
for expression in expressions:
# - если аргумент не является типом правда/ложь
if not isinstance(expression, bool):
# -- если указано действие при не булевом значении - игнорирование
if if_not_bool == NotBoolAction.IGNORE:
# - игнорируем аргумент и продолжаем цикл
continue
match if_not_bool:
# -- если указано действие при не булевом значении - игнорирование
case NotBoolAction.IGNORE:
# - игнорируем аргумент и продолжаем цикл
continue
# -- если указано действие при не булевом значении - считать как истинное значение
if if_not_bool == NotBoolAction.IT_TRUE:
# --- добавляем True в массив проверяемых аргументов
check_array.append(True)
# --- и продолжаем цикл
continue
# -- если указано действие при не булевом значении - считать как истинное значение
case NotBoolAction.IT_TRUE:
# --- добавляем True в массив проверяемых аргументов
check_array.append(True)
# --- и продолжаем цикл
continue
# -- если указано действие при не булевом значении - считать как ложное значение
if if_not_bool == NotBoolAction.IT_TRUE:
# --- добавляем False в массив проверяемых аргументов
check_array.append(False)
# --- и продолжаем цикл
continue
# -- если указано действие при не булевом значении - выбросить исключение
if if_not_bool == NotBoolAction.RAISE:
# --- то вызываем исключение
raise ValueError(f"{expression} не является булевым значением")
# -- если указано действие при не булевом значении - считать как ложное значение
case NotBoolAction.IT_FALSE:
# --- добавляем False в массив проверяемых аргументов
check_array.append(False)
# --- и продолжаем цикл
continue
# -- если указано действие при не булевом значении - выбросить исключение
case NotBoolAction.RAISE:
# --- то вызываем исключение
raise ValueError(f"{expression} не является булевым значением")
else:
# - иначе добавляем аргумент в массив проверяемых аргументов
check_array.append(expression)
@@ -72,10 +75,14 @@ class BoolExtension:
return len(filtered)
@staticmethod
def any_true(expressions: list[bool]) -> int:
def any_true(expressions: list[bool]) -> bool:
"""
Возвращает количество истинных значений в списке аргументов.
:param expressions: Список аргументов.
:return: Количество истинных значений в списке аргументов.
Проверяет, есть ли хотя бы один истинный аргумент.
:param expressions: Выражения.
:return: Есть ли хотя бы один истинный аргумент, то вернется True, иначе False.
"""
return 0 if len(expressions) == 0 else BoolExtension.true_count(expressions, NotBoolAction.IGNORE)
# Получаем количество истинных значений
true_count = BoolExtension.true_count(expressions, NotBoolAction.IGNORE)
# Если количество истинных значений больше нуля, возвращаем True, иначе False
return True if true_count > 0 else False

View File

@@ -0,0 +1,20 @@
# Перечисление `NotBoolAction`
Перечисление `NotBoolAction` предназначено для управления поведением программы в ситуациях, когда ожидается получение
булевого значения, однако получено другое. Оно описывает возможные стратегии реакции на такую ситуацию, что даёт
разработчику большую свободу выбора поведения системы.
## Возможные варианты реакций:
- **IGNORE**: Игнорировать ситуацию и продолжить выполнение программы.
- **IT_TRUE**: Рассматривать любое небулевое значение как истину (True).
- **IT_FALSE**: Рассматривать любое небулевое значение как ложь (False).
- **RAISE**: Генерировать исключение, сигнализируя о критической ошибке.
## Основная информация
- **Имя файла**: anb_python_components\enums\not_bool_action.py
- **Автор**: Александр Бабаев
- **Версия**: 1.0.0
- **Дата начала поддержки**: с версии 1.0
[На главную](../../index.md)

View File

@@ -0,0 +1,79 @@
# Класс `BoolExtension`
Этот класс предназначен для предоставления расширенных возможностей работы с булевыми значениями в Python. Класс
обеспечивает удобные способы конвертации булевых значений в строки, подсчета количества истинных элементов в списках и
обнаружения наличия хотя бы одного истинного элемента среди списка выражений.
## Основная информация
- **Имя файла**: anb_python_components/extensions/bool_extension.py
- **Автор**: Александр Бабаев
- **Версия**: 1.0.0
- **Дата начала поддержки**: с версии 1.0
## Атрибуты и методы класса
### Метод `to_str`
Конвертирует булево значение в строку, используя кастомизированные обозначения для значений `True` и `False`.
**Параметры**:
- `b`: Булево значение, которое необходимо преобразовать.
- `if_true`: Значение, которое возвращается, если булево значение равно `True` (по умолчанию "True").
- `if_false`: Значение, которое возвращается, если булево значение равно `False` (по умолчанию "False").
`Пример использования`:
```python
from anb_python_components.extensions.bool_extension import BoolExtension
print(BoolExtension.to_str(True)) # True
print(BoolExtension.to_str(False, if_false="Нет")) # Нет
```
### Метод `true_count`
Подсчитывает количество истинных значений в списке выражений, предлагая разные подходы к обработке не-булевых значений.
**Параметры**:
- `expressions`: Список булевых выражений.
- `if_not_bool`: Параметр, определяющий стратегию обработки небулевых значений. По умолчанию игнорируются.
Стратегии обработки небулевых значений определяются перечислением [`NotBoolAction`](../enums/not_bool_action.md).
**Пример использования**:
```python
from anb_python_components.enums.not_bool_action import NotBoolAction
from anb_python_components.extensions.bool_extension import BoolExtension
expressions = [True, False, "Некорректное значение"]
count = BoolExtension.true_count(expressions, NotBoolAction.IT_TRUE)
print(count) # 2
```
### Метод `any_true`
Проверяет, присутствует ли хотя бы одно истинное выражение в списке.
**Параметры**:
- `expressions`: Список булевых выражений.
**Пример использования**:
```python
from anb_python_components.extensions.bool_extension import BoolExtension
expressions = [False, False, True]
result = BoolExtension.any_true(expressions)
print(result) # True
```
## Заключение
Класс `BoolExtension` существенно облегчает работу с булевыми значениями, предоставляя удобную обработку нестандартных
ситуаций и простое управление потоком логики в приложении.
[На главную](../../index.md)

View File

@@ -8,9 +8,16 @@
## Описание интерфейсов, классов и перечислений:
### Перечисления
**Расположение модулей**: anb_python_components\enums\*
- [перечисление `NotBoolAction`](class_desc/enums/not_bool_action.md)
### Расширения стандартных типов
**Расположение модулей**: anb_python_components\extensions\*
- [класс `StringExtensionConstants`](class_desc/extensions/string_extension_constant.md)
- [класс `StringExtension`](class_desc/extensions/string_extension.md)
- [класс `StringExtension`](class_desc/extensions/string_extension.md)
- [класс `BoolExtension`](class_desc/extensions/bool_extension.md)

View File

@@ -0,0 +1,21 @@
# string_extension_test.py
import unittest
from anb_python_components.extensions.bool_extension import *
class BoolExtensionTest(unittest.TestCase):
def test_to_str(self):
self.assertEqual(BoolExtension.to_str(True, "да", "нет"), "да")
self.assertEqual(BoolExtension.to_str(False, "да", "нет"), "нет")
def test_true_count(self):
self.assertEqual(BoolExtension.true_count([False, True, False, True, True, False, False]), 3)
def test_any_true(self):
self.assertTrue(BoolExtension.any_true([False, True, False, True, True, False, False]))
if __name__ == '__main__':
unittest.main()