﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
31734	warnings.warn() fails when looping over memcache_key_warnings()	Rich Rauenzahn	nobody	"I think I found a bug in cache backends -- while running unit tests I was getting:

TypeError: 'type' object cannot be interpreted as an integer

I'm not sure why that exact message, but it arises here:


{{{
> .../virtualenv-3.6.8/lib64/python3.6/site-packages/django/core/cache/backends/base.py(250)validate_key()
    248         """"""
    249         for warning in memcache_key_warnings(key):
--> 250             warnings.warn(warning, CacheKeyWarning)
    251 
    252     def incr_version(self, key, delta=1, version=None):

}}}

I think the problem is that for loop is receiving a list of tuples, but they are interpreted as a list of strings:


{{{
ipdb> key
"":1:<redacted but probably invalid for memcache""

# The generator returns tuples of (message, warning type)

ipdb> for x in memcache_key_warnings(key): print(x)
('Cache key contains characters that will cause errors if used with memcached: "":1:BuildAPI._request:(\'http://buildapi.eng.vmware.com/sb/build/1895757\', expire=10)""', <class 'django.core.cache.backends.base.CacheKeyWarning'>)

# But ""warning"" passed to warning.warn() is the tuple...  

ipdb> warning
('Cache key contains characters that will cause errors if used with memcached: "":1:BuildAPI._request:(\'http://buildapi.eng.vmware.com/sb/build/1895757\', expire=10)""', <class 'django.core.cache.backends.base.CacheKeyWarning'>)
ipdb>
}}}
 
I think it should be passing warning.warn(warning[0], warning[1])  or warning.warn(*warning)

Django 2.2.13 is what I am using."	Bug	new	Core (Cache system)	2.2	Normal				Unreviewed	0	0	0	0	1	0
