From: Daniele Varrazzo Date: Sun, 31 Aug 2025 19:20:50 +0000 (+0200) Subject: test: fix pproxy compatibility with Python 3.14 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c43323bf5149d2528a15bb480b8fbe29b0d4f780;p=thirdparty%2Fpsycopg.git test: fix pproxy compatibility with Python 3.14 Work around the issue reported in https://github.com/qwj/python-proxy/issues/200 --- diff --git a/tests/fix_proxy.py b/tests/fix_proxy.py index ba8575e99..b2086b250 100644 --- a/tests/fix_proxy.py +++ b/tests/fix_proxy.py @@ -1,9 +1,9 @@ import os +import sys import time import socket import logging import subprocess as sp -from shutil import which from contextlib import contextmanager import pytest @@ -73,12 +73,9 @@ class Proxy: return logging.info("starting proxy") - - if not (pproxy := which("pproxy")): - raise ValueError("pproxy program not found") - cmdline = [pproxy, "--reuse"] - cmdline.extend(["-l", f"tunnel://:{self.client_port}"]) - cmdline.extend(["-r", f"tunnel://{self.server_host}:{self.server_port}"]) + cmdline = [sys.executable, "-m", "tests.pproxy_fix", "--reuse"] + cmdline += ["-l", f"tunnel://:{self.client_port}"] + cmdline += ["-r", f"tunnel://{self.server_host}:{self.server_port}"] self.proc = sp.Popen(cmdline, stdout=sp.DEVNULL) logging.info("proxy started") diff --git a/tests/pproxy_fix.py b/tests/pproxy_fix.py new file mode 100644 index 000000000..b60ec37ee --- /dev/null +++ b/tests/pproxy_fix.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python +"""Wrapper for pproxy to fix Python 3.14 compatibility + +Work around https://github.com/qwj/python-proxy/issues/200 +""" + +import sys +import asyncio +from typing import Any + +from pproxy.server import main as main_ # type: ignore[import-untyped] + + +def main() -> Any: + # Before Python 3.14 `get_event_loop()` used to create a new loop. + # From Python 3.14 it raises a `RuntimeError`. + try: + asyncio.get_event_loop() + except RuntimeError: + asyncio.set_event_loop(asyncio.new_event_loop()) + + return main_() + + +if __name__ == "__main__": + sys.exit(main())