From 401980b2a79ef15cc3b35fad51163339c8654751 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
Date: Mon, 20 Nov 2023 15:45:04 +0100
Subject: [PATCH] Use pre-3.10 serialization code on PyPy3.10

The new serialization code for Python 3.10+ does not seem to work
on PyPy3.10 7.3.13, as it causes:

    ValueError: no signature found for builtin type <class 'code'>

Switch back to the old code if PyPy is used, at least for the time
being.  With this change, the test suite passes on PyPy3.10.

Fixes #845
---
 ipyparallel/serialize/codeutil.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/ipyparallel/serialize/codeutil.py b/ipyparallel/serialize/codeutil.py
index 2d3acfa2a..80d107765 100644
--- a/ipyparallel/serialize/codeutil.py
+++ b/ipyparallel/serialize/codeutil.py
@@ -27,7 +27,8 @@ def code_ctor(*args):
 }
 # pass every supported arg to the code constructor
 # this should be more forward-compatible
-if sys.version_info >= (3, 10):
+# (broken on pypy: https://github.com/ipython/ipyparallel/issues/845)
+if sys.version_info >= (3, 10) and not hasattr(sys, "pypy_version_info"):
     _code_attr_names = tuple(
         _code_attr_map.get(name, name)
         for name, param in inspect.signature(types.CodeType).parameters.items()
