def wrapper(func):
        func = api_etag(**outkwargs)(func)

        @wraps(func)
        def wrapped_func(self, request, *args, **kwargs):
            try:
                changeset = request.changeset
            except AttributeError:
                changeset = ChangeSet.get_for_request(request)
                request.changeset = changeset

            update_cache_key = request.changeset.raw_cache_key_without_changes
            update_cache_key_match = request.GET.get('update_cache_key') == update_cache_key
            return func(self, request, *args,
                        update_cache_key=update_cache_key, update_cache_key_match=update_cache_key_match,
                        **kwargs)
        return wrapped_func