def _extract_python_type_from_typeengine( api: SemanticAnalyzerPluginInterface, node: TypeInfo, type_args: Sequence[Expression], ) -> ProperType: if node.fullname == "sqlalchemy.sql.sqltypes.Enum" and type_args: first_arg = type_args[0] if isinstance(first_arg, NameExpr) and isinstance( first_arg.node, TypeInfo): for base_ in first_arg.node.mro: if base_.fullname == "enum.Enum": return Instance(first_arg.node, []) # TODO: support other pep-435 types here else: return api.named_type("__builtins__.str", []) assert node.has_base("sqlalchemy.sql.type_api.TypeEngine"), ( "could not extract Python type from node: %s" % node) type_engine_sym = api.lookup_fully_qualified_or_none( "sqlalchemy.sql.type_api.TypeEngine") assert type_engine_sym is not None and isinstance(type_engine_sym.node, TypeInfo) type_engine = map_instance_to_supertype( Instance(node, []), type_engine_sym.node, ) return get_proper_type(type_engine.args[-1])
def _extract_python_type_from_typeengine(api: SemanticAnalyzerPluginInterface, node: TypeInfo, type_args) -> Instance: if node.fullname == "sqlalchemy.sql.sqltypes.Enum" and type_args: first_arg = type_args[0] if isinstance(first_arg, NameExpr) and isinstance( first_arg.node, TypeInfo): for base_ in first_arg.node.mro: if base_.fullname == "enum.Enum": return Instance(first_arg.node, []) # TODO: support other pep-435 types here else: n = api.lookup_fully_qualified("builtins.str") return Instance(n.node, []) assert node.has_base("sqlalchemy.sql.type_api.TypeEngine"), ( "could not extract Python type from node: %s" % node) type_engine = map_instance_to_supertype( Instance(node, []), api.modules["sqlalchemy.sql.type_api"].names["TypeEngine"].node, ) return type_engine.args[-1]
def is_model_subclass_info(info: TypeInfo, django_context: "DjangoContext") -> bool: return info.fullname in django_context.all_registered_model_class_fullnames or info.has_base( fullnames.MODEL_CLASS_FULLNAME)
def has_any_of_bases(info: TypeInfo, bases: Iterable[str]) -> bool: for base_fullname in bases: if info.has_base(base_fullname): return True return False
def has_any_of_bases(info: TypeInfo, bases: typing.Sequence[str]) -> bool: for base_fullname in bases: if info.has_base(base_fullname): return True return False