]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
test: print notifications received in pipeline demo
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Wed, 8 Jun 2022 13:18:29 +0000 (15:18 +0200)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Wed, 8 Jun 2022 14:03:40 +0000 (16:03 +0200)
Investigating on the conditions causing the messages reported in #314.

tests/scripts/pipeline-demo.py

index e830c792be856dcec31d7313a0f2263e12113c80..9035911e3ac4a30130255a3023ccf91fd740cf38 100644 (file)
@@ -19,7 +19,7 @@ from psycopg import pq, waiting
 from psycopg import errors as e
 from psycopg.abc import PipelineCommand
 from psycopg.generators import pipeline_communicate
-from psycopg.pq._enums import Format
+from psycopg.pq import Format, DiagnosticField
 from psycopg._compat import Deque
 
 psycopg_logger = logging.getLogger("psycopg")
@@ -34,6 +34,19 @@ class LoggingPGconn:
         self._pgconn = pgconn
         self._logger = logger
 
+        def log_notice(result: pq.abc.PGresult) -> None:
+            def get_field(field: DiagnosticField) -> Optional[str]:
+                value = result.error_field(field)
+                return value.decode("utf-8", "replace") if value else None
+
+            logger.info(
+                "notice %s %s",
+                get_field(DiagnosticField.SEVERITY),
+                get_field(DiagnosticField.MESSAGE_PRIMARY),
+            )
+
+        pgconn.notice_handler = log_notice
+
         if args.trace:
             self._trace_file = open(args.trace, "w")
             pgconn.trace(self._trace_file.fileno())