]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
be more aggressive in removing all references
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 9 Nov 2025 18:14:48 +0000 (13:14 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 9 Nov 2025 18:14:48 +0000 (13:14 -0500)
python3.14t is showing connections being referenced and not finalized.
explicit closes/disposes and such dont seem to be working but
ensuring globs are cleared out is working better

Change-Id: I0c53f7702027e37ad11bd6e15e828900c8f52213

test/base/test_tutorials.py

index 616da4d5817fa281cf91c5ad6efbe7e1f03c9be4..773466927817936ff83f7c46a9898f68916b5c40 100644 (file)
@@ -74,6 +74,18 @@ class DocTest(fixtures.TestBase):
         parser = doctest.DocTestParser()
         globs = {"print_function": print}
 
+        try:
+            self._run_doctest_impl(fnames, sqla_base, runner, parser, globs)
+        finally:
+            # Clear all references from doctest execution
+            globs.clear()
+
+            # Delete references to avoid keeping stack frames alive
+            del runner
+            del parser
+            del globs
+
+    def _run_doctest_impl(self, fnames, sqla_base, runner, parser, globs):
         for fname in fnames:
             path = os.path.join(sqla_base, "doc/build", fname)
             if not os.path.exists(path):
@@ -103,8 +115,13 @@ class DocTest(fixtures.TestBase):
                         buf[0][0],
                     )
                     buf[:] = []
-                    runner.run(test, clear_globs=False)
-                    globs.update(test.globs)
+                    try:
+                        runner.run(test, clear_globs=False)
+                        globs.update(test.globs)
+                    finally:
+                        # Clear test object references
+                        test.globs.clear()
+                        test.examples.clear()
 
                 doctest_enabled = True
 
@@ -132,8 +149,8 @@ class DocTest(fixtures.TestBase):
 
                 run_buf(fname, False)
 
-                runner.summarize()
-                assert not runner.failures
+            runner.summarize()
+            assert not runner.failures
 
     @requires.has_json_each
     def test_20_style(self):