From 829a7a2be93f5d0fb1edbc0feb104181f208efc6 Mon Sep 17 00:00:00 2001 From: Karolina Surma Date: Wed, 24 Apr 2024 09:50:32 +0200 Subject: [PATCH 1/6] _PyInterpreterState_Get() has become public in Python 3.13 Since 3.13.0a1 it has been renamed to PyInterpreterStateGet() Source: https://github.com/python/cpython/pull/106321 --- psycopg/utils.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/psycopg/utils.c b/psycopg/utils.c index 16be9062a..1dfb87d0b 100644 --- a/psycopg/utils.c +++ b/psycopg/utils.c @@ -392,7 +392,10 @@ psyco_set_error(PyObject *exc, cursorObject *curs, const char *msg) static int psyco_is_main_interp(void) { -#if PY_VERSION_HEX >= 0x03080000 +#if PY_VERSION_HEX >= 0x030d0000 + /* tested with Python 3.13.0a6 */ + return PyInterpreterState_Get() == PyInterpreterState_Main(); +#elif PY_VERSION_HEX >= 0x03080000 /* tested with Python 3.8.0a2 */ return _PyInterpreterState_Get() == PyInterpreterState_Main(); #else From 3b9aa7cf9f3b000407dc0ee8e77fbcf54fa04d7f Mon Sep 17 00:00:00 2001 From: Karolina Surma Date: Wed, 24 Apr 2024 09:56:08 +0200 Subject: [PATCH 2/6] Fix tests with Python 3.13 The textual representation of addresses has changed, adapt the code to expect different values on Python 3.13+. See: https://github.com/python/cpython/commit/f22bf8e3cf899896cf587099d292 --- tests/test_ipaddress.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/tests/test_ipaddress.py b/tests/test_ipaddress.py index 4a2339ef9..3f8036900 100755 --- a/tests/test_ipaddress.py +++ b/tests/test_ipaddress.py @@ -18,6 +18,7 @@ from . import testutils import unittest +import sys import psycopg2 import psycopg2.extras @@ -68,7 +69,12 @@ def test_inet_adapt(self): self.assertEquals(cur.fetchone()[0], '127.0.0.1/24') cur.execute("select %s", [ip.ip_interface('::ffff:102:300/128')]) - self.assertEquals(cur.fetchone()[0], '::ffff:102:300/128') + + # The texual representation of addresses has changed in Python 3.13 + if sys.version_info >= (3, 13): + self.assertEquals(cur.fetchone()[0], '::ffff:1.2.3.0/128') + else: + self.assertEquals(cur.fetchone()[0], '::ffff:102:300/128') @testutils.skip_if_crdb("cidr") def test_cidr_cast(self): @@ -109,7 +115,12 @@ def test_cidr_adapt(self): self.assertEquals(cur.fetchone()[0], '127.0.0.0/24') cur.execute("select %s", [ip.ip_network('::ffff:102:300/128')]) - self.assertEquals(cur.fetchone()[0], '::ffff:102:300/128') + + # The texual representation of addresses has changed in Python 3.13 + if sys.version_info >= (3, 13): + self.assertEquals(cur.fetchone()[0], '::ffff:1.2.3.0/128') + else: + self.assertEquals(cur.fetchone()[0], '::ffff:102:300/128') def test_suite():