code: def convert(obj, ids, attr_type, item_func, cdata, parent='root'):
      
      
      LOG.info('Inside convert(). obj type is: "%s", obj="%s"' % (type(obj).__name__, unicode_me(obj)))
      
      item_name = item_func(parent)
      
      if isinstance(obj, numbers.Number) or type(obj) in (str, unicode):
          return convert_kv(item_name, obj, attr_type, cdata)
          
      if hasattr(obj, 'isoformat'):
          return convert_kv(item_name, obj.isoformat(), attr_type, cdata)
          
      if type(obj) == bool:
          return convert_bool(item_name, obj, attr_type, cdata)
          
      if obj is None:
          return convert_none(item_name, '', attr_type, cdata)
          
      if isinstance(obj, dict):
          return convert_dict(obj, ids, parent, attr_type, item_func, cdata)
          
      if isinstance(obj, collections.Iterable):
          return convert_list(obj, ids, parent, attr_type, item_func, cdata)
          
      raise TypeError('Unsupported data type: %s (%s)' % (obj, type(obj).__name__))
docs: Routes the elements of an object to the right function to convert them 
      based on their data type