@@ -75,8 +75,9 @@ def django_discovery_runner(manage_py_path: str, args: List[str]) -> None:
7575
7676
7777def django_execution_runner (manage_py_path : str , test_ids : List [str ], args : List [str ]) -> None :
78+ manage_path : pathlib .Path = pathlib .Path (manage_py_path )
7879 # Attempt a small amount of validation on the manage.py path.
79- if not pathlib . Path ( manage_py_path ) .exists ():
80+ if not manage_path .exists ():
8081 raise VSCodeUnittestError ("Error running Django, manage.py path does not exist." )
8182
8283 try :
@@ -89,28 +90,28 @@ def django_execution_runner(manage_py_path: str, test_ids: List[str], args: List
8990 else :
9091 env ["PYTHONPATH" ] = os .fspath (custom_test_runner_dir )
9192
92- django_project_dir : pathlib .Path = pathlib . Path ( manage_py_path ) .parent
93+ django_project_dir : pathlib .Path = manage_path .parent
9394 sys .path .insert (0 , os .fspath (django_project_dir ))
9495 print (f"Django project directory: { django_project_dir } " )
9596
96- manage_spec : ModuleSpec | None = importlib .util .spec_from_file_location (
97- "manage" , manage_py_path
98- )
99- if manage_spec is None or manage_spec .loader is None :
100- raise VSCodeUnittestError ("Error importing manage.py when running Django testing." )
101- manage_module = importlib .util .module_from_spec (manage_spec )
102- manage_spec .loader .exec_module (manage_module )
103-
10497 manage_argv : List [str ] = [
105- manage_py_path ,
98+ str ( manage_path ) ,
10699 "test" ,
107100 "--testrunner=django_test_runner.CustomExecutionTestRunner" ,
108101 * args ,
109102 * test_ids ,
110103 ]
111104 print (f"Django manage.py arguments: { manage_argv } " )
112105
113- with override_argv (manage_argv ), suppress (SystemExit ):
114- manage_module .main ()
106+ try :
107+ with (
108+ override_argv (manage_argv ),
109+ suppress (SystemExit ),
110+ manage_path .open () as manage_file ,
111+ ):
112+ manage_code = manage_file .read ()
113+ exec (manage_code , {"__name__" : "__main__" })
114+ except OSError as e :
115+ raise VSCodeUnittestError ("Error running Django, unable to read manage.py" ) from e
115116 except Exception as e :
116117 print (f"Error during Django test execution: { e } " , file = sys .stderr )
0 commit comments