From e9dc88b63192c31f110f1be205dd7cdcfdc58bb5 Mon Sep 17 00:00:00 2001 From: Jimmy-Lee Boisvert Date: Thu, 21 May 2020 15:42:25 -0400 Subject: [PATCH 1/2] Fix KeyError when calling pyblish_qml.show() more than once --- pyblish_qml/host.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pyblish_qml/host.py b/pyblish_qml/host.py index 772de26..e9a0b40 100644 --- a/pyblish_qml/host.py +++ b/pyblish_qml/host.py @@ -191,8 +191,14 @@ def install_callbacks(): def uninstall_callbacks(): - pyblish.api.deregister_callback("instanceToggled", _toggle_instance) - pyblish.api.deregister_callback("pluginToggled", _toggle_plugin) + try: + pyblish.api.deregister_callback("instanceToggled", _toggle_instance) + except (KeyError, ValueError): + pass + try: + pyblish.api.deregister_callback("pluginToggled", _toggle_plugin) + except (KeyError, ValueError): + pass def _toggle_instance(instance, new_value, old_value): From b874b2362d194f72617d66974febf4b33d88d5d6 Mon Sep 17 00:00:00 2001 From: Jimmy-Lee Boisvert Date: Mon, 25 May 2020 12:09:10 -0400 Subject: [PATCH 2/2] WIP install callbacks separately from the main install --- pyblish_qml/host.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/pyblish_qml/host.py b/pyblish_qml/host.py index e9a0b40..44f430e 100644 --- a/pyblish_qml/host.py +++ b/pyblish_qml/host.py @@ -64,7 +64,6 @@ def install(modal): use_threaded_wrapper = not modal - install_callbacks() install_host(use_threaded_wrapper) _state["installed"] = True @@ -103,8 +102,12 @@ def show(parent=None, # getting all plugins on pyblish_qml.show(). targets = ["default"] + pyblish.api.registered_targets() + # Install event handlers. + install_callbacks() + # Automatically install if not already installed. - install(modal) + if not _state.get("installed"): + install(modal) show_settings = settings.to_dict() show_settings['autoPublish'] = auto_publish @@ -186,19 +189,22 @@ def quit(proxy): def install_callbacks(): + uninstall_callbacks() + pyblish.api.register_callback("instanceToggled", _toggle_instance) pyblish.api.register_callback("pluginToggled", _toggle_plugin) def uninstall_callbacks(): - try: + registered_callbacks = pyblish.api.registered_callbacks() + instance_toggled_callbacks = registered_callbacks.get("instanceToggled", []) + plugin_toggled_callbacks = registered_callbacks.get("pluginToggled", []) + + if _toggle_instance in instance_toggled_callbacks: pyblish.api.deregister_callback("instanceToggled", _toggle_instance) - except (KeyError, ValueError): - pass - try: + + if _toggle_plugin in plugin_toggled_callbacks: pyblish.api.deregister_callback("pluginToggled", _toggle_plugin) - except (KeyError, ValueError): - pass def _toggle_instance(instance, new_value, old_value):