import functools from core_images.cached_either import Right, Left from core_images.consts import NO_IMAGE_CACHE_VALUE def cache_method(func): @functools.wraps(func) def decorated_func(self, *args, **kwargs): cache_key = [func.__name__, *args, *kwargs.values()] url = self.cache_get(cache_key) if url == NO_IMAGE_CACHE_VALUE: return Left(self.NO_IMAGE_MSG, True) elif url: return Right(url, True) result = func(self, *args, **kwargs) if result.is_right: self.cache_set(cache_key, result.value) else: self.cache_set(cache_key, NO_IMAGE_CACHE_VALUE) return result return decorated_func