From b420f26e9b6d42c2f6d8698ba57ad822d5e3bf57 Mon Sep 17 00:00:00 2001 From: hackjammer Date: Thu, 5 Jan 2023 18:44:40 +0000 Subject: [PATCH] transparent passthrough in the event of backend connection issues --- CHANGELOG.md | 1 + fastapi_cache/decorator.py | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a136d3b..47c7187 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### 0.2.1 - Support cache jinja2 template response. +- Transparently handle backend connection failures. ### 0.2.0 diff --git a/fastapi_cache/decorator.py b/fastapi_cache/decorator.py index 6869885..bf1ccff 100644 --- a/fastapi_cache/decorator.py +++ b/fastapi_cache/decorator.py @@ -123,13 +123,18 @@ def cache( args=args, kwargs=copy_kwargs, ) - - ttl, ret = await backend.get_with_ttl(cache_key) + try: + ttl, ret = await backend.get_with_ttl(cache_key) + except ConnectionError: + ttl, ret = 0, None if not request: if ret is not None: return coder.decode(ret) ret = await ensure_async_func(*args, **kwargs) - await backend.set(cache_key, coder.encode(ret), expire or FastAPICache.get_expire()) + try: + await backend.set(cache_key, coder.encode(ret), expire or FastAPICache.get_expire()) + except ConnectionError: + pass return ret if request.method != "GET": @@ -148,7 +153,10 @@ def cache( ret = await ensure_async_func(*args, **kwargs) - await backend.set(cache_key, coder.encode(ret), expire or FastAPICache.get_expire()) + try: + await backend.set(cache_key, coder.encode(ret), expire or FastAPICache.get_expire()) + except ConnectionError: + pass return ret return inner