← Back to team overview

sts-sponsors team mailing list archive

[Merge] ~ack/maas-site-manager:query-debug-helper into maas-site-manager:main

 

Alberto Donato has proposed merging ~ack/maas-site-manager:query-debug-helper into maas-site-manager:main.

Commit message:
add helper to print out rendered queries



Requested reviews:
  MAAS Committers (maas-committers)

For more details, see:
https://code.launchpad.net/~ack/maas-site-manager/+git/site-manager/+merge/443729
-- 
Your team MAAS Committers is requested to review the proposed merge of ~ack/maas-site-manager:query-debug-helper into maas-site-manager:main.
diff --git a/backend/msm/db/_debug.py b/backend/msm/db/_debug.py
new file mode 100644
index 0000000..b330bcc
--- /dev/null
+++ b/backend/msm/db/_debug.py
@@ -0,0 +1,37 @@
+from dataclasses import dataclass
+from pprint import pprint
+import sys
+from typing import (
+    Any,
+    IO,
+)
+
+from sqlalchemy.dialects import postgresql
+from sqlalchemy.sql.elements import ClauseElement
+
+
+@dataclass(init=False)
+class CompiledQuery:
+    """A query compiled for PostgreSQL."""
+
+    sql: str
+    params: dict[str, Any]
+
+    def __init__(self, query: ClauseElement):
+        statement = getattr(query, "statement", query)
+        compiled = statement.compile(
+            dialect=postgresql.dialect()  # type: ignore
+        )
+        self.sql = str(compiled)
+        self.params = compiled.params
+
+
+def print_query(query: ClauseElement, file: IO[str] = sys.stderr) -> None:
+    """Print out a SQLAlchemy query, with its parameters."""
+    compiled = CompiledQuery(query)
+    print("---", file=file)
+    print(compiled.sql, file=file)
+    if compiled.params:
+        print("params: ", end="", file=file)
+        pprint(compiled.params, stream=file)
+    print("---", file=file)

Follow ups