This commit is contained in:
2025-10-05 23:11:19 +03:00
parent 4cbb69181c
commit b20f18788d
24 changed files with 2275 additions and 12 deletions

View File

@@ -0,0 +1,379 @@
# Класс `ActionState`
Класс `ActionState` предназначен для отслеживания состояния выполняемых действий в программе, фиксируя изменения,
происходящие в процессе выполнения, а также накапливая сообщения о событиях, успехах и ошибках. Он служит контейнером
для сохранения промежуточных состояний и обеспечивает простой интерфейс взаимодействия с ними.
## Основная информация
- **Имя файла**: anb_python_components\classes\action_state.py
- **Автор**: Александр Бабаев
- **Версия**: 1.0.0
- **Дата начала поддержки**: с версии 1.0
## Атрибуты и методы класса
### Атрибуты
- **`value: T`**: Хранит основное значение состояния (может быть любым объектом).
- **`__messages: list[ActionStateMessage]`**: Внутренний список сообщений, накопленных в процессе выполнения действия.
### Конструктор (`__init__`)
Принимает необязательное значение по умолчанию, которое устанавливается в качестве основного значения состояния.
**Параметры**:
- `default: T | None = None`: Значение по умолчанию.
**Пример использования**:
```python
from anb_python_components.classes.action_state import ActionState
state = ActionState[bool](False)
```
### Основные методы
#### Метод `add_message`
Добавляет новое сообщение в список сообщений.
**Параметры**:
- `message: ActionStateMessage`: Модель сообщения.
**Пример использования**:
```python
from anb_python_components.classes.action_state import ActionState, ActionStateMessage, MessageType
state = ActionState[bool](False)
state.add_message(ActionStateMessage(MessageType.INFO, "Процесс запущен."))
```
---
#### Метод `add`
Удобный способ добавления сообщений, принимающий непосредственно тип сообщения и его текст.
**Параметры**:
- `message_type: MessageType`: Тип сообщения.
- `message: str`: Сообщение.
- `flags: dict[str, bool] | None = None`: Флаги сообщения (необязательны).
**Пример использования**:
```python
from anb_python_components.classes.action_state import ActionState, MessageType
state = ActionState[bool](False)
state.add(MessageType.WARNING, "Скорость низкая.")
```
---
### Метод `add_info`
Добавляет информационное сообщение в список состояний.
**Параметры**:
- `message: str`: Текст самого информационного сообщения.
- `flags: dict[str, bool] | None = None`: Дополнительные мета-данные или признаки сообщения (например, отметка о
важности или срочности).
**Пример использования**:
```python
from anb_python_components.classes.action_state import ActionState
state = ActionState[bool](False)
state.add_info("Начали загрузку данных.")
```
---
### Метод `add_warning`
Добавляет предупреждение в список состояний.
**Параметры**:
- `message: str`: Текст предупреждения.
- `flags: dict[str, bool] | None = None`: Дополнительные флаги для конкретного предупреждения.
**Пример использования**:
```python
from anb_python_components.classes.action_state import ActionState
state = ActionState[bool](False)
state.add_warning("Не хватает оперативной памяти.")
```
---
### Метод `add_error`
Добавляет сообщение об ошибке в список состояний.
**Параметры**:
- `message: str`: Текст сообщения об ошибке.
- `flags: dict[str, bool] | None = None`: Дополнительные флаги для конкретной ошибки.
**Пример использования**:
```python
from anb_python_components.classes.action_state import ActionState
state = ActionState[bool](False)
state.add_error("Не удалось установить соединение с базой данных.")
```
---
#### Метод `add_state`
Объединяет текущее состояние с другим состоянием, перенося его сообщения.
**Параметры**:
- `state: ActionState`: Другое сообщение о состоянии.
- `clear_all_before: bool = False`: Очистить список перед добавлением (по умолчанию - False).
**Пример использования**:
```python
from anb_python_components.classes.action_state import ActionState
state = ActionState[bool](False)
another_state = ActionState()
another_state.add_info("Дополнительная информация.")
state.add_state(another_state)
```
---
#### Метод `get_messages`
Возвращает список сообщений, возможно применяя фильтр по условию.
**Параметры**:
- `predicate: Callable[[ActionStateMessage], bool] | None = None`: Условие выборки.
**Метод возвращает** `list[ActionStateMessage]`: список сообщений.
**Пример использования**:
```python
from anb_python_components.classes.action_state import ActionState, MessageType
state = ActionState[bool](False)
errors = state.get_messages(lambda m: m.message_type == MessageType.ERROR)
```
---
### Метод `get_string_messages`
Возвращает объединённую строку сообщений, фильтруя их по определённому критерию (предикат). Полезен для визуализации
сообщений в логах или отчётах.
**Параметры**:
- `predicate: Callable[[ActionStateMessage], bool] | None = None`: Функциональный предикат для фильтрации сообщений
(например, показывать только ошибки или предупреждения).
- `separator: str = "\n"`: Разделитель между сообщениями (по умолчанию новая строка).
**Метод возвращает** `str`: строка сообщений.
**Пример использования**:
```python
from anb_python_components.classes.action_state import ActionState, MessageType
state = ActionState[bool](False)
state.add_error("Ошибка в сети.")
state.add_warning("Медленная скорость загрузки.")
filtered_messages = state.get_string_messages(predicate = lambda msg: msg.message_type == MessageType.ERROR)
print(filtered_messages) # "Ошибка в сети."
```
---
### Метод `has_infos`
Проверяет, имеются ли в списке сообщения информационного типа (`INFO`).
**Метод возвращает** `bool`: True, если есть, иначе False.
**Пример использования**:
```python
from anb_python_components.classes.action_state import ActionState
state = ActionState[bool](False)
state.add_info("Процесс завершён.")
if state.has_infos():
print("Имеются информационные сообщения.") # Будет выведено
```
---
### Метод `has_warnings`
Проверяет, присутствуют ли в списке предупреждающие сообщения (`WARNING`).
**Метод возвращает** `bool`: True, если есть, иначе False.
**Пример использования**:
```python
from anb_python_components.classes.action_state import ActionState
state = ActionState[bool](False)
state.add_warning("Недостаточно памяти.")
if state.has_warnings():
print("Есть предупреждающие сообщения.") # Будет выведено
```
---
### Метод `has_errors`
Проверяет, существуют ли в списке сообщения об ошибках (`ERROR`).
**Метод возвращает** `bool`: True, если есть, иначе False.
**Пример использования**:
```python
from anb_python_components.classes.action_state import ActionState
state = ActionState[bool](False)
state.add_error("Время ожидания истекло.")
if state.has_errors():
print("Присутствуют сообщения об ошибках.") # Будет выведено
```
---
### Метод `clear`
Очищает список сообщений, возможно применяя условие фильтрации.
**Параметры**:
- `predicate: Callable[[ActionStateMessage], bool] | None = None`: Функциональный предикат для фильтрации сообщений.
**Пример использования**:
```python
from anb_python_components.classes.action_state import ActionState, MessageType
state = ActionState[bool](False)
state.clear(lambda m: m.message_type == MessageType.INFO)
```
---
### Метод `is_success`
Проверяет, было ли состояние успешным, основываясь на наличии ошибок и предупреждений.
**Параметры**:
- `ignore_warnings: bool = False`: Игнорировать предупреждения (по умолчанию - False).
**Метод возвращает** `bool`: True, если успешно, иначе False.
**Пример использования**:
```python
from anb_python_components.classes.action_state import ActionState
state = ActionState[bool](False)
if state.is_success():
print("Операция прошла успешно.")
```
---
### Метод `count`
Метод `count` позволяет получать количество сообщений в списке, потенциально применяя дополнительное условие
фильтрации (предикат). Таким образом, можно точно подсчитать число нужных сообщений (например, ошибок, предупреждений
или общих записей).
**Параметры**:
- **`predicate: Callable[[ActionStateMessage], bool] | None = None`**: Опциональный предикат-функция, которая получает
каждое сообщение и решает, включать ли его в итоговый счётчик. Если предикат не указан, учитываются все сообщения.
**Метод возвращает** `int`: количество сообщений.
**Пример использования**:
Предположим, мы хотим посчитать количество сообщений каждого типа:
```python
from anb_python_components.classes.action_state import ActionState, MessageType
state = ActionState[bool](False)
state.add_info("Данные получены.")
state.add_warning("Память почти заполнена.")
state.add_error("Не удаётся подключиться к серверу.")
# Посчитать общее количество сообщений
total_messages = state.count()
print(total_messages) # Вывод: 3
# Посчитать количество ошибок
error_count = state.count(predicate = lambda msg: msg.message_type == MessageType.ERROR)
print(error_count) # Вывод: 1
# Посчитать количество информационных сообщений
info_count = state.count(predicate = lambda msg: msg.message_type == MessageType.INFO)
print(info_count) # Вывод: 1
```
### Вспомогательные статичные методы для фильтрации сообщений
Эти методы предоставляют готовые предикаты для извлечения конкретных типов сообщений.
- `get_string_error_only() -> Callable[[ActionStateMessage], bool]`: Возвращает предикат для фильтрации только сообщений
об ошибках.
- `get_string_error_and_warning() -> Callable[[ActionStateMessage], bool]`: Возвращает предикат для фильтрации сообщений
об ошибках и предупреждениях.
- `get_string_all() -> Callable[[ActionStateMessage], bool]`: Возвращает предикат, включающий все сообщения (без
фильтрации).
**Примеры использования**:
```python
from anb_python_components.classes.action_state import ActionState
state = ActionState[bool](False)
# Получить только ошибки
only_errors = state.get_string_messages(predicate = ActionState.get_string_error_only(), separator = ", ")
# Все сообщения
all_messages = state.get_string_messages(predicate = ActionState.get_string_all())
```
## Заключение
Класс `ActionState` играет ключевую роль в мониторинге и управлении состояниями в приложениях, позволяя контролировать
ход выполнения операций и оперативно реагировать на возникающие события и ошибки.
[На главную](../../index.md)

View File

@@ -0,0 +1,26 @@
# Перечисление `MessageType`
Перечисление `MessageType` предназначено для классификации сообщений в программном коде. Оно помогает упорядочить типы
уведомлений и отчетов, выводимых системой. Каждый элемент перечисления обозначает определенный статус или категорию
сообщения, облегчая чтение и интерпретацию результатов выполнения программ.
## Основная информация
- **Имя файла**: anb_python_components\enums\message_type.py
- **Автор**: Александр Бабаев
- **Версия**: 1.0.0
- **Дата начала поддержки**: с версии 1.0
## Элементы перечисления
- **SUCCESS**: Означает успешное завершение какого-то процесса или операции.
- **INFO**: Информационные уведомления общего характера.
- **WARNING**: Предупредительные сообщения, предупреждающие о потенциальных проблемах.
- **ERROR**: Сигнал о произошедшей ошибке или сбое в выполнении программы.
## Заключение
Перечисление `MessageType` способствует улучшению организации логики сообщений в приложениях, обеспечивая понятное
разделение на категории, что снижает риск путаницы и улучшает диагностику и тестирование.
[На главную](../../index.md)

View File

@@ -0,0 +1,92 @@
# Класс `GUIDExtension`
Класс `GUIDExtension` предназначен для расширения функциональности работы с глобальным уникальным идентификатором
(GUID). Он предоставляет дополнительные методы для генерации новых GUID, проверки их валидности, парсинга из строк и
сравнения между собой.
## Основная информация
- **Имя файла**: anb_python_components\extensions\guid_extension.py
- **Автор**: Александр Бабаев
- **Версия**: 1.0.0
- **Дата начала поддержки**: с версии 1.0
## Атрибуты и методы класса
### Метод `generate`
Генерирует новый случайный GUID, следуя стандартам RFC 4122. Новый GUID создается с использованием криптографически
стойких алгоритмов генерации чисел.
**Пример использования**:
```python
from anb_python_components.extensions.guid_extension import GUIDExtension
new_guid = GUIDExtension.generate()
print(new_guid) # Пример: 123e4567-e89b-12d3-a456-426655440000
```
### Метод `is_equal`
Проверяет равенство двух GUID, поддерживая передачу обоих как строк, так и объектов типа `GUID`.
**Пример использования**:
```python
from anb_python_components.extensions.guid_extension import GUIDExtension
from anb_python_components.types.guid import GUID
guid1 = "123e4567-e89b-12d3-a456-426655440000"
guid2 = GUID("123e4567-e89b-12d3-a456-426655440000")
equal = GUIDExtension.is_equal(guid1, guid2)
print(equal) # True
```
### Метод `validate`
Проверяет, соответствует ли строка или объект правильному формату GUID.
**Пример использования**:
```python
from anb_python_components.extensions.guid_extension import GUIDExtension
valid = GUIDExtension.validate("123e4567-e89b-12d3-a456-426655440000")
print(valid) # True
```
### Метод `is_invalid_or_empty`
Проверяет, является ли GUID недействительным или пустым.
**Пример использования**:
```python
from anb_python_components.extensions.guid_extension import GUIDExtension
invalid = GUIDExtension.is_invalid_or_empty("invalid-guid")
print(invalid) # True
```
### Метод `parse`
Парсит строку в GUID, возвращая объект типа `GUID`. Может вернуть пустой GUID, если передано недопустимое значение.
**Пример использования**:
```python
from anb_python_components.extensions.guid_extension import GUIDExtension
parsed_guid = GUIDExtension.parse("123e4567-e89b-12d3-a456-426655440000")
print(parsed_guid) # 123e4567-e89b-12d3-a456-426655440000
```
## Заключение
Класс `GUIDExtension` позволяет создать надежную систему работы с GUID в Python-проектах, облегчая генерацию, проверку и
сравнение идентификаторов. Благодаря этому обеспечивается дополнительная защита от возможных проблем с передачей
некорректных данных.
[На главную](../../index.md)

View File

@@ -0,0 +1,55 @@
# Класс модели `ActionStateMessage`
Модель `ActionStateMessage` предназначена для формирования сообщений о состоянии выполненных действий в рамках проекта.
Она содержит основную информацию о результате выполненного действия, включая тип сообщения, текстовое описание и флаги (
мета-данные).
## Основная информация
- **Имя файла**: anb_python_components\models\action_state_message.py
- **Автор**: Александр Бабаев
- **Версия**: 1.0.0
- **Дата начала поддержки**: с версии 1.0
## Атрибуты и конструктор
### Конструктор (`__init__`)
Принимает три необязательных параметра:
- **`message_type`**: Тип сообщения, использующий перечисление `MessageType` (по умолчанию `INFO`).
- **`message`**: Сам текст сообщения (по умолчанию пустая строка).
- **`flags`**: Дополнительные метаданные или признаки сообщения (по умолчанию пустой словарь).
**Пример использования конструктора**:
```python
from anb_python_components.models.action_state_message import ActionStateMessage, MessageType
state_message = ActionStateMessage(MessageType.SUCCESS, "Действие выполнено успешно.", {"has_errors": False})
```
## Пример полного использования
Вот пример использования класса `ActionStateMessage`:
```python
from anb_python_components.models.action_state_message import ActionStateMessage, MessageType
# Создание сообщения успешного действия
success_message = ActionStateMessage(MessageType.SUCCESS, "Операция завершилась успешно.")
# Создание сообщения с дополнительной информацией
info_message = ActionStateMessage(MessageType.INFO, "Начало обработки данных.", {"in_progress": False})
# Печать сообщений
print(success_message.message) # Операция завершилась успешно.
print(info_message.message) # Начало обработки данных.
```
## Заключение
Модель `ActionStateMessage` полезна для унификации способов оповещения пользователей или администратора о ходе
выполнения тех или иных процессов. Четкая структура сообщений облегчает чтение и дальнейшее развитие приложения.
[На главную](../../index.md)

View File

@@ -0,0 +1,67 @@
# Класс `GUID`
Класс `GUID` представляет реализацию уникального глобального идентификатора (Global Unique Identifier), широко
применяемого в разработке программного обеспечения для уникальной идентификации сущностей. Данный класс добавляет
дополнительную безопасность и контроль правильности передачи и обработки уникальных идентификаторов.
## Основная информация
- **Имя файла**: anb_python_components\types\guid.py
- **Автор**: Александр Бабаев
- **Версия**: 1.0.0
- **Дата начала поддержки**: с версии 1.0
## Атрибуты и методы класса
### Свойства и конструкторы
- **Атрибут `EMPTY`**: Представляет пустое значение GUID (стандартное значение для незаданных GUID).
- **Конструктор (`__init__`)**: Осуществляет создание нового экземпляра GUID, принимает либо строку, либо другой
экземпляр GUID и проверяет правильность передаваемых данных.
### Специальные методы
- **Метод `__str__`**: Предоставляет текстовое представление текущего GUID.
- **Метод `__eq__`**: Определяет правило сравнения двух GUID друг с другом.
### Вспомогательные методы
- **Метод `validate_str`**: Проверяет строку на соответствие стандартному формату GUID (регулярные выражения
используются для проверки синтаксиса).
## Исключения
- **Ошибка `WrongTypeException`**: Генератор исключений срабатывает при передаче неверного типа данных или нарушении
формата GUID.
## Пример использования
Создание экземпляра GUID:
```python
from anb_python_components.types.guid import GUID
my_guid = GUID("123e4567-e89b-12d3-a456-426655440000")
print(my_guid) # 123e4567-e89b-12d3-a456-426655440000
```
Сравнение двух GUID:
```python
from anb_python_components.types.guid import GUID
first_guid = GUID("123e4567-e89b-12d3-a456-426655440000")
second_guid = GUID("00000000-0000-0000-0000-000000000000")
if first_guid == second_guid:
print("GUID совпадают")
else:
print("GUID различаются")
```
## Заключение
Класс `GUID` позволяет грамотно управлять уникальным идентификатором, обеспечивая автоматическое преобразование и
проверку корректности данных. Такой подход минимизирует вероятность ошибок и улучшает надежность приложения.
[На главную](../../index.md)

View File

@@ -0,0 +1,165 @@
# Класс `TwoDimSize`
Класс `TwoDimSize` предназначен для работы с двумерными размерами, такими как ширина и высота. Он предоставляет ряд
инструментов для эффективного управления и обработки размеров, включая ограничение минимальных/максимальных границ,
арифметические операции и удобное представление в строковом виде.
## Основная информация
- **Имя файла**: anb_python_components\types\two_dim_size.py
- **Автор**: Александр Бабаев
- **Версия**: 1.0.0
- **Дата начала поддержки**: с версии 1.0
## Атрибуты и методы класса
### Конструктор (`__init__`)
Принимает начальные значения ширины и высоты, а также минимальные и максимальные границы, если требуется ограничить
диапазон значений.
**Параметры**:
- `width: int`: Начальная ширина (по умолчанию 0).
- `height: int`: Начальная высота (по умолчанию 0).
- `min_width: int | None = 0`, `min_height: int | None = 0`: Минимальное значение ширины и высоты (по умолчанию, `0`).
При значении `None` считаются неограниченными.
- `max_width: int | None = None`, `max_height: int | None = None`: Максимальное значение ширины и высоты (по умолчанию,
`None`). При значении `None` считаются неограниченными.
**Пример использования**:
```python
from anb_python_components.types.two_dim_size import TwoDimSize
size = TwoDimSize(800, 600, min_width = 400, max_width = 1200)
```
### Свойства класса
Свойства позволяют гибко устанавливать и считывать значения ширины и высоты, автоматически соблюдая введённые
ограничения. Рассмотрим подробнее каждый из них.
#### Свойство `width`
Управляет значением ширины, выполняя необходимую проверку ограничений при установке.
**Пример использования**:
```python
from anb_python_components.types.two_dim_size import TwoDimSize
size = TwoDimSize(min_width = 400)
size.width = 500
print(size.width) # Вывод: 500
size.width = 300
print(size.width) # Вывод: 400
```
#### Свойство `height`
Аналогично свойствам ширины, управляет значением высоты.
**Пример использования**:
```python
from anb_python_components.types.two_dim_size import TwoDimSize
size = TwoDimSize(max_height = 1000)
size.height = 200
print(size.height) # Вывод: 200
size.height = 1200
print(size.height) # Вывод: 1000
```
#### Свойства границ (`min_width`, `max_width`, `min_height`, `max_height`)
Эти свойства отвечают за изменение граничных значений ширины и высоты, контролируя их согласованность изменений
(например, максимальная граница не должна быть меньше минимальной).
**Пример использования**:
```python
from anb_python_components.types.two_dim_size import TwoDimSize
size = TwoDimSize()
# И тут мы вспомнили (а как обычно и бывает!), что забыли дать ограничения! =)
# Установим минимальную ширину
size.min_width = 500
# и максимальную высоту
size.max_height = 1000
# Включаем внутреннего Пушного и запускаем рубрику "Эксперименты"
size.height = 600
size.width = 600
print(str(size)) # Вывод: 600:600
size.height = 900
size.width = 100
print(str(size)) # Вывод: 500:900
# Мы в этом примере задали число, меньшее минимальной ширины, вот она и вернула минимальную.
# Так же будет, если мы превысим максимальную высоту
size.height = 1200
size.width = 600
print(str(size)) # Вывод: 600:1000
# И даже если не соблюдём оба
size.height = 100
size.width = 1200
print(str(size)) # Вывод: 500:1000
```
### Ключевые методы
#### Метод `as_str`
Форматирует объект в строку вида `"ширина:высота"`, используя разделитель (по умолчанию двоеточие).
**Пример использования**:
```python
from anb_python_components.types.two_dim_size import TwoDimSize
size = TwoDimSize(800, 600)
print(size.as_str()) # Вывод: 800:600
```
#### Метод `as_tuple`
Возвращает размеры в виде кортежа `(ширина, высота)`.
**Пример использования**:
```python
from anb_python_components.types.two_dim_size import TwoDimSize
size = TwoDimSize(800, 600)
print(size.as_tuple()) # Вывод: (800, 600)
```
#### Метод `parse`
Анализирует строку вида `"ширина:высота"` и создает объект `TwoDimSize` из нее.
**Пример использования**:
```python
from anb_python_components.types.two_dim_size import TwoDimSize
size = TwoDimSize.parse("1920:1080")
print(size.width) # 1920
print(size.height) # 1080
```
### Магические методы
- `__str__`, `__repr__`: Отвечают за отображение объекта в строковом виде.
- `__eq__`: Определяет равенство двух объектов по ширине и высоте.
- `__hash__`: Позволяет использовать объект в структурах вроде множества или словаря.
- `__add__`, `__mul__`: Поддерживают сложение и умножение размеров соответственно.
## Заключение
Класс `TwoDimSize` идеально подходит для работы с размерами графических объектов, элементами UI и подобными ситуациями,
требующими четкого контроля за пределами размеров и легкости манипуляций.
[На главную](../../index.md)