docs: def typename(self):
          '''
          get the type of val
  
          there are multiple places where we want to know if val is an object, or a string, or whatever,
          this method allows us to find out that information
  
          since -- 7-10-12
  
          val -- mixed -- the value to check
  
          return -- string -- the type
          '''
          t = 'DEFAULT'
          # http://docs.python.org/2/library/types.html
  #         func_types = (
  #             types.FunctionType,
  #             types.BuiltinFunctionType,
  #             types.MethodType,
  #             types.UnboundMethodType,
  #             types.BuiltinFunctionType,
  #             types.BuiltinMethodType,
  #             classmethod
  #         )
  
          if self.is_primitive():
              t = 'DEFAULT'
  
          elif self.is_dict():
              t = 'DICT'
  
          elif self.is_list():
              t = 'LIST'
  
          elif self.is_array():
              t = 'ARRAY'
  
          elif self.is_tuple():
              t = 'TUPLE'
  
          elif self.is_type():
              t = 'TYPE'
  
          elif self.is_binary():
              t = 'BINARY'
  
          elif self.is_str():
              t = 'STRING'
  
          elif self.is_exception():
              t = 'EXCEPTION'
  
          elif self.is_module():
              # this has to go before the object check since a module will pass the object tests
              t = 'MODULE'
  
          elif self.is_callable():
              t = 'FUNCTION'
  
              # not doing this one since it can cause the class instance to do unexpected
              # things just to print it out
              #elif isinstance(val, property):
              # uses the @property decorator and the like
              #t = 'PROPERTY'
  
          elif self.is_dict_proxy():
              # maybe we have a dict proxy?
              t = 'DICT_PROXY'
  
          elif self.is_generator():
              t = 'GENERATOR'
  
          elif self.is_set():
              t = 'SET'
  
          elif self.is_object():
              t = 'OBJECT'
  
  #         elif isinstance(val, func_types) and hasattr(val, '__call__'):
  #             # this has to go after object because lots of times objects can be classified as functions
  #             # http://stackoverflow.com/questions/624926/
  #             t = 'FUNCTION'
  
          elif self.is_regex():
              t = 'REGEX'
  
          else:
              t = 'DEFAULT'
  
          return t