Fix Fusion 18.6+ support: Avoid issues with Fusion's BlackmagicFusion.PyRemoteObject instances being unhashable.

```python
Traceback (most recent call last):
  File "E:\openpype\OpenPype\.venv\lib\site-packages\pyblish\plugin.py", line 527, in __explicit_process
    runner(*args)
  File "E:\openpype\OpenPype\openpype\hosts\fusion\plugins\publish\extract_render_local.py", line 61, in process
    result = self.render(instance)
  File "E:\openpype\OpenPype\openpype\hosts\fusion\plugins\publish\extract_render_local.py", line 118, in render
    with enabled_savers(current_comp, savers_to_render):
  File "C:\Users\User\AppData\Local\Programs\Python\Python39\lib\contextlib.py", line 119, in __enter__
    return next(self.gen)
  File "E:\openpype\OpenPype\openpype\hosts\fusion\plugins\publish\extract_render_local.py", line 33, in enabled_savers
    original_states[saver] = original_state
TypeError: unhashable type: 'BlackmagicFusion.PyRemoteObject'
```
This commit is contained in:
Roy Nieterau 2023-10-02 16:24:23 +02:00
parent baf6945b4d
commit 8267736bed

View file

@ -25,12 +25,13 @@ def enabled_savers(comp, savers):
"""
passthrough_key = "TOOLB_PassThrough"
original_states = {}
savers_by_name = {saver.Name: saver for saver in savers}
enabled_save_names = {saver.Name for saver in savers}
try:
all_savers = comp.GetToolList(False, "Saver").values()
for saver in all_savers:
original_state = saver.GetAttrs()[passthrough_key]
original_states[saver] = original_state
original_states[saver.Name] = original_state
# The passthrough state we want to set (passthrough != enabled)
state = saver.Name not in enabled_save_names
@ -38,7 +39,8 @@ def enabled_savers(comp, savers):
saver.SetAttrs({passthrough_key: state})
yield
finally:
for saver, original_state in original_states.items():
for saver_name, original_state in original_states.items():
saver = savers_by_name.get(saver_name)
saver.SetAttrs({"TOOLB_PassThrough": original_state})