Skip to content

Commit 580ee60

Browse files
authored
bug fix: make cached view function make_cache_key attr writeable (#431)
fixes #97. this matches how memoize already does the same thing on line 839: cache_key = decorated_function.make_cache_key(f, *args, **kwargs)
1 parent 972c666 commit 580ee60

File tree

3 files changed

+31
-2
lines changed

3 files changed

+31
-2
lines changed

CHANGES.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Version 2.0.2
55
-------------
66

77
- migrate ``flask_caching.backends.RedisCluster`` dependency from redis-py-cluster to redis-py
8+
- bug fix: make the ``make_cache_key`` attributed of decorated view functions writeable. :pr:`431`, issue `#97`
89

910
Version 2.0.1
1011
-------------

src/flask_caching/__init__.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ def decorated_function(*args, **kwargs):
363363
if make_cache_key is not None and callable(make_cache_key):
364364
cache_key = make_cache_key(*args, **kwargs)
365365
else:
366-
cache_key = _make_cache_key(args, kwargs, use_request=True)
366+
cache_key = decorated_function.make_cache_key(*args, use_request=True, **kwargs)
367367

368368
if (
369369
callable(forced_update)
@@ -430,7 +430,8 @@ def default_make_cache_key(*args, **kwargs):
430430
for arg_name, arg in zip(argspec_args, args):
431431
kwargs[arg_name] = arg
432432

433-
return _make_cache_key(args, kwargs, use_request=False)
433+
use_request = kwargs.pop('use_request', False)
434+
return _make_cache_key(args, kwargs, use_request=use_request)
434435

435436
def _make_cache_key_query_string():
436437
"""Create consistent keys for query string arguments.

tests/test_view.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,33 @@ def cached_view():
211211
assert the_time == cache_data
212212

213213

214+
def test_set_make_cache_key_property(app, cache):
215+
@app.route("/")
216+
@cache.cached(5)
217+
def cached_view():
218+
return str(time.time())
219+
220+
cached_view.make_cache_key = lambda *args, **kwargs: request.args['foo']
221+
222+
tc = app.test_client()
223+
224+
rv = tc.get("/?foo=a")
225+
a = rv.data.decode("utf-8")
226+
227+
rv = tc.get("/?foo=b")
228+
b = rv.data.decode("utf-8")
229+
assert a != b
230+
231+
tc = app.test_client()
232+
rv = tc.get("/?foo=a")
233+
a_2 = rv.data.decode("utf-8")
234+
assert a == a_2
235+
236+
rv = tc.get("/?foo=b")
237+
b_2 = rv.data.decode("utf-8")
238+
assert b == b_2
239+
240+
214241
def test_make_cache_key_function_property(app, cache):
215242
@app.route("/<foo>/<bar>")
216243
@cache.memoize(5)

0 commit comments

Comments
 (0)