def _supports_protocol( value: astroid.node_classes.NodeNG, protocol_callback: astroid.FunctionDef ) -> bool: if isinstance(value, astroid.ClassDef): if not has_known_bases(value): return True # classobj can only be iterable if it has an iterable metaclass meta = value.metaclass() if meta is not None: if protocol_callback(meta): return True if isinstance(value, astroid.BaseInstance): if not has_known_bases(value): return True if value.has_dynamic_getattr(): return True if protocol_callback(value): return True # TODO: this is not needed in astroid 2.0, where we can # check the type using a virtual base class instead. if ( isinstance(value, _bases.Proxy) and isinstance(value._proxied, astroid.BaseInstance) and has_known_bases(value._proxied) ): value = value._proxied return protocol_callback(value) return False
def _supports_protocol(value: astroid.node_classes.NodeNG, protocol_callback: astroid.FunctionDef) -> bool: if isinstance(value, astroid.ClassDef): if not has_known_bases(value): return True # classobj can only be iterable if it has an iterable metaclass meta = value.metaclass() if meta is not None: if protocol_callback(meta): return True if isinstance(value, astroid.BaseInstance): if not has_known_bases(value): return True if value.has_dynamic_getattr(): return True if protocol_callback(value): return True # TODO: this is not needed in astroid 2.0, where we can # check the type using a virtual base class instead. if (isinstance(value, _bases.Proxy) and isinstance(value._proxied, astroid.BaseInstance) and has_known_bases(value._proxied)): value = value._proxied return protocol_callback(value) return False
def _supports_protocol( value: astroid.node_classes.NodeNG, protocol_callback: astroid.FunctionDef ) -> bool: if isinstance(value, astroid.ClassDef): if not has_known_bases(value): return True # classobj can only be iterable if it has an iterable metaclass meta = value.metaclass() if meta is not None: if protocol_callback(meta): return True if isinstance(value, astroid.BaseInstance): if not has_known_bases(value): return True if value.has_dynamic_getattr(): return True if protocol_callback(value): return True if ( isinstance(value, astroid.bases.Proxy) and isinstance(value._proxied, astroid.BaseInstance) and has_known_bases(value._proxied) ): value = value._proxied return protocol_callback(value) return False