]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
refactor common reporting options a bit
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 19 Oct 2025 19:08:20 +0000 (15:08 -0400)
committerMichael Bayer <mike_mp@zzzcomputing.com>
Mon, 20 Oct 2025 15:09:03 +0000 (15:09 +0000)
Change-Id: I4a7316867ceacabc4e641017c9f19e40fababdbe

noxfile.py
tools/toxnox.py

index 18bee7ee35d5035e87b4c6d5e13c21fb5abfddfa..6b593b06fb3212da2e3bcb0555d22578c8238a89 100644 (file)
@@ -15,7 +15,7 @@ nox.needs_version = ">=2025.10.16"
 
 if True:
     sys.path.insert(0, ".")
-    from tools.toxnox import extract_opts
+    from tools.toxnox import apply_pytest_opts
     from tools.toxnox import tox_parameters
 
 
@@ -191,7 +191,6 @@ def _tests(
     platform_intensive: bool = False,
     timing_intensive: bool = True,
     coverage: bool = False,
-    mypy: bool = False,
 ) -> None:
     # PYTHONNOUSERSITE - this *MUST* be set so that the ./lib/ import
     # set up explicitly in test/conftest.py is *disabled*, so that
@@ -219,9 +218,6 @@ def _tests(
 
     includes_excludes: dict[str, list[str]] = {"k": [], "m": []}
 
-    has_greenlet = "greenlet" if greenlet else "nogreenlet"
-    file_suffix = f"{database}-{cext}-{has_greenlet}"
-
     if coverage:
         timing_intensive = False
 
@@ -250,31 +246,11 @@ def _tests(
 
     cmd = ["python", "-m", "pytest"]
 
-    if coverage:
-        assert not platform_intensive
-        has_greenlet = "greenlet" if greenlet else "nogreenlet"
-
-        session.env["COVERAGE_FILE"] = coverage_file = (
-            f".coverage.{file_suffix}"
-        )
-        if os.path.exists(coverage_file):
-            os.unlink(coverage_file)
-        cmd.extend(
-            [
-                "--cov=sqlalchemy",
-                "--cov-append",
-                "--cov-report",
-                "term",
-                "--cov-report",
-                f"xml:coverage-{file_suffix}.xml",
-            ],
-        )
-        session.log(f"Will store coverage data in {coverage_file}")
-        includes_excludes["k"].append("not aaa_profiling")
-
     cmd.extend(os.environ.get("TOX_WORKERS", "-n4").split())
 
     if coverage:
+        assert not platform_intensive
+        includes_excludes["k"].append("not aaa_profiling")
         session.install("-e", ".")
         session.install(*nox.project.dependency_groups(pyproject, "coverage"))
     else:
@@ -298,32 +274,33 @@ def _tests(
         if collection:
             cmd.extend([f"-{letter}", " and ".join(collection)])
 
-    posargs, opts = extract_opts(session.posargs, "generate-junit", "dry-run")
-
-    if opts.generate_junit:
-        has_greenlet = "greenlet" if greenlet else "nogreenlet"
-
-        # produce individual junit files that are per-database
-        junitfile = f"junit-{file_suffix}.xml"
-        cmd.extend(["--junitxml", junitfile])
+    posargs = apply_pytest_opts(
+        session,
+        "sqlalchemy",
+        [
+            database,
+            cext,
+            "_greenlet" if greenlet else "nogreenlet",
+            "memusage" if platform_intensive else "_nomemusage",
+            "backendonly" if backendonly else "_notbackendonly",
+        ],
+        coverage=coverage,
+    )
 
     if database in ["oracle", "mssql", "sqlite_file"]:
         cmd.extend(["--write-idents", "db_idents.txt"])
 
     cmd.extend(posargs)
 
-    if opts.dry_run:
-        print(f"DRY RUN: command is: \n{' '.join(cmd)}")
-        return
-
     try:
         session.run(*cmd)
     finally:
         # Run cleanup for oracle/mssql
-        if database in ["oracle", "mssql", "sqlite_file"]:
-            if os.path.exists("db_idents.txt"):
-                session.run("python", "reap_dbs.py", "db_idents.txt")
-                os.unlink("db_idents.txt")
+        if database in ["oracle", "mssql", "sqlite_file"] and os.path.exists(
+            "db_idents.txt"
+        ):
+            session.run("python", "reap_dbs.py", "db_idents.txt")
+            os.unlink("db_idents.txt")
 
 
 @nox.session(name="pep484")
@@ -349,13 +326,13 @@ def test_mypy(session: nox.Session) -> None:
 
     session.install("-e", ".")
 
-    posargs, opts = extract_opts(session.posargs, "generate-junit")
+    posargs = apply_pytest_opts(
+        session,
+        "sqlalchemy",
+        ["mypy"],
+    )
 
     cmd = ["pytest", "-m", "mypy"]
-    if opts.generate_junit:
-        # produce individual junit files that are per-database
-        junitfile = "junit-mypy.xml"
-        cmd.extend(["--junitxml", junitfile])
 
     session.run(*cmd, *posargs)
 
index 891fc70f9c42c4d1ee31c513681c58540c7147e7..64bd298df570af75d637da3efdfe78b85d7bc3aa 100644 (file)
@@ -11,6 +11,7 @@ would fall back to defaults.
 from __future__ import annotations
 
 import collections
+import os
 import re
 import sys
 from typing import Any
@@ -204,3 +205,44 @@ def extract_opts(posargs: list[str], *args: str) -> tuple[list[str], Any]:
     return [arg for arg in posargs if not extract(arg)], return_tuple(
         *return_args
     )
+
+
+def apply_pytest_opts(
+    session: nox.Session,
+    cov: str,
+    tokens: list[str],
+    *,
+    coverage: bool = False,
+) -> list[str]:
+    posargs, opts = extract_opts(session.posargs, "generate-junit")
+
+    file_suffix = "-".join(t for t in tokens if not t.startswith("_"))
+
+    if coverage:
+
+        session.env["COVERAGE_FILE"] = coverage_file = (
+            f".coverage.{file_suffix}"
+        )
+        coverage_xml_file = f"coverage-{file_suffix}.xml"
+
+        if os.path.exists(coverage_file):
+            os.unlink(coverage_file)
+        posargs.extend(
+            [
+                f"--cov={cov}",
+                "--cov-append",
+                "--cov-report",
+                "term",
+                "--cov-report",
+                f"xml:{coverage_xml_file}",
+            ],
+        )
+        session.log(f"Will store coverage data in {coverage_file}")
+        session.log(f"Will write xml coverage data to {coverage_xml_file}")
+
+    if opts.generate_junit:
+        junitfile = f"junit-{file_suffix}.xml"
+        session.log(f"Will store junit xml in {junitfile}")
+        posargs.extend(["--junitxml", junitfile])
+
+    return posargs