From b0cc2e30a9335d63dd1aa4a552d22ce5e11f2c6b Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 7 Nov 2024 16:03:35 +0500 Subject: [PATCH] Fix error starting to edit pset without enum reference/enum values #5707 Traceback Error: Python: Traceback (most recent call last): File "\bonsai\bim\module\pset\operator.py", line 62, in execute core.enable_pset_editing(tool.Pset, pset, self.pset_name, self.pset_type, self.obj, self.obj_type) File "\bonsai\core\pset.py", line 86, in enable_pset_editing pset_tool.import_pset_from_existing(pset, props) File "\bonsai\tool\pset.py", line 121, in import_pset_from_existing metadata.set_value(prop.EnumerationReference.EnumerationValues[0].wrappedValue) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'EnumerationValues' --- src/bonsai/bonsai/tool/pset.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/bonsai/bonsai/tool/pset.py b/src/bonsai/bonsai/tool/pset.py index 1a0177e825..f420b7b1c6 100644 --- a/src/bonsai/bonsai/tool/pset.py +++ b/src/bonsai/bonsai/tool/pset.py @@ -118,12 +118,25 @@ class Pset(bonsai.core.tool.Pset): metadata.name = prop.Name metadata.is_null = len(simple_prop.enumerated_value.enumerated_values) == 0 metadata.is_optional = True - metadata.set_value(prop.EnumerationReference.EnumerationValues[0].wrappedValue) + enum_reference = prop.EnumerationReference + selected_enum_items = [v.wrappedValue for v in (prop.EnumerationValues or ())] - enum_items = [v.wrappedValue for v in prop.EnumerationReference.EnumerationValues] - selected_enum_items = [v.wrappedValue for v in prop.EnumerationValues] - data_type = metadata.get_value_name(display_only=True) + # If there is no reference, then just use the current values. + if enum_reference is None: + enum_items = selected_enum_items + else: + enum_items = [v.wrappedValue for v in enum_reference.EnumerationValues] + # In theory there could be no reference and no current values, + # nothing to show then, I guess. + if not enum_items: + continue + + # Trigger metadata to detect data_type. + metadata.set_value(enum_items[0]) + data_type = metadata.get_value_name() + + # Fill enum items. for enum in enum_items: new = simple_prop.enumerated_value.enumerated_values.add() setattr(new, data_type, enum)