From eafa4b48b21d001955441d1a5f469426c01a2bf5 Mon Sep 17 00:00:00 2001 From: Denis Rouzaud Date: Wed, 25 Sep 2024 07:06:11 +0200 Subject: [PATCH] fix Python API compatibility (#58860) * fix Python API compatibility * Update qgis.h --- python/PyQt6/core/auto_additions/qgis.py | 23 +++++++++++++++++------ python/core/__init__.py.in | 2 ++ python/core/auto_additions/qgis.py | 23 +++++++++++++++++------ src/core/qgis.h | 4 ++-- 4 files changed, 38 insertions(+), 14 deletions(-) diff --git a/python/PyQt6/core/auto_additions/qgis.py b/python/PyQt6/core/auto_additions/qgis.py index bb76c4a3058d..0f59f8308705 100644 --- a/python/PyQt6/core/auto_additions/qgis.py +++ b/python/PyQt6/core/auto_additions/qgis.py @@ -727,12 +727,23 @@ Qgis.VectorLayerTypeFlags = lambda flags=0: Qgis.VectorLayerTypeFlag(flags) Qgis.VectorLayerTypeFlags.baseClass = Qgis VectorLayerTypeFlags = Qgis # dirty hack since SIP seems to introduce the flags in module -# monkey patching scoped based enum -Qgis.PythonEmbeddedMode.Never.__doc__ = "Python embedded never run" -Qgis.PythonEmbeddedMode.Ask.__doc__ = "User is prompt before running" -Qgis.PythonEmbeddedMode.SessionOnly.__doc__ = "Only during this session" -Qgis.PythonEmbeddedMode.Always.__doc__ = "Python embedded is always run" -Qgis.PythonEmbeddedMode.NotForThisSession.__doc__ = "Python embedded will not be run for this session" +Qgis.PythonMacroMode = Qgis.PythonEmbeddedMode +# monkey patching scoped based enum +Qgis.Never = Qgis.PythonEmbeddedMode.Never +Qgis.Never.is_monkey_patched = True +Qgis.Never.__doc__ = "Python embedded never run" +Qgis.Ask = Qgis.PythonEmbeddedMode.Ask +Qgis.Ask.is_monkey_patched = True +Qgis.Ask.__doc__ = "User is prompt before running" +Qgis.SessionOnly = Qgis.PythonEmbeddedMode.SessionOnly +Qgis.SessionOnly.is_monkey_patched = True +Qgis.SessionOnly.__doc__ = "Only during this session" +Qgis.Always = Qgis.PythonEmbeddedMode.Always +Qgis.Always.is_monkey_patched = True +Qgis.Always.__doc__ = "Python embedded is always run" +Qgis.NotForThisSession = Qgis.PythonEmbeddedMode.NotForThisSession +Qgis.NotForThisSession.is_monkey_patched = True +Qgis.NotForThisSession.__doc__ = "Python embedded will not be run for this session" Qgis.PythonEmbeddedMode.__doc__ = """Authorisation to run Python Embedded in projects .. versionadded:: 3.40 diff --git a/python/core/__init__.py.in b/python/core/__init__.py.in index 09f137feb535..7f8206958166 100644 --- a/python/core/__init__.py.in +++ b/python/core/__init__.py.in @@ -98,6 +98,8 @@ QgsProviderMetadata = PyProviderMetadata # monkey patch deprecated enum values to maintain API # TODO - remove for QGIS 4.0 +Qgis.PythonMacroMode = Qgis.PythonEmbeddedMode + QgsMarkerLineSymbolLayer.Interval = Qgis.MarkerLinePlacement.Interval QgsMarkerLineSymbolLayer.Vertex = Qgis.MarkerLinePlacement.Vertex QgsMarkerLineSymbolLayer.LastVertex = Qgis.MarkerLinePlacement.LastVertex diff --git a/python/core/auto_additions/qgis.py b/python/core/auto_additions/qgis.py index 917511cb70bc..db67ec7a24bb 100644 --- a/python/core/auto_additions/qgis.py +++ b/python/core/auto_additions/qgis.py @@ -718,12 +718,23 @@ Qgis.VectorLayerTypeFlag.baseClass = Qgis Qgis.VectorLayerTypeFlags.baseClass = Qgis VectorLayerTypeFlags = Qgis # dirty hack since SIP seems to introduce the flags in module -# monkey patching scoped based enum -Qgis.PythonEmbeddedMode.Never.__doc__ = "Python embedded never run" -Qgis.PythonEmbeddedMode.Ask.__doc__ = "User is prompt before running" -Qgis.PythonEmbeddedMode.SessionOnly.__doc__ = "Only during this session" -Qgis.PythonEmbeddedMode.Always.__doc__ = "Python embedded is always run" -Qgis.PythonEmbeddedMode.NotForThisSession.__doc__ = "Python embedded will not be run for this session" +Qgis.PythonMacroMode = Qgis.PythonEmbeddedMode +# monkey patching scoped based enum +Qgis.Never = Qgis.PythonEmbeddedMode.Never +Qgis.Never.is_monkey_patched = True +Qgis.Never.__doc__ = "Python embedded never run" +Qgis.Ask = Qgis.PythonEmbeddedMode.Ask +Qgis.Ask.is_monkey_patched = True +Qgis.Ask.__doc__ = "User is prompt before running" +Qgis.SessionOnly = Qgis.PythonEmbeddedMode.SessionOnly +Qgis.SessionOnly.is_monkey_patched = True +Qgis.SessionOnly.__doc__ = "Only during this session" +Qgis.Always = Qgis.PythonEmbeddedMode.Always +Qgis.Always.is_monkey_patched = True +Qgis.Always.__doc__ = "Python embedded is always run" +Qgis.NotForThisSession = Qgis.PythonEmbeddedMode.NotForThisSession +Qgis.NotForThisSession.is_monkey_patched = True +Qgis.NotForThisSession.__doc__ = "Python embedded will not be run for this session" Qgis.PythonEmbeddedMode.__doc__ = """Authorisation to run Python Embedded in projects .. versionadded:: 3.40 diff --git a/src/core/qgis.h b/src/core/qgis.h index cb981f5bb0b1..14ea99d1f3d4 100644 --- a/src/core/qgis.h +++ b/src/core/qgis.h @@ -399,8 +399,8 @@ class CORE_EXPORT Qgis * Authorisation to run Python Embedded in projects * \since QGIS 3.40 */ - enum class PythonEmbeddedMode : int - { + enum class PythonEmbeddedMode SIP_MONKEYPATCH_SCOPEENUM_UNNEST( Qgis, PythonMacroMode ) : int + { Never = 0, //!< Python embedded never run Ask = 1, //!< User is prompt before running SessionOnly = 2, //!< Only during this session