Исходный код EJIO.utils.component.check.type_check

## /utils/check/type_check.py

from collections.abc import Callable
from typing import Any, ClassVar
from .type_checker_types import TypeCheckerTypes
from .type_checker import TypeCheckerClass

__all__ = [
    'Types',
    'TypeChecker',
]


[документация] class Types(TypeCheckerTypes): """ Интегер-флаг, представляющий разные типы данных. Каждый флаг — это битовая маска, позволяющая комбинировать несколько типов. """ __slots__ = () NONE = 0 NONE_TYPE = 1 << 0 INT = 1 << 1 FLOAT = 1 << 2 STRING = 1 << 3 LIST = 1 << 4 DICT = 1 << 5 BOOL = 1 << 6 NUMBER = 1 << 7 # int или float PERCENT = 1 << 8 # int и 0 <= value <= 100
[документация] class TypeChecker(TypeCheckerClass[Any, Types]): """ Класс для определения и проверки типов значений по флагам Types. Позволяет получать комбинированное описание типов значения, а также проверять соответствие значения любому или всем указанным типам. """ __slots__ = () _type_checks: ClassVar[dict[Types, Callable[[Any], bool]]]= { Types.NONE_TYPE: lambda v: v is None, Types.INT: lambda v: isinstance(v, int) and not isinstance(v, bool), Types.FLOAT: lambda v: isinstance(v, float), Types.STRING: lambda v: isinstance(v, str), Types.LIST: lambda v: isinstance(v, list), Types.DICT: lambda v: isinstance(v, dict), Types.BOOL: lambda v: isinstance(v, bool), Types.NUMBER: lambda v: isinstance(v, (int, float)) and not isinstance(v, bool), Types.PERCENT: ( lambda v: isinstance(v, int) and not isinstance(v, bool) and 0 <= v <= 100 ), }