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)

def search(self, path, values=None, unique=False, raise_absent=False, vfunc=lambda x: x):
        """
       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)
       """
        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)