When using the low-level cache and memcache as the backend, you're
likely to run into this stack trace:

...
File "/pegasus/code/current/django/core/cache/backends/memcached.py" in set
  48. self._cache.set(key, value, timeout or self.default_timeout)
File "/usr/lib/python2.5/site-packages/memcache.py" in set
  305. return self._set("set", key, val, time)
File "/usr/lib/python2.5/site-packages/memcache.py" in _set
  328. fullcmd = "%s %s %d %d %d\r\n%s" % (cmd, key, flags, time, len(val), val)

  UnicodeDecodeError at /
  'ascii' codec can't decode byte 0x80 in position 0: ordinal not in range(128)

What's going on here is that the memcache.py library does this with
the passed parameters:

fullcmd = "%s %s %d %d %d\r\n%s" % (cmd, key, flags, time, len(val), val)

Since "key" is often a unicode string, it infects, as it were, the
rest of the line, forcing "val" to be encoded, then decoded.

It may be that only the memcache backend has this problem, but the
general solution I'd suggest is to use smart_str on the key given to
each low-level cache's backend set method.  Works-for-me.

It may also make sense to run on the value, but I imagine that has a
significant overhead, and I haven't had a problem with it yet....

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to