@@ -1550,70 +1550,40 @@ def f(self):
1550
1550
self .assertIn (('f' , b .f ), inspect .getmembers (b ))
1551
1551
self .assertIn (('f' , b .f ), inspect .getmembers (b , inspect .ismethod ))
1552
1552
1553
- def test_getmembers_function (self ):
1554
- def func (arg : int = 1 , * , kw = 2 ) -> None :
1555
- """Docstring."""
1556
-
1557
- res = dict (inspect .getmembers (func ))
1558
- expected = {k : getattr (func , k ) for k in dir (func )}
1559
- self .assertEqual (res , expected )
1560
-
1561
- def test_getmembers_function_predicate (self ):
1562
- def func (* , a : int = 1 ): ...
1563
-
1564
- res = dict (
1565
- inspect .getmembers (
1566
- func , lambda value : isinstance (value , dict ),
1567
- ),
1568
- )
1569
- expected = {
1570
- k : v
1571
- for k in dir (func )
1572
- if isinstance ((v := getattr (func , k )), dict )
1573
- }
1574
- self .assertEqual (res , expected )
1575
-
1576
- def test_getmembers_traceback (self ):
1577
- try :
1578
- raise ValueError (3 )
1579
- except ValueError as ex :
1580
- trace = ex .__traceback__
1581
-
1582
- res = dict (inspect .getmembers (trace ))
1583
- expected = {k : getattr (trace , k ) for k in dir (trace )}
1584
- self .assertEqual (res , expected )
1585
-
1586
- def test_getmembers_frame (self ):
1587
- ns = {}
1588
- def func (a = 1 ):
1589
- ns ['fr' ] = inspect .currentframe ()
1590
- func ()
1591
-
1592
- res = dict (inspect .getmembers (ns ['fr' ]))
1593
- expected = {k : getattr (ns ['fr' ], k ) for k in dir (ns ['fr' ])}
1594
- self .assertEqual (res , expected )
1595
-
1596
- def test_getmembers_code (self ):
1597
- def func (): ...
1598
-
1599
- res = dict (inspect .getmembers (func .__code__ ))
1600
- expected = {k : getattr (func .__code__ , k ) for k in dir (func .__code__ )}
1601
- self .assertEqual (res , expected )
1602
-
1603
- def test_getmembers_coroutine (self ):
1604
- async def func (): ...
1605
-
1606
- coro = func ()
1607
- self .addCleanup (coro .close )
1608
-
1609
- res = dict (inspect .getmembers (coro ))
1610
- expected = {k : getattr (coro , k ) for k in dir (coro )}
1611
- self .assertEqual (res , expected )
1612
-
1613
- def test_getmembers_builtin (self ):
1614
- res = dict (inspect .getmembers (list ))
1615
- expected = {k : getattr (list , k ) for k in dir (list )}
1616
- self .assertEqual (res , expected )
1553
+ def test_getmembers_custom_dir (self ):
1554
+ class CorrectDir :
1555
+ def __init__ (self , attr ):
1556
+ self .attr = attr
1557
+ def method (self ):
1558
+ return self .attr + 1
1559
+ def __dir__ (self ):
1560
+ return ['attr' , 'method' ]
1561
+
1562
+ cd = CorrectDir (5 )
1563
+ self .assertEqual (inspect .getmembers (cd ), [
1564
+ ('attr' , 5 ),
1565
+ ('method' , cd .method ),
1566
+ ])
1567
+ self .assertEqual (inspect .getmembers (cd , inspect .ismethod ), [
1568
+ ('method' , cd .method ),
1569
+ ])
1570
+
1571
+ def test_getmembers_custom_broken_dir (self ):
1572
+ class BrokenDir :
1573
+ existing = 1
1574
+ def method (self ):
1575
+ return self .existing + 1
1576
+ def __dir__ (self ):
1577
+ return ['existing' , 'missing' , 'method' ]
1578
+
1579
+ bd = BrokenDir ()
1580
+ self .assertEqual (inspect .getmembers (bd ), [
1581
+ ('existing' , 1 ),
1582
+ ('method' , bd .method ),
1583
+ ])
1584
+ self .assertEqual (inspect .getmembers (bd , inspect .ismethod ), [
1585
+ ('method' , bd .method ),
1586
+ ])
1617
1587
1618
1588
def test_getmembers_VirtualAttribute (self ):
1619
1589
class M (type ):
0 commit comments