From 2faf86d2493bbeb133dcb11da4a68b14b8dcd2f7 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 25 Sep 2023 13:31:14 +0200 Subject: [PATCH] App: still support __getstate__/__setstate__ for add-ons for < Py3.11 --- src/App/PropertyPythonObject.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/App/PropertyPythonObject.cpp b/src/App/PropertyPythonObject.cpp index 837c3a5337..0efc797efb 100644 --- a/src/App/PropertyPythonObject.cpp +++ b/src/App/PropertyPythonObject.cpp @@ -92,6 +92,14 @@ std::string PropertyPythonObject::toString() const Py::Callable state(this->object.getAttr("dumps")); dump = state.apply(args); } +#if PY_VERSION_HEX < 0x030b0000 + // support add-ons that use the old method names + else if (this->object.hasAttr("__getstate__")) { + Py::Tuple args; + Py::Callable state(this->object.getAttr("__getstate__")); + dump = state.apply(args); + } +#endif else if (this->object.hasAttr("__dict__")) { dump = this->object.getAttr("__dict__"); } @@ -135,6 +143,15 @@ void PropertyPythonObject::fromString(const std::string& repr) Py::Callable state(this->object.getAttr("loads")); state.apply(args); } +#if PY_VERSION_HEX < 0x030b0000 + // support add-ons that use the old method names + else if (this->object.hasAttr("__setstate__")) { + Py::Tuple args(1); + args.setItem(0, res); + Py::Callable state(this->object.getAttr("__setstate__")); + state.apply(args); + } +#endif else if (this->object.hasAttr("__dict__")) { if (!res.isNone()) { this->object.setAttr("__dict__", res);