Raising ViewNotMatched when applied request was not apposite.

    preserve_view calls all Predicates and when return values of them was
    all True it will call a wrapped view.
    It raises ViewNotMatched if this is not the case.

    Predicates:
    This decorator takes Predicates one or more, Predicate is callable
    to return True or False in response to inputted request.
    If the request was apposite it should return True.

def preserve_view(*predicates):
    """ Raising ViewNotMatched when applied request was not apposite.

    preserve_view calls all Predicates and when return values of them was
    all True it will call a wrapped view.
    It raises ViewNotMatched if this is not the case.

    Predicates:
    This decorator takes Predicates one or more, Predicate is callable
    to return True or False in response to inputted request.
    If the request was apposite it should return True.
    """
    def wrapper(view_callable):
        def _wrapped(self, request, context, *args, **kwargs):
            if all([predicate(request, context) for predicate in predicates]):
                return view_callable(self, request, context, *args, **kwargs)
            else:
                raise ViewNotMatched
        return _wrapped
    return wrapper