@@ -361,6 +361,9 @@ def remove_redundant_members_from_subclasses(module_element):
361361 parent_class_node = _get_ast_node_for_external_class (
362362 parent_class , external_class_nodes_map )
363363
364+ if parent_class_node is None :
365+ continue
366+
364367 parent_class_member_nodes = _get_class_member_nodes (
365368 parent_class , parent_class_node , member_nodes_for_classes )
366369
@@ -382,17 +385,20 @@ def _get_class_element_map(class_nodes, element):
382385
383386def _get_ast_node_for_external_class (class_ , external_class_nodes_map ):
384387 class_node = external_class_nodes_map .get (class_ )
385- if class_node is None :
386- #FIXME: This is not OK, we shouldn't use `__name__` as it can differ from
387- # the name from `dir(module)`. We should use the latter instead.
388- # If the name from `dir()` is not available, we need to find such name by
389- # comparing `id(class_)` with each `dir()` member
390- # (or use a {module: member ID} map?).
391- class_element = Element (class_ , class_ .__name__ , inspect .getmodule (class_ ))
392- class_node = get_ast_node_for_class (class_element )
393- external_class_nodes_map [class_ ] = class_node
394-
395- return class_node
388+ if class_node is not None :
389+ return class_node
390+ else :
391+ class_module = inspect .getmodule (class_ )
392+
393+ if class_ .__name__ in dir (class_module ):
394+ #FIXME: Is using `__name__` as `name_in_dir` OK here?
395+ class_element = Element (class_ , class_ .__name__ , class_module )
396+ class_node = get_ast_node_for_class (class_element )
397+ external_class_nodes_map [class_ ] = class_node
398+
399+ return class_node
400+ else :
401+ return None
396402
397403
398404def _get_class_member_nodes (class_ , class_node , member_nodes_for_classes ):
0 commit comments