def pythonToMel(arg): """ convert a python object to a string representing an equivalent value in mel iterables are flattened. mapping types like dictionaries have their key value pairs flattened: { key1 : val1, key2 : val2 } -- > ( key1, val1, key2, val2 ) """ if util.isNumeric(arg): return str(arg) if isinstance(arg, datatypes.Vector): return '<<%f,%f,%f>>' % ( arg[0], arg[1], arg[2] ) if util.isIterable(arg): if util.isMapping(arg): arg = list(_flatten(arg.iteritems())) else: arg = list(_flatten(arg)) forceString = False for each in arg: if not util.isNumeric(each): forceString = True break if forceString: newargs = [ '"%s"' % x for x in arg ] else: newargs = [ str(x) for x in arg ] return '{%s}' % ','.join( newargs ) # in order for PyNodes to get wrapped in quotes we have to treat special cases first, # we cannot simply test if arg is an instance of basestring because PyNodes are not return '"%s"' % cmds.encodeString(str(arg))
def pythonToMel(arg): """ convert a python object to a string representing an equivalent value in mel iterables are flattened. mapping types like dictionaries have their key value pairs flattened: { key1 : val1, key2 : val2 } -- > ( key1, val1, key2, val2 ) """ if arg is None: return '' if arg is True or arg is False: return str(arg).lower() if util.isNumeric(arg): return str(arg) if isinstance(arg, datatypes.Vector): return '<<%f,%f,%f>>' % (arg[0], arg[1], arg[2]) if util.isIterable(arg): if util.isMapping(arg): arg = list(_flatten(arg.iteritems())) else: arg = list(_flatten(arg)) forceString = False for each in arg: if not util.isNumeric(each): forceString = True break if forceString: newargs = ['"%s"' % x for x in arg] else: newargs = [str(x) for x in arg] return '{%s}' % ','.join(newargs) # in order for PyNodes to get wrapped in quotes we have to treat special # cases first, we cannot simply test if arg is an instance of basestring # because PyNodes are not return '"%s"' % cmds.encodeString(str(arg))
def getMelRepresentation(args, recursionLimit=None, maintainDicts=True): """Will return a list which contains each element of the iterable 'args' converted to a mel-friendly representation. :Parameters: recursionLimit : int or None If an element of args is itself iterable, recursionLimit specifies the depth to which iterable elements will recursively search for objects to convert; if ``recursionLimit==0``, only the elements of args itself will be searched for PyNodes - if it is 1, iterables within args will have getMelRepresentation called on them, etc. If recursionLimit==None, then there is no limit to recursion depth. maintainDicts : bool In general, all iterables will be converted to tuples in the returned copy - however, if maintainDicts==True, then iterables for which ``util.isMapping()`` returns True will be returned as dicts. """ if recursionLimit: recursionLimit -= 1 if maintainDicts and util.isMapping(args): newargs = dict(args) argIterable = args.iteritems() isList = False else: newargs = list(args) argIterable = enumerate(args) isList = True for index, value in argIterable: try: newargs[index] = value.__melobject__() except AttributeError: if ((not recursionLimit) or recursionLimit >= 0) and util.isIterable(value): # ...otherwise, recurse if not at recursion limit and it's iterable newargs[index] = getMelRepresentation(value, recursionLimit, maintainDicts) if isList: newargs = tuple(newargs) return newargs
def getMelRepresentation( args, recursionLimit=None, maintainDicts=True): """Will return a list which contains each element of the iterable 'args' converted to a mel-friendly representation. :Parameters: recursionLimit : int or None If an element of args is itself iterable, recursionLimit specifies the depth to which iterable elements will recursively search for objects to convert; if ``recursionLimit==0``, only the elements of args itself will be searched for PyNodes - if it is 1, iterables within args will have getMelRepresentation called on them, etc. If recursionLimit==None, then there is no limit to recursion depth. maintainDicts : bool In general, all iterables will be converted to tuples in the returned copy - however, if maintainDicts==True, then iterables for which ``util.isMapping()`` returns True will be returned as dicts. """ if recursionLimit: recursionLimit -= 1 if maintainDicts and util.isMapping(args): newargs = dict(args) argIterable = args.iteritems() isList = False else: newargs = list(args) argIterable = enumerate(args) isList = True for index, value in argIterable: try: newargs[index] = value.__melobject__() except AttributeError: if ( (not recursionLimit) or recursionLimit >= 0) and util.isIterable(value): # ...otherwise, recurse if not at recursion limit and it's iterable newargs[index] = getMelRepresentation(value, recursionLimit, maintainDicts) if isList: newargs = tuple(newargs) return newargs