def stamped(func, update=False): """ Decorator which takes the first argument after "self" and compares that to the last modification time. If the stamp is older, then the method call will throw an omero.OptimisticLockException. Otherwise, execution will complete normally. If update is True, then the last modification time will be updated after the method call if it is successful. Note: stamped implies locked """ def check_and_update_stamp(*args, **kwargs): self = args[0] stamp = args[1] if stamp < self._stamp: raise omero.OptimisticLockException( None, None, "Resource modified by another thread") try: return func(*args, **kwargs) finally: if update: self._stamp = time.time() check_and_update_stamp = wraps(func)(check_and_update_stamp) return locked(check_and_update_stamp)
def stamped(func, update = False): """ Decorator which takes the first argument after "self" and compares that to the last modification time. If the stamp is older, then the method call will throw an omero.OptimisticLockException. Otherwise, execution will complete normally. If update is True, then the last modification time will be updated after the method call if it is successful. Note: stamped implies locked """ def check_and_update_stamp(*args, **kwargs): self = args[0] stamp = args[1] if stamp < self._stamp: raise omero.OptimisticLockException(None, None, "Resource modified by another thread") try: return func(*args, **kwargs) finally: if update: self._stamp = time.time() checked_and_update_stamp = wraps(func)(check_and_update_stamp) return locked(check_and_update_stamp)