Attribute Builder (Python, experimental)¶
An extension to the Python API is available for editing attribute components
from a dictionary-style specificiation. The API is implemented as a single
Python class smtk.attribute_builder.AttributeBuilder. The initial
use for this feature is for replaying Python operation traces. To support this,
the following method is provided:
- smtk.attribute_builder.AttributeBuilder.build_attribute(self, att: smtk.attribute.Attribute, spec: dict:[str, list], resource_dict:[str, smtk.resource.Resource]=None) None¶
This method modifies the contents of the input attribute based on the input
specification. In addition to the attribute and specification arguments, the
builder_attribute() method includes an optional resource_dict
argument for specifying SMTK resource instances that can be referenced in the
specification dictionary.
Specification¶
The input specification is a Python dictionary object with two fields for
specifying a list of associations and a list of items.
Here is an example of the specification format:
{
'associations': [{'resource': 'model'}],
'items': [
{'path': 'string-item', 'value': 'xyzzy'},
{'path': '/double-item', 'value': [3.14159, None, 2.71828]},
{'path': 'int-item', 'enabled': True, 'value': 2},
{'path': 'int-item/conditional-double', 'value': 42.42},
{'path': 'comp-item', 'value': [
{'resource': 'model', 'component': 'casting'},
{'resource': 'model', 'component': 'symmetry'},
]},
{'path': '/group-item/subgroup-double', 'value': 73.73},
]
}
Note
The current implementation will raises a Python exception if it encounters a syntax error in the specification or if some editing step fails.
Associations List¶
Attribute associations are specified by a list of dictionary items. Each item
includes a resource key with its value set to one of the keys in the
resource dictionary (passed in to the build_attribute() method).
This is sufficient to specify a resource association.
To specify a component belonging to a resource, a component field
is added to specify the name of the component.
Items List¶
Item modifications are specified by a list of dictionary items. The fields for
each dictionary item can include path (required),
enabled, and value.
The
pathfield specifies the path from the attribute to the item being specified. It uses the same syntax as thesmtk.attribute.Attribute.itemAtPath()method, with forward slash as the separator and the :py:attr:activeOnly argument set to :py:const:false. (Starting the path with a forward slash is optional.)The
valuefield is for setting the item value. This can be a single value or a list of values. The type (string, int, float) and number of values must be consistent with the item and its corresponding item-definition, of course. ForReferenceItem,ComponentItem, andResourceItem, the value is specified using the same syntax used in theassociationslist. If the value, or any of the values in a list, areNonethe corresponding item value will beunset.The
enabledfield is for setting the item’s enabled state.Extensible group items may have several sub-groups. The
countfield for a group item specifies the number of sub-groups. Items in a sub-group use integer index N in their path to specify which sub group they belong to. For example:
- {
- ‘items’: [
{‘path’: ‘/group-item’, ‘count’: 2}, {‘path’: ‘/group-item/0/subgroup-double’, ‘value’: 73.73}, {‘path’: ‘/group-item/1/subgroup-double’, ‘value’: 83.83},
]
}
If an item belonging to a group needs to have a name that is an integer, it should always be preceded by the sub-group index.