26
26
TYPE_ELLIPSIS = type (...)
27
27
28
28
29
- def _io_discrepancy (member ):
30
- # _io module names itself `io`: http://bugs.python.org/issue18602
31
- member_self = getattr (member , "__self__" , None )
32
- return (
33
- member_self
34
- and inspect .ismodule (member_self )
35
- and member_self .__name__ == "_io"
36
- and member .__module__ == "io"
37
- )
38
-
39
-
40
29
def _attach_local_node (parent , node , name ):
41
30
node .name = name # needed by add_local_node
42
31
parent .add_local_node (node )
@@ -343,9 +332,7 @@ def object_build(self, node, obj):
343
332
if inspect .isfunction (member ):
344
333
_build_from_function (node , name , member , self ._module )
345
334
elif inspect .isbuiltin (member ):
346
- if not _io_discrepancy (member ) and self .imported_member (
347
- node , member , name
348
- ):
335
+ if self .imported_member (node , member , name ):
349
336
continue
350
337
object_build_methoddescriptor (node , member , name )
351
338
elif inspect .isclass (member ):
@@ -383,7 +370,7 @@ def object_build(self, node, obj):
383
370
attach_dummy_node (node , name , member )
384
371
return None
385
372
386
- def imported_member (self , node , member , name ) :
373
+ def imported_member (self , node , member , name : str ) -> bool :
387
374
"""verify this is not an imported class or handle it"""
388
375
# /!\ some classes like ExtensionClass doesn't have a __module__
389
376
# attribute ! Also, this may trigger an exception on badly built module
@@ -402,7 +389,13 @@ def imported_member(self, node, member, name):
402
389
attach_dummy_node (node , name , member )
403
390
return True
404
391
405
- real_name = {"gtk" : "gtk_gtk" , "_io" : "io" }.get (modname , modname )
392
+ # On PyPy during bootstrapping we infer _io while _module is
393
+ # builtins. In CPython _io names itself io, see http://bugs.python.org/issue18602
394
+ # Therefore, this basically checks whether we are not in PyPy.
395
+ if modname == "_io" and not self ._module .__name__ == "builtins" :
396
+ return False
397
+
398
+ real_name = {"gtk" : "gtk_gtk" }.get (modname , modname )
406
399
407
400
if real_name != self ._module .__name__ :
408
401
# check if it sounds valid and then add an import node, else use a
0 commit comments