﻿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
17613	Add validation method for cache keys	Vlastimil Zíma	nobody	"We encountered a problem that we can not check keys for cache before we try to use them. This is quite in need in case you are using identifiers that not entirely under your control e.g. URLs or you have more permissive checks than cache requires, e.g. length <= 255.

If you want to use memcache in such cases you need to use quite ugly code to catch exceptions from invalid keys:
{{{
#!python
from django.core import cache
from somewhere import slugify, expensive_function

try:
    from memcache import Client
    MemcachedKeyError = Client.MemcachedKeyError
except ImportError:
    # If memcached is not present create dummy exception
    class MemcachedKeyError(Exception):
        pass

def cached_expensive_function(url)
    key = slugify(url)
    try:
        result = cache.cache.get(key)
    except MemcachedKeyError:
        return expensive_function(url)

    if result is None:
        result = expensive_function(url)
        cache.cache.set(key, result)
    return result
}}}

A nice code for such cases would be:
{{{
#!python
from django.core import cache
from somewhere import slugify, expensive_function

def cached_expensive_function(url)
    key = slugify(url)

    if not cache.cache.check_key(key)
        return expensive_function(url)

    result = cache.cache.get(key)
    if result is None:
        result = expensive_function(url)
        cache.cache.set(key, result)
    return result
}}}

I also append basic patch that adds such method."	New feature	closed	Core (Cache system)	dev	Normal	fixed			Accepted	1	1	1	1	0	0
