Пример #1
0
def GetValueTypeImpl(type_: Hashable, parentClass: Type[Any]) -> Type[Any]:
    """Returns the actual type if type_ is a string."""

    if isinstance(type_, type):
        return type_

    if not isinstance(type_, str):
        raise ValueError("Bad type argument: {}".format(type_))

    forwardRef = ForwardRef(type_, is_argument=False)

    # pylint: disable=protected-access
    evaluated = forwardRef._evaluate(GetClassNamespace_(parentClass), None)

    if evaluated is None:
        raise RuntimeError("Unable to resolve type {}".format(type_))

    if isinstance(evaluated, typing._GenericAlias):  # type: ignore
        if isinstance(evaluated.__args__[0],
                      typing._GenericAlias):  # type: ignore
            # Now use the origin to retrieve the default value type.
            return evaluated.__args__[0].__origin__

        return evaluated.__args__[0]

    return evaluated
Пример #2
0
 def evaluate_forwardref(
     type_: ForwardRef,
     globalns: Any,
     localns: Any,
     recursive_guard: set = None,
 ) -> Any:
     return type_._evaluate(globalns, localns)  # type: ignore
Пример #3
0
 def _eval_type(bases: list[type], type_str: str) -> Type:
     ref = ForwardRef(type_str, is_argument=False)
     found_type = None
     for base in reversed(bases[:-1]):
         base_globals = sys.modules[base.__module__].__dict__
         try:
             found_type = ref._evaluate(base_globals, None, frozenset())
         except:
             pass
     if found_type is None:
         raise TypeError(f"Failed to derive type {found_type}")
     return found_type
Пример #4
0
def GetPexTypeImpl(type_: Hashable, parentClass: Hashable) \
        -> Union[Signal, Value[Any], FilteredValue[Any]]:
    """Returns the actual type if type_ is a string."""

    if not isinstance(type_, str):

        if issubclass(cast(type, type_), Signal):
            return cast(Signal, type_)

        if issubclass(cast(type, type_), FilteredValue):
            return cast(FilteredValue, type_)

        if issubclass(cast(type, type_), Value):
            return cast(Value, type_)

        raise RuntimeError(
            "model node must be a Signal, Value[Any], or FilteredValue[Any] "
            "Found {}".format(type_))

    forwardRef = ForwardRef(type_, is_argument=False)

    result: Union[Signal, Value[Any], FilteredValue[Any]]

    # pylint: disable=protected-access
    evaluated = forwardRef._evaluate(GetClassNamespace_(parentClass), None)

    if evaluated is None:
        raise RuntimeError("Unable to resolve type {}".format(type_))

    if issubclass(type(evaluated), typing._GenericAlias):  # type: ignore
        result = evaluated.__origin__
    else:
        result = evaluated

    if issubclass(cast(type, result), Signal):
        return cast(Signal, result)

    if issubclass(cast(type, result), FilteredValue):
        return cast(FilteredValue, result)

    if issubclass(cast(type, result), Value):
        return cast(Value, result)

    raise RuntimeError("model node must be a Signal or Value[Any]. "
                       "Found {}".format(result))
Пример #5
0
 def evaluate_forwardref(type_: ForwardRef, globalns: Any,
                         localns: Any) -> Type[Any]:
     return type_._evaluate(globalns, localns)