From 7b202eca4973912d25688a92e594f0799eb1e658 Mon Sep 17 00:00:00 2001 From: Erwan Rouchet Date: Fri, 7 Jul 2023 09:45:59 +0200 Subject: [PATCH] Handle logging queries encoded as bytes under PostgreSQL --- debug_toolbar/panels/sql/tracking.py | 5 ++++- docs/changes.rst | 2 ++ tests/panels/test_sql.py | 11 +++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/debug_toolbar/panels/sql/tracking.py b/debug_toolbar/panels/sql/tracking.py index 9fab89b8b..83be91378 100644 --- a/debug_toolbar/panels/sql/tracking.py +++ b/debug_toolbar/panels/sql/tracking.py @@ -180,7 +180,10 @@ def _record(self, method, sql, params): # Sql might be an object (such as psycopg Composed). # For logging purposes, make sure it's str. if vendor == "postgresql" and not isinstance(sql, str): - sql = sql.as_string(conn) + if isinstance(sql, bytes): + sql = sql.decode("utf-8") + else: + sql = sql.as_string(conn) else: sql = str(sql) diff --git a/docs/changes.rst b/docs/changes.rst index 2e9f6f29d..e06d4c615 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -13,6 +13,8 @@ Pending it collects the used static files in a ``ContextVar``. * Added check ``debug_toolbar.W007`` to warn when JavaScript files are resolving to the wrong content type. +* Fixed SQL statement recording under PostgreSQL for queries encoded as byte + strings. 4.1.0 (2023-05-15) ------------------ diff --git a/tests/panels/test_sql.py b/tests/panels/test_sql.py index fd248663f..d6b31ca2b 100644 --- a/tests/panels/test_sql.py +++ b/tests/panels/test_sql.py @@ -158,6 +158,17 @@ def test_non_ascii_query(self): # ensure the panel renders correctly self.assertIn("café", self.panel.content) + @unittest.skipUnless( + connection.vendor == "postgresql", "Test valid only on PostgreSQL" + ) + def test_bytes_query(self): + self.assertEqual(len(self.panel._queries), 0) + + with connection.cursor() as cursor: + cursor.execute(b"SELECT 1") + + self.assertEqual(len(self.panel._queries), 1) + def test_param_conversion(self): self.assertEqual(len(self.panel._queries), 0)