示例#1
0
文件: record.py 项目: voidp34r/faust
def _is_concretely(types: IsInstanceArgT, cls: Type) -> bool:
    try:
        # Check for List[int], Mapping[int, int], etc.
        _, cls = guess_polymorphic_type(cls)
    except TypeError:
        pass
    try:
        return issubclass(cls, types)
    except TypeError:
        return False
示例#2
0
def _polymorphic_type(typ: Type) -> Tuple[Type, Type]:
    try:
        polymorphic_type, cls = __polymorphic_type_cache[typ]
    except KeyError:
        try:
            val = guess_polymorphic_type(typ)
        except TypeError:
            val = (TypeError, None)
        __polymorphic_type_cache[typ] = val
        return val
    if polymorphic_type is TypeError:
        raise TypeError()
    return polymorphic_type, cls
示例#3
0
def _is_model(cls: Type) -> Tuple[bool, Type, Optional[Type]]:
    # Returns (is_model, polymorphic_type).
    # polymorphic type (if available) will be list if it's a list,
    # dict if dict, etc, then that means it's a List[ModelType],
    # Dict[ModelType] etc, so
    # we have to deserialize them as such.
    polymorphic_type = None
    try:
        polymorphic_type, cls = guess_polymorphic_type(cls)
    except TypeError:
        pass
    try:
        return issubclass(remove_optional(cls), ModelT), cls, polymorphic_type
    except TypeError:  # typing.Any cannot be used with subclass
        return False, cls, None
示例#4
0
def test_guess_polymorphic_type__not_generic():
    class X:
        ...

    with pytest.raises(TypeError):
        guess_polymorphic_type(str)
    with pytest.raises(TypeError):
        guess_polymorphic_type(bytes)
    with pytest.raises(TypeError):
        guess_polymorphic_type(X)
示例#5
0
def test_guess_polymorphic_type(input, expected):
    assert guess_polymorphic_type(input) == expected
    assert guess_polymorphic_type(Optional[input]) == expected
    assert guess_polymorphic_type(Union[input, None]) == expected