def cleaner(self, node, channels=['']):
        """
        SYNOPSIS
         locks and hides

        INPUTS
         (string) 		node:		node to lock
         ([strings]) channels:	channels to remain keyable

        RETURNS: nothing
        """
        # make sure not list
        if node.__class__ == list:
            node = node[0]

        # skip if node doesn't exist
        if not objExists(node):
            if objExists:
                pass
            self.logger.warning("metarigging.cleaner(): node '%s' doesn't exist, skipping cleaning" % node)
            return

        # convert to pyNode
        node = self.convertToPyNode(node)

        # gets current channel box info
        keyableList = listAttr(node, keyable=1)  # need to be locked and hidden
        nonKeyableList = listAttr(node, channelBox=1)  # need to be hidden

        # locks and hides unless in channel list
        if keyableList:
            for keyable in keyableList:
                if len(keyable.split('.')) == 1:
                    if channels.count(keyable) == 0:
                        setAttr((node, keyable) % '%s.%s', lock=True, keyable=False)

        # hides non-keyable
        if nonKeyableList:
            for nonKeyable in nonKeyableList:
                node.attr(nonKeyable).lock()
                node.attr(nonKeyable).showInChannelBox(0)
dataset/ETHPy150Open CountZer0/PipelineConstructionSet/python/maya/core/mayaCore.py/MayaMiscCore.cleaner/swapped operands of `%`