@@ -57,7 +57,6 @@ def testMultiply(self):
5757__unittest = True
5858
5959from .result import TestResult
60- from .async_case import IsolatedAsyncioTestCase
6160from .case import (addModuleCleanup , TestCase , FunctionTestCase , SkipTest , skip ,
6261 skipIf , skipUnless , expectedFailure )
6362from .suite import BaseTestSuite , TestSuite
@@ -66,6 +65,7 @@ def testMultiply(self):
6665from .main import TestProgram , main
6766from .runner import TextTestRunner , TextTestResult
6867from .signals import installHandler , registerResult , removeResult , removeHandler
68+ # IsolatedAsyncioTestCase will be imported lazily.
6969
7070# deprecated
7171_TextTestResult = TextTestResult
@@ -78,3 +78,18 @@ def load_tests(loader, tests, pattern):
7878 # top level directory cached on loader instance
7979 this_dir = os .path .dirname (__file__ )
8080 return loader .discover (start_dir = this_dir , pattern = pattern )
81+
82+
83+ # Lazy import of IsolatedAsyncioTestCase from .async_case
84+ # It imports asyncio, which is relatively heavy, but most tests
85+ # do not need it.
86+
87+ def __dir__ ():
88+ return globals ().keys () | {'IsolatedAsyncioTestCase' }
89+
90+ def __getattr__ (name ):
91+ if name == 'IsolatedAsyncioTestCase' :
92+ global IsolatedAsyncioTestCase
93+ from .async_case import IsolatedAsyncioTestCase
94+ return IsolatedAsyncioTestCase
95+ raise AttributeError (f"module { __name__ !r} has no attribute { name !r} " )
0 commit comments