def _make_key(self, args): """ :param args: the dict of final callargs :return: str """ func = self.__func__ owner = self.im_class if owner: spec = get_qualname(owner) + "." + func.__name__ else: spec = get_qualname(func) if args: s = [] for k in sorted(args.keys()): v = args[k] s.append('{0}={1!r}'.format(k, v)) spec += '({0})'.format(','.join(s)) else: spec += '()' return spec
def test_basic(self): def f(): pass class Desc(object): def __get__(self, obj, instance=None): pass class A(object): desc = Desc() def im(self): pass @classmethod def cm(cls): pass @staticmethod def sm(): pass # assignment to class makes f a method A.f = f a = A() # assignment to instance doesn't make f a method a.ff = f self.assertEqual(get_qualname(f), 'yzcache.tests.f') self.assertEqual(get_qualname(A), 'yzcache.tests.A') self.assertEqual(get_qualname(a), 'yzcache.tests.A') self.assertEqual(get_qualname(A.cm), 'yzcache.tests.A.cm') self.assertEqual(get_qualname(a.cm), 'yzcache.tests.A.cm') self.assertEqual(get_qualname(A.sm), 'yzcache.tests.sm') self.assertEqual(get_qualname(A.im), 'yzcache.tests.A.im') self.assertEqual(get_qualname(a.im), 'yzcache.tests.A.im') self.assertEqual(get_qualname(A.f), 'yzcache.tests.A.f') self.assertEqual(get_qualname(a.f), 'yzcache.tests.A.f') self.assertEqual(get_qualname(a.ff), 'yzcache.tests.f')