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: matching object from cache if already created or new if not

def obj(self, path=None, model=None, values=None, raise_absent=False):
        """
       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: matching object from cache if already created or new if not
       """
        return self.search(path=path, unique=True, raise_absent=raise_absent, values=values,
                            vfunc=lambda x: self.path_index[x[0]].instance(model=model) if x[0] in self.path_index else None)