def mutator(*cache_names):
    """Decorator for ``Document`` methods that change the document.

    This decorator ensures that the object's caches are kept in sync
    when changes are made.

    """
    def deco(fn):
        @wraps(fn)
        def _fn(self, *args, **kwargs):
            try:
                return fn(self, *args, **kwargs)
            finally:
                for cache_name in cache_names:
                    setattr(self, cache_name, None)

        return _fn

    return deco
def mutator ( * cache_names ) : def deco ( fn ) : @ wraps ( fn ) def _fn ( self , * args , ** kwargs ) : try : return fn ( self , * args , ** kwargs ) finally : for cache_name in cache_names : setattr ( self , cache_name , None ) return _fn return deco
Decorator for ``Document`` methods that change the document.

    This decorator ensures that the object's caches are kept in sync
    when changes are made.