Skip to content

Commit 979eaf8

Browse files
committed
Use qualname to avoid key collisions
1 parent c170666 commit 979eaf8

2 files changed

Lines changed: 31 additions & 4 deletions

File tree

dogpile/cache/util.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from hashlib import sha1
22

3-
from ..util import compat
4-
from ..util import langhelpers
3+
from ..util import compat, langhelpers
54

65

76
def function_key_generator(namespace, fn, to_str=str):
@@ -24,9 +23,9 @@ def function_key_generator(namespace, fn, to_str=str):
2423
"""
2524

2625
if namespace is None:
27-
namespace = "%s:%s" % (fn.__module__, fn.__name__)
26+
namespace = "%s:%s" % (fn.__module__, fn.__qualname__)
2827
else:
29-
namespace = "%s:%s|%s" % (fn.__module__, fn.__name__, namespace)
28+
namespace = "%s:%s|%s" % (fn.__module__, fn.__qualname__, namespace)
3029

3130
args = compat.inspect_getargspec(fn)
3231
has_self = args[0] and args[0][0] in ("self", "cls")

tests/cache/test_util.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from dogpile.cache import util
2+
3+
4+
class A:
5+
@classmethod
6+
def class_method(cls):
7+
pass
8+
9+
@staticmethod
10+
def static_method():
11+
pass
12+
13+
def instance_method(self):
14+
pass
15+
16+
17+
def test_function_key_generator():
18+
key_generator = util.function_key_generator(None, A.class_method)
19+
assert key_generator() == "tests.cache.test_util:A.class_method|"
20+
21+
key_generator = util.function_key_generator(None, A.static_method)
22+
assert key_generator() == "tests.cache.test_util:A.static_method|"
23+
24+
key_generator = util.function_key_generator(None, A.instance_method)
25+
assert key_generator() == "tests.cache.test_util:A.instance_method|"
26+
27+
key_generator = util.function_key_generator("namespace", A.class_method)
28+
assert key_generator() == "tests.cache.test_util:A.class_method|namespace|"

0 commit comments

Comments
 (0)