code: def _obfuscate_inner(var):
      '''
      Recursive obfuscation of collection types.
  
      Leaf or unknown Python types get replaced by the type name
      Known collection types trigger recursion.
      In the special case of mapping types, keys are not obfuscated
      '''
      if isinstance(var, (dict, salt.utils.odict.OrderedDict)):
          return var.__class__((key, _obfuscate_inner(val))
                               for key, val in six.iteritems(var))
      elif isinstance(var, (list, set, tuple)):
          return type(var)(_obfuscate_inner(v) for v in var)
      else:
          return '<{0}>'.format(var.__class__.__name__f _obfuscate_inner(var):
      '''
      Recursive obfuscation of collection types.
  
      Leaf or unknown Python types get replaced by the type name
      Known collection types trigger recursion.
      In the special case of mapping types, keys are not obfuscated
      '''
      if isinstance(var, (dict, salt.utils.odict.OrderedDict)):
          return var.__class__((key, _obfuscate_inner(val))
                               for key, val in six.iteritems(var))
      elif isinstance(var, (list, set, tuple)):
          return type(var)(_obfuscate_inner(v) for v in var)
      else:
          return '<{0}>'.format(var.__class__.__name__)
docs: Recursive obfuscation of collection types.
  
      Leaf or unknown Python types get replaced by the type name
      Known collection types trigger recursion.
      In the special case of mapping types, keys are not obfuscated