# Path: src/pulse/scripts/pulse/rigs.py
# RIG_METACLASS = 'pulse_rig'
# 
# Path: src/pulse/scripts/pulse/serializer.py
# class UnsortableOrderedDict(OrderedDict):
#     def items(self, *args, **kwargs):
#         return UnsortableList(OrderedDict.items(self, *args, **kwargs))


import logging
import os
import re
import maya.cmds as cmds
import pymetanode as meta
from .rigs import RIG_METACLASS
from .serializer import UnsortableOrderedDict
        Args:
            attrName (str): The name of a BuildAction attribute
        """
        return self._attrValues.get(attrName, default)

    def getAttrValueOrDefault(self, attrName):
        if attrName in self._attrValues:
            return self._attrValues[attrName]
        else:
            config = self.getAttrConfig(attrName)
            if config:
                return self.getAttrDefaultValue(config)
            else:
                LOG.warning("BuildActionData attribute "
                            "not found: {0}".format(attrName))

    def setAttrValue(self, attrName, value):
        if value is None:
            self.delAttrValue(attrName)
        else:
            self._attrValues[attrName] = value

    def delAttrValue(self, attrName):
        if attrName in self._attrValues:
            del self._attrValues[attrName]

    def serialize(self):
        """
        Return this BuildActionData as a serialized dict object
        """

# Path: src/pulse/scripts/pulse/rigs.py
# RIG_METACLASS = 'pulse_rig'
# 
# Path: src/pulse/scripts/pulse/serializer.py
# class UnsortableOrderedDict(OrderedDict):
#     def items(self, *args, **kwargs):
#         return UnsortableList(OrderedDict.items(self, *args, **kwargs))


# Path: src/pulse/scripts/pulse/buildItems.py
import logging
import os
import re
import maya.cmds as cmds
import pymetanode as meta
from .rigs import RIG_METACLASS
from .serializer import UnsortableOrderedDict

        Args:
            attrName (str): The name of a BuildAction attribute
        """
        return self._attrValues.get(attrName, default)

    def getAttrValueOrDefault(self, attrName):
        if attrName in self._attrValues:
            return self._attrValues[attrName]
        else:
            config = self.getAttrConfig(attrName)
            if config:
                return self.getAttrDefaultValue(config)
            else:
                LOG.warning("BuildActionData attribute "
                            "not found: {0}".format(attrName))

    def setAttrValue(self, attrName, value):
        if value is None:
            self.delAttrValue(attrName)
        else:
            self._attrValues[attrName] = value

    def delAttrValue(self, attrName):
        if attrName in self._attrValues:
            del self._attrValues[attrName]

    def serialize(self):
        """
        Return this BuildActionData as a serialized dict object
        """

        data = UnsortableOrderedDict()