Files
anb_python_components/help/class_desc/classes/action_state.md
2025-10-05 23:11:19 +03:00

14 KiB
Raw Blame History

Класс ActionState

Класс ActionState предназначен для отслеживания состояния выполняемых действий в программе, фиксируя изменения, происходящие в процессе выполнения, а также накапливая сообщения о событиях, успехах и ошибках. Он служит контейнером для сохранения промежуточных состояний и обеспечивает простой интерфейс взаимодействия с ними.

Основная информация

  • Имя файла: anb_python_components\classes\action_state.py
  • Автор: Александр Бабаев
  • Версия: 1.0.0
  • Дата начала поддержки: с версии 1.0

Атрибуты и методы класса

Атрибуты

  • value: T: Хранит основное значение состояния (может быть любым объектом).
  • __messages: list[ActionStateMessage]: Внутренний список сообщений, накопленных в процессе выполнения действия.

Конструктор (__init__)

Принимает необязательное значение по умолчанию, которое устанавливается в качестве основного значения состояния.

Параметры:

  • default: T | None = None: Значение по умолчанию.

Пример использования:

from anb_python_components.classes.action_state import ActionState

state = ActionState[bool](False)

Основные методы

Метод add_message

Добавляет новое сообщение в список сообщений.

Параметры:

  • message: ActionStateMessage: Модель сообщения.

Пример использования:

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: Флаги сообщения (необязательны).

Пример использования:

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: Дополнительные мета-данные или признаки сообщения (например, отметка о важности или срочности).

Пример использования:

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: Дополнительные флаги для конкретного предупреждения.

Пример использования:

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: Дополнительные флаги для конкретной ошибки.

Пример использования:

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).

Пример использования:

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]: список сообщений.

Пример использования:

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: строка сообщений.

Пример использования:

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.

Пример использования:

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.

Пример использования:

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.

Пример использования:

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: Функциональный предикат для фильтрации сообщений.

Пример использования:

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.

Пример использования:

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: количество сообщений.

Пример использования:

Предположим, мы хотим посчитать количество сообщений каждого типа:

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]: Возвращает предикат, включающий все сообщения (без фильтрации).

Примеры использования:

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 играет ключевую роль в мониторинге и управлении состояниями в приложениях, позволяя контролировать ход выполнения операций и оперативно реагировать на возникающие события и ошибки.

На главную