code: def search(self, path, values=None, unique=False, raise_absent=False, vfunc=lambda x: x):
          
          path_and_value_list = iterutils.search(
                  self.data,
                  path=path,
                  required_values=values)
  
          # print 'search found ', [x[0] for x in path_and_value_list]
  
          return self.__return_value(path_and_value_list, unique, raise_absent, vfunc)
docs: Return single model object instance matching given criteria
         :param path: tuple or dpath expression representing the hierarchy/chain of parent keys
         :param values: single value or list of values to match. If exact is False then .contains method is used as filter
         :param raise_absent: if True then raise exception if no match is found
         :return: list matching ojects directly from data/config in the form of ((k1, k2, .., kn), value)