Skip to content

Commit 8891126

Browse files
committed
Ensure default arguments are included in hash key generation.
1 parent 8c16306 commit 8891126

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

cache_helper/decorators.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ def _get_function_cache_keys(func_name: str, func_signature: Signature, args: tu
2929
:return: A tuple containing the hashed cache key and the non-hashed cache key.
3030
"""
3131
bound_arguments = func_signature.bind(*args, **kwargs)
32+
bound_arguments.apply_defaults()
3233
function_cache_key = utils.get_function_cache_key(func_name, bound_arguments.args, bound_arguments.kwargs)
3334
hashed_function_cache_key = utils.get_hashed_cache_key(function_cache_key)
3435
return hashed_function_cache_key, function_cache_key

test_project/test_project/tests.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,21 @@ def test_cache_key_consistency_mismatched_instance_args(self):
321321
inc_2 = incrementer.instance_increment_by_with_kwargs(num=6, useless_kwarg=datetime(2025, 4, 28))
322322
self.assertEqual(inc_1, inc_2)
323323

324+
def test_cache_key_consistency_mismatched_instance_args_with_default(self):
325+
incrementer = Incrementer(100)
326+
327+
inc_1 = incrementer.instance_increment_by_with_kwargs(1)
328+
inc_2 = incrementer.instance_increment_by_with_kwargs(1, None)
329+
self.assertEqual(inc_1, inc_2)
330+
331+
inc_1 = incrementer.instance_increment_by_with_kwargs(2)
332+
inc_2 = incrementer.instance_increment_by_with_kwargs(2, useless_kwarg=None)
333+
self.assertEqual(inc_1, inc_2)
334+
335+
inc_1 = incrementer.instance_increment_by_with_kwargs(3, None)
336+
inc_2 = incrementer.instance_increment_by_with_kwargs(3, useless_kwarg=None)
337+
self.assertEqual(inc_1, inc_2)
338+
324339

325340
class CachedClassMethodTests(TestCase):
326341

@@ -499,6 +514,19 @@ def test_cache_key_consistency_mismatched_class_args(self):
499514
inc_2 = Incrementer.class_increment_by_with_kwargs(num=6, useless_kwarg=datetime(2025, 4, 28))
500515
self.assertEqual(inc_1, inc_2)
501516

517+
def test_cache_key_consistency_mismatched_class_args_with_default(self):
518+
inc_1 = Incrementer.class_increment_by_with_kwargs(1)
519+
inc_2 = Incrementer.class_increment_by_with_kwargs(1, None)
520+
self.assertEqual(inc_1, inc_2)
521+
522+
inc_1 = Incrementer.class_increment_by_with_kwargs(2)
523+
inc_2 = Incrementer.class_increment_by_with_kwargs(2, useless_kwarg=None)
524+
self.assertEqual(inc_1, inc_2)
525+
526+
inc_1 = Incrementer.class_increment_by_with_kwargs(3, None)
527+
inc_2 = Incrementer.class_increment_by_with_kwargs(3, useless_kwarg=None)
528+
self.assertEqual(inc_1, inc_2)
529+
502530

503531
class CachedStaticMethodTests(TestCase):
504532
def setUp(self):
@@ -677,6 +705,19 @@ def test_cache_key_consistency_mismatched_static_args(self):
677705
dt_2 = Incrementer.get_datetime(useless_arg='test', useless_kwarg=datetime(2025, 4, 28))
678706
self.assertEqual(dt_1, dt_2)
679707

708+
def test_cache_key_consistency_mismatched_static_args_with_default(self):
709+
dt_1 = Incrementer.get_datetime('test')
710+
dt_2 = Incrementer.get_datetime('test', None)
711+
self.assertEqual(dt_1, dt_2)
712+
713+
dt_1 = Incrementer.get_datetime('test')
714+
dt_2 = Incrementer.get_datetime('test', useless_kwarg=None)
715+
self.assertEqual(dt_1, dt_2)
716+
717+
dt_1 = Incrementer.get_datetime('test', None)
718+
dt_2 = Incrementer.get_datetime('test', useless_kwarg=None)
719+
self.assertEqual(dt_1, dt_2)
720+
680721

681722
class CacheHelperCacheableTests(TestCase):
682723
def tearDown(self):

0 commit comments

Comments
 (0)