From: Daniele Varrazzo Date: Sat, 26 Mar 2022 17:08:53 +0000 (+0100) Subject: test: add support for trace file to pipeline demo X-Git-Tag: 3.1~146^2~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c58c44ee475319217efc3facb8bd7f1ef5972590;p=thirdparty%2Fpsycopg.git test: add support for trace file to pipeline demo --- diff --git a/tests/scripts/pipeline-demo.py b/tests/scripts/pipeline-demo.py index c0636587d..e7719e9bc 100644 --- a/tests/scripts/pipeline-demo.py +++ b/tests/scripts/pipeline-demo.py @@ -22,6 +22,10 @@ from psycopg.generators import pipeline_communicate from psycopg.pq._enums import Format from psycopg._compat import Deque +psycopg_logger = logging.getLogger("psycopg") +pipeline_logger = logging.getLogger("pipeline") +args: argparse.Namespace + class LoggingPGconn: """Wrapper for PGconn that logs fetched results.""" @@ -30,6 +34,15 @@ class LoggingPGconn: self._pgconn = pgconn self._logger = logger + if args.trace: + self._trace_file = open(args.trace, "w") + pgconn.trace(self._trace_file.fileno()) + + def __del__(self) -> None: + if hasattr(self, "_trace_file"): + self._pgconn.untrace() + self._trace_file.close() + def __getattr__(self, name: str) -> Any: return getattr(self._pgconn, name) @@ -265,18 +278,21 @@ def main() -> None: parser.add_argument( "--async", dest="async_", action="store_true", help="use async API" ) + parser.add_argument("--trace", help="write trace info into TRACE file") parser.add_argument("-l", "--log", help="log file (stderr by default)") + + global args args = parser.parse_args() - logger = logging.getLogger("psycopg") - logger.setLevel(logging.DEBUG) - pipeline_logger = logging.getLogger("pipeline") + + psycopg_logger.setLevel(logging.DEBUG) pipeline_logger.setLevel(logging.DEBUG) if args.log: - logger.addHandler(logging.FileHandler(args.log)) + psycopg_logger.addHandler(logging.FileHandler(args.log)) pipeline_logger.addHandler(logging.FileHandler(args.log)) else: - logger.addHandler(logging.StreamHandler()) + psycopg_logger.addHandler(logging.StreamHandler()) pipeline_logger.addHandler(logging.StreamHandler()) + if args.pq: if args.async_: asyncio.run(pipeline_demo_pq_async(args.nrows, pipeline_logger))