@@ -108,7 +108,7 @@ def django_db_setup(
108108 django_db_keepdb : bool ,
109109 django_db_createdb : bool ,
110110 django_db_modify_db_settings : None ,
111- ) -> None :
111+ ) -> Generator [ None , None , None ] :
112112 """Top level fixture to ensure test databases are available"""
113113 from django .test .utils import setup_databases , teardown_databases
114114
@@ -127,7 +127,9 @@ def django_db_setup(
127127 ** setup_databases_args
128128 )
129129
130- def teardown_database () -> None :
130+ yield
131+
132+ if not django_db_keepdb :
131133 with django_db_blocker .unblock ():
132134 try :
133135 teardown_databases (db_cfg , verbosity = request .config .option .verbose )
@@ -138,19 +140,17 @@ def teardown_database() -> None:
138140 )
139141 )
140142
141- if not django_db_keepdb :
142- request .addfinalizer (teardown_database )
143-
144143
145144@pytest .fixture ()
146145def _django_db_helper (
147146 request : pytest .FixtureRequest ,
148147 django_db_setup : None ,
149148 django_db_blocker ,
150- ) -> None :
149+ ) -> Generator [ None , None , None ] :
151150 from django import VERSION
152151
153152 if is_django_unittest (request ):
153+ yield
154154 return
155155
156156 marker = request .node .get_closest_marker ("django_db" )
@@ -183,7 +183,6 @@ def _django_db_helper(
183183 )
184184
185185 django_db_blocker .unblock ()
186- request .addfinalizer (django_db_blocker .restore )
187186
188187 import django .db
189188 import django .test
@@ -233,13 +232,20 @@ def tearDownClass(cls) -> None:
233232 super (django .test .TestCase , cls ).tearDownClass ()
234233
235234 PytestDjangoTestCase .setUpClass ()
236- if VERSION >= (4 , 0 ):
237- request .addfinalizer (PytestDjangoTestCase .doClassCleanups )
238- request .addfinalizer (PytestDjangoTestCase .tearDownClass )
239235
240236 test_case = PytestDjangoTestCase (methodName = "__init__" )
241237 test_case ._pre_setup ()
242- request .addfinalizer (test_case ._post_teardown )
238+
239+ yield
240+
241+ test_case ._post_teardown ()
242+
243+ PytestDjangoTestCase .tearDownClass ()
244+
245+ if VERSION >= (4 , 0 ):
246+ PytestDjangoTestCase .doClassCleanups ()
247+
248+ django_db_blocker .restore ()
243249
244250
245251def validate_django_db (marker ) -> _DjangoDb :
@@ -547,12 +553,12 @@ def live_server(request: pytest.FixtureRequest):
547553 ) or "localhost"
548554
549555 server = live_server_helper .LiveServer (addr )
550- request . addfinalizer ( server . stop )
551- return server
556+ yield server
557+ server . stop ()
552558
553559
554560@pytest .fixture (autouse = True , scope = "function" )
555- def _live_server_helper (request : pytest .FixtureRequest ) -> None :
561+ def _live_server_helper (request : pytest .FixtureRequest ) -> Generator [ None , None , None ] :
556562 """Helper to make live_server work, internal to pytest-django.
557563
558564 This helper will dynamically request the transactional_db fixture
@@ -568,13 +574,15 @@ def _live_server_helper(request: pytest.FixtureRequest) -> None:
568574 It will also override settings only for the duration of the test.
569575 """
570576 if "live_server" not in request .fixturenames :
577+ yield
571578 return
572579
573580 request .getfixturevalue ("transactional_db" )
574581
575582 live_server = request .getfixturevalue ("live_server" )
576583 live_server ._live_server_modified_settings .enable ()
577- request .addfinalizer (live_server ._live_server_modified_settings .disable )
584+ yield
585+ live_server ._live_server_modified_settings .disable ()
578586
579587
580588@contextmanager
0 commit comments