EJIO.utils.component package

Inheritance diagram of EJIO.utils.component.numbers.big_number.BigNumber, EJIO.utils.component.clock.time_class.Time, EJIO.utils.component.clock.virtual_clock.VirtualClock, EJIO.utils.component.clock.realtime_clock.RealtimeClock, EJIO.utils.component.clock.timer.Timer, EJIO.utils.component.app.app.ApplicationCore, EJIO.utils.component.check.type_checker_types.TypeCheckerTypes, EJIO.utils.component.check.type_checker.TypeCheckerClass, EJIO.utils.component.check.type_check.Types, EJIO.utils.component.check.type_check.TypeChecker, EJIO.utils.component.check.str_type_check.StringTypes, EJIO.utils.component.check.str_type_check.StringChecker, EJIO.utils.component.color.color.Color, EJIO.utils.component.color.colors.COLORS, EJIO.utils.component.tree.general_tree.GeneralTreeNode, EJIO.utils.component.tree.bst.BSTNode

Subpackages

Submodules

EJIO.utils.component.err module

exception EJIO.utils.component.err.ApplicationCoreError(message: str)[исходный код]

Базовые классы: UtilsBaseError

Исключение, связанное с ошибками работы ядра программы.

exception EJIO.utils.component.err.ClockError(message: str)[исходный код]

Базовые классы: UtilsBaseError

Исключение, связанное с ошибками работы часов или таймера.

Module contents

class EJIO.utils.component.ApplicationCore(*args: object, **kwargs: object)[исходный код]

Базовые классы: Singleton

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

settings: dict[str, Any] = {'application': {'name': 'DefaultEJIOApp'}}
start() → None[исходный код]

Запускает полный жизненный цикл оркестрации приложения.

Исключение:

ApplicationCoreError – При попытке запуска ядра приложения повторно.

class EJIO.utils.component.BSTNode(*args: Any)[исходный код]

Базовые классы: TreeNode

Узел двоичного (бинарного) дерева поиска (Binary Search Tree). Содержит строго левого (меньшего) и правого (большего) потомков.

property children: Iterable[TreeNode]

Потокобезопасная проекция двоичной структуры на общий контракт TreeNode. Возвращает левого и правого детей, если они существуют.

Результат:

Список потомков.

destroy() → None[исходный код]

Итеративное, потокобезопасное и каскадное уничтожение бинарного дерева поиска. Полностью защищено от RecursionError и оптимизировано по скорости.

insert(val: Any) → None[исходный код]

Потокобезопасная упорядоченная вставка элемента со сравнением значений.

Параметры:

val – Значение нового узла.

left: BSTNode | None
right: BSTNode | None
property value: Any

Возвращает значение текущего узла.

Результат:

Значение текущего узла.

class EJIO.utils.component.BigNumber(value: int | float, scale: str = '')[исходный код]

Базовые классы: object

Представление большого числа с автоматическим управлением масштабом.

convert_to_scale(target_scale: str) → BigNumber[исходный код]

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

Параметры:

target_scale – Целевое обозначение масштаба

Результат:

Масштобированное значение.

Исключение:

ValueError – Если масштаб неподдерживаем

scales_dict: dict[str, float] = {'': 1, 'At': 1e+153, 'B': 1000000000.0, 'Ce': 1e+69, 'CeMi': 1e+132, 'DC': 1e+81, 'DCe': 1e+75, 'DCeMi': 1e+135, 'DDe': 1e+39, 'DMi': 1e+117, 'De': 1e+33, 'DeMi': 1e+123, 'Fe': 1e+150, 'K': 1000.0, 'M': 1000000.0, 'Mc': 1e+141, 'Mi': 1e+105, 'Mi-B': 1e+111, 'Mi-M': 1e+108, 'Mi-T': 1e+114, 'Na': 1e+144, 'Ng': 1e+66, 'No': 1e+30, 'NoC': 1e+102, 'Oc': 1e+27, 'OcC': 1e+99, 'Og': 1e+63, 'Pi': 1e+147, 'Qa': 1e+51, 'Qd': 1000000000000000.0, 'QdC': 1e+87, 'Qi': 1e+54, 'Qn': 1e+18, 'QnC': 1e+90, 'Se': 1e+57, 'Sg': 1e+60, 'Sp': 1e+24, 'SpC': 1e+96, 'Sx': 1e+21, 'SxC': 1e+93, 'T': 1000000000000.0, 'TC': 1e+84, 'TCe': 1e+78, 'TCeMi': 1e+138, 'TDe': 1e+42, 'TMi': 1e+120, 'Tg': 1e+48, 'TgMi': 1e+129, 'UCe': 1e+72, 'UDe': 1e+36, 'Ve': 1e+165, 'Vg': 1e+45, 'VgMi': 1e+126, 'Xo': 1e+162, 'Yo': 1e+159, 'Ze': 1e+156}
scales_list: list[tuple[str, float]] = [('', 1), ('K', 1000.0), ('M', 1000000.0), ('B', 1000000000.0), ('T', 1000000000000.0), ('Qd', 1000000000000000.0), ('Qn', 1e+18), ('Sx', 1e+21), ('Sp', 1e+24), ('Oc', 1e+27), ('No', 1e+30), ('De', 1e+33), ('UDe', 1e+36), ('DDe', 1e+39), ('TDe', 1e+42), ('Vg', 1e+45), ('Tg', 1e+48), ('Qa', 1e+51), ('Qi', 1e+54), ('Se', 1e+57), ('Sg', 1e+60), ('Og', 1e+63), ('Ng', 1e+66), ('Ce', 1e+69), ('UCe', 1e+72), ('DCe', 1e+75), ('TCe', 1e+78), ('DC', 1e+81), ('TC', 1e+84), ('QdC', 1e+87), ('QnC', 1e+90), ('SxC', 1e+93), ('SpC', 1e+96), ('OcC', 1e+99), ('NoC', 1e+102), ('Mi', 1e+105), ('Mi-M', 1e+108), ('Mi-B', 1e+111), ('Mi-T', 1e+114), ('DMi', 1e+117), ('TMi', 1e+120), ('DeMi', 1e+123), ('VgMi', 1e+126), ('TgMi', 1e+129), ('CeMi', 1e+132), ('DCeMi', 1e+135), ('TCeMi', 1e+138), ('Mc', 1e+141), ('Na', 1e+144), ('Pi', 1e+147), ('Fe', 1e+150), ('At', 1e+153), ('Ze', 1e+156), ('Yo', 1e+159), ('Xo', 1e+162), ('Ve', 1e+165)]
to_scale_string(precision: int = 2) → str[исходный код]

Возвращает строку с числом, автоматически масштабированным, например: „1.23 M“.

Параметры:

precision – Число знаков после запятой

Результат:

Строка с маштабированным числом.

to_scientific(precision: int = 2) → str[исходный код]

Возвращает число в научной нотации, например: „1.23e+06“.

Параметры:

precision – Число знаков после запятой

Результат:

Строка с числом в научной нотации.

value: float
class EJIO.utils.component.COLORS(*args: tuple[object, ...], **kwargs: dict[str, object])[исходный код]

Базовые классы: object

Неизменяемый расширенный реестр системных и графических цветов. Содержит современные палитры Material / Tailwind UI.

AMBER: Color = Color(R=120, G=53, B=15, A=255)
AMBER_LIGHT: Color = Color(R=255, G=251, B=235, A=255)
BLACK: Color = Color(R=0, G=0, B=0, A=255)
BLUE: Color = Color(R=59, G=130, B=246, A=255)
CRIMSON: Color = Color(R=153, G=27, B=27, A=255)
CRIMSON_LIGHT: Color = Color(R=254, G=242, B=242, A=255)
CYAN: Color = Color(R=6, G=182, B=212, A=255)
EMERALD: Color = Color(R=6, G=78, B=59, A=255)
EMERALD_LIGHT: Color = Color(R=236, G=253, B=245, A=255)
GREEN: Color = Color(R=16, G=185, B=129, A=255)
INDIGO: Color = Color(R=99, G=102, B=241, A=255)
INFO_BLUE: Color = Color(R=30, G=58, B=138, A=255)
INFO_LIGHT: Color = Color(R=239, G=246, B=255, A=255)
ORANGE: Color = Color(R=249, G=115, B=22, A=255)
PINK: Color = Color(R=236, G=72, B=153, A=255)
PURPLE: Color = Color(R=139, G=92, B=246, A=255)
RED: Color = Color(R=239, G=68, B=68, A=255)
SLATE_100: Color = Color(R=241, G=245, B=249, A=255)
SLATE_300: Color = Color(R=203, G=213, B=225, A=255)
SLATE_50: Color = Color(R=248, G=250, B=252, A=255)
SLATE_500: Color = Color(R=100, G=116, B=139, A=255)
SLATE_700: Color = Color(R=51, G=65, B=85, A=255)
SLATE_800: Color = Color(R=30, G=41, B=59, A=255)
SLATE_900: Color = Color(R=15, G=23, B=42, A=255)
TEAL: Color = Color(R=20, G=184, B=166, A=255)
TRANSPARENT: Color = Color(R=0, G=0, B=0, A=0)
WHITE: Color = Color(R=255, G=255, B=255, A=255)
YELLOW: Color = Color(R=245, G=158, B=11, A=255)
classmethod clear() → None[исходный код]
classmethod destroy() → None[исходный код]
class EJIO.utils.component.Color(*args: Any)[исходный код]

Базовые классы: object

Универсальный класс для работы с цветом. Инкапсулирует парсинг из любых форматов (HEX, RGB, RGBA, float) и лениво преобразует его в нужные рантайм-представления.

property hex: str

Возвращает стандартную шестнадцатеричную строку (например, „#FF5733“).

Результат:

Цвет в формате HEX.

property hex_alpha: str

Возвращает HEX строку, включающую альфа-компоненту (например, „#FF573380“).

Результат:

Цвет в формате HEXA.

property normalized: tuple[float, float, float, float]

Возвращает нормализованные float-координаты от 0.0 до 1.0.

Результат:

Нормализованный цвет в формате RGBA.

property rgb: tuple[int, int, int]

Возвращает классический кортеж целых чисел (R, G, B).

Результат:

Цвет в формате RGB.

property rgba: tuple[int, int, int, int]

Возвращает полный кортеж целых чисел с альфа-каналом (R, G, B, A).

Результат:

Цвет в формате RGBA.

class EJIO.utils.component.GeneralTreeNode(*args: Any)[исходный код]

Базовые классы: TreeNode

Узел универсального дерева общего вида (N-арное дерево). Может содержать неограниченное количество дочерних потомков.

add_child(child_node: GeneralTreeNode) → GeneralTreeNode[исходный код]

Потокобезопасно добавляет дочерний узел в дерево.

Параметры:

child_node – Новый дочерний узел.

Результат:

Новый узел.

property children: Iterable[TreeNode]

Возвращает изолированную потокобезопасную копию списка потомков.

Результат:

Список потомков.

destroy() → None[исходный код]

Потокобезопасное каскадное уничтожение N-арного дерева.

remove_child(child_node: GeneralTreeNode) → None[исходный код]

Потокобезопасно удаляет дочерний узел из дерева.

Параметры:

child_node – Дочерний узел.

property value: Any

Возвращает значение текущего узла.

Результат:

Значение текущего узла.

class EJIO.utils.component.RealtimeClock[исходный код]

Базовые классы: Clock

Реальные часы, основаны на системном времени.

get_time() → Time[исходный код]

Получает текущее системное время.

Результат:

Объект Time со значением текущего времени.

class EJIO.utils.component.StringChecker(*args: tuple[object, ...], **kwargs: dict[str, object])[исходный код]

Базовые классы: TypeCheckerClass[str, StringTypes]

Класс для определения и проверки содержимого строк по флагам StringTypes. Позволяет узнать, какому типу данных фактически соответствуют текстовые данные.

class EJIO.utils.component.StringTypes(*values)[исходный код]

Базовые классы: TypeCheckerTypes

Интегер-флаг, представляющий типы данных, которые могут быть закодированы в строке. Каждый флаг — это битовая маска, позволяющая комбинировать несколько проверок.

BOOL = 32
DICT = 16
FLOAT = 4
INT = 2
LIST = 8
NONE = 0
NONE_TYPE = 1
NUMBER = 64
PERCENT = 128
class EJIO.utils.component.Time(*, years: float = 0, days: float = 0, hours: float = 0, minutes: float = 0, seconds: float = 0, milliseconds: float = 0, microseconds: float = 0, nanoseconds: int = 0)[исходный код]

Базовые классы: object

Класс представляет промежуток времени с точностью до наносекунд. Можно форматировать и получать в разных единицах.

as_days() → int[исходный код]

Получить время в днях.

Результат:

Время в днях.

as_hours() → int[исходный код]

Получить время в часах.

Результат:

Время в часах.

as_microseconds() → int[исходный код]

Получить время в микросекундах.

Результат:

Время в микросекундах.

as_milliseconds() → int[исходный код]

Получить время в миллисекундах.

Результат:

Время в миллисекундах.

as_minutes() → int[исходный код]

Получить время в минутах.

Результат:

Время в минутах.

as_nanoseconds() → int[исходный код]

Получить время в наносекундах.

Результат:

Время в наносекундах.

as_seconds() → int[исходный код]

Получить время в секундах.

Результат:

Время в секундах.

as_years() → int[исходный код]

Получить время в годах.

Результат:

Время в годах.

format(fmt: str = '%Y:%j:%H:%M:%S:%f') → str[исходный код]

Форматирует время согласно шаблону.

%Y - Год %j - День %H - Часы %M - Минуты %S - Секунды %f - Микросекунды

Параметры:

fmt – Формат строки, по умолчанию „%Y:%j:%H:%M:%S:%f“.

Результат:

Отформатированная строка.

classmethod from_datetime(dt: datetime) → Time[исходный код]

Создает объект Time из объекта datetime.

Параметры:

dt – Объект datetime.

Результат:

Новый объект Time.

class EJIO.utils.component.Timer(duration: Time, func: Callable)[исходный код]

Базовые классы: object

Таймер, отслеживающий заданную по времени продолжительность и выполняющий указанную функцию по окончании отчета.

property completed: bool

Проверяет, завершился ли таймер.

Результат:

True, если таймер завершен, иначе False.

duration: Time
prolong(additional_time: Time) → Timer[исходный код]

Увеличивает длительность таймера.

Параметры:

additional_time – Время, на которое нужно увеличить таймер.

Результат:

Объект таймера.

Исключение:

TypeError – Если additional_time не является объектом Time.

property remaining_time: Time

Возвращает оставшееся время.

Результат:

Оставшееся время в формате Time.

start() → Timer[исходный код]

Запускает таймер.

Результат:

Объект таймера.

stop() → Timer[исходный код]

Останавливает таймер.

Результат:

Объект таймера.

class EJIO.utils.component.TypeChecker(*args: tuple[object, ...], **kwargs: dict[str, object])[исходный код]

Базовые классы: TypeCheckerClass[Any, Types]

Класс для определения и проверки типов значений по флагам Types. Позволяет получать комбинированное описание типов значения, а также проверять соответствие значения любому или всем указанным типам.

class EJIO.utils.component.TypeCheckerClass(*args: tuple[object, ...], **kwargs: dict[str, object])[исходный код]

Базовые классы: StaticClass, Generic

Абстрактный класс, предоставляющий базовый интерфейс и логику для классов, осуществляющих проверку типов данных и структур.

V: Тип проверяемого значения (например, Any или str). S: Тип флага.

classmethod check_types(value: V, flags: S) → bool[исходный код]

Проверяет, соответствует ли значение хотя бы одному из переданных флагов.

Параметры:
  • value – Значение, которое нужно проверить.

  • flags – Комбинация флагов типов для проверки.

Результат:

True, если значение соответствует хотя бы одному флагу, иначе False.

classmethod check_types_strict(value: V, flags: S) → bool[исходный код]

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

Параметры:
  • value – Значение, которое нужно проверить.

  • flags – Комбинация флагов типов, которой должно удовлетворять значение.

Результат:

True, если значение прошло все проверки для указанных флагов, иначе False.

classmethod get_types(value: V) → S[исходный код]

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

Параметры:

value – Значение, типы которого нужно определить.

Результат:

Комбинация флагов типа S.

class EJIO.utils.component.TypeCheckerTypes(new_class_name, /, names, *, module=None, qualname=None, type=None, start=1, boundary=None)[исходный код]

Базовые классы: Flag

Аюстрактный класс, представляющий собой базовый класс для кслассов, содержащих проверяемые типы. Структура класса должна быть:

NONE = 0 NONE_TYPE = 1 << 0 INT = 1 << 1 FLOAT = 1 << 2 и т.д.

class EJIO.utils.component.Types(*values)[исходный код]

Базовые классы: TypeCheckerTypes

Интегер-флаг, представляющий разные типы данных. Каждый флаг — это битовая маска, позволяющая комбинировать несколько типов.

BOOL = 64
DICT = 32
FLOAT = 4
INT = 2
LIST = 16
NONE = 0
NONE_TYPE = 1
NUMBER = 128
PERCENT = 256
STRING = 8
class EJIO.utils.component.VirtualClock(start_time: Time | None = None)[исходный код]

Базовые классы: Clock

Виртуальные часы, отслеживают прошедшее время без привязки к системному.

get_time() → Time[исходный код]

Возвращает текущее виртуальное время.

Результат:

Объект Time, представляющий текущее время.

start() → Self[исходный код]

Запускает виртуальные часы.

Результат:

Сам объект для цепочки вызовов.

Исключение:

ClockError – Если часы уже запущены.

stop() → Self[исходный код]

Останавливает виртуальные часы.

Результат:

Сам объект для цепочки вызовов.

Исключение:

ClockError – Если часы не запущены.