From ee4bcadcc0059998a0cdb293f8eaf3e7d690345d Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Fri, 28 May 2021 08:14:39 +0200 Subject: [PATCH] feeder: log failing SQL statements (#45314) --- tests/test_feeder.py | 9 +++++++++ wcs_olap/feeder.py | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/tests/test_feeder.py b/tests/test_feeder.py index 33371a2..32c16e4 100644 --- a/tests/test_feeder.py +++ b/tests/test_feeder.py @@ -1,3 +1,5 @@ +import logging + import pytest from wcs_olap.feeder import WcsOlapFeeder @@ -11,3 +13,10 @@ def test_constructor(): with pytest.raises(ValueError): feeder = WcsOlapFeeder(api=None, pg_dsn='', schema='x' * 64) + + +def test_sql_error_logging(caplog): + feeder = WcsOlapFeeder(api=None, pg_dsn='', schema='x' * 63, logger=logging.getLogger()) + with pytest.raises(Exception): + feeder.ex('COIN') + assert 'Failed to execute' in caplog.text diff --git a/wcs_olap/feeder.py b/wcs_olap/feeder.py index 1805b61..ab29bd5 100644 --- a/wcs_olap/feeder.py +++ b/wcs_olap/feeder.py @@ -10,6 +10,7 @@ import itertools import os import json import hashlib +import reprlib from .utils import Whatever import psycopg2 import psycopg2.errorcodes @@ -333,7 +334,11 @@ class WcsOlapFeeder(object): ctx.update(self.default_ctx) sql = query.format(**(ctx or {})) self.logger.debug('SQL: %s VARS: %s', sql, vars) - self.cur.execute(sql, vars=vars) + try: + self.cur.execute(sql, vars=vars) + except Exception as e: + self.logger.error('Failed to execute %r with vars %s, raised %s', sql, reprlib.repr(vars or []), e) + raise def do_schema(self): self.ex('SET search_path = public')