5151
5252# Functions tested in this suite:
5353# ismodule, isclass, ismethod, isfunction, istraceback, isframe, iscode,
54- # isbuiltin, isroutine, isgenerator, isgeneratorfunction, getmembers,
54+ # isbuiltin, isroutine, isgenerator, ispackage, isgeneratorfunction, getmembers,
5555# getdoc, getfile, getmodule, getsourcefile, getcomments, getsource,
5656# getclasstree, getargvalues, formatargvalues, currentframe,
5757# stack, trace, ismethoddescriptor, isdatadescriptor, ismethodwrapper
@@ -105,7 +105,7 @@ def unsorted_keyword_only_parameters_fn(*, throw, out, the, baby, with_,
105105class IsTestBase (unittest .TestCase ):
106106 predicates = set ([inspect .isbuiltin , inspect .isclass , inspect .iscode ,
107107 inspect .isframe , inspect .isfunction , inspect .ismethod ,
108- inspect .ismodule , inspect .istraceback ,
108+ inspect .ismodule , inspect .istraceback , inspect . ispackage ,
109109 inspect .isgenerator , inspect .isgeneratorfunction ,
110110 inspect .iscoroutine , inspect .iscoroutinefunction ,
111111 inspect .isasyncgen , inspect .isasyncgenfunction ,
@@ -121,7 +121,10 @@ def istest(self, predicate, exp):
121121 predicate == inspect .iscoroutinefunction ) and \
122122 other == inspect .isfunction :
123123 continue
124- self .assertFalse (other (obj ), 'not %s(%s)' % (other .__name__ , exp ))
124+ if predicate == inspect .ispackage and other == inspect .ismodule :
125+ self .assertTrue (predicate (obj ), '%s(%s)' % (predicate .__name__ , exp ))
126+ else :
127+ self .assertFalse (other (obj ), 'not %s(%s)' % (other .__name__ , exp ))
125128
126129 def test__all__ (self ):
127130 support .check__all__ (self , inspect , not_exported = ("modulesbyfile" ,), extra = ("get_annotations" ,))
@@ -201,7 +204,17 @@ def test_excluding_predicates(self):
201204 self .assertFalse (inspect .ismethodwrapper (int ))
202205 self .assertFalse (inspect .ismethodwrapper (type ("AnyClass" , (), {})))
203206
207+ def test_ispackage (self ):
208+ self .istest (inspect .ispackage , 'asyncio' )
209+ self .istest (inspect .ispackage , 'importlib' )
210+ self .assertFalse (inspect .ispackage (inspect ))
211+ self .assertFalse (inspect .ispackage (mod ))
212+ self .assertFalse (inspect .ispackage (':)' ))
213+
214+ class FakePackage :
215+ __path__ = None
204216
217+ self .assertFalse (inspect .ispackage (FakePackage ()))
205218
206219 def test_iscoroutine (self ):
207220 async_gen_coro = async_generator_function_example (1 )
0 commit comments