Opened 16 years ago

Closed 16 years ago

Last modified 14 years ago

#5589 closed (invalid)

Memcache backend should allow retrieval of stored binary objects

Reported by: jhenry <jhenry@…> Owned by: nobody
Component: Core (Cache system) Version: dev
Severity: Keywords:
Cc: Armin Ronacher, dan@… Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: yes Patch needs improvement: yes
Easy pickings: no UI/UX: no

Description

Currently, the memcache backend is calling smart_unicode() on the output of the cache. This is not correct behavior, as there is no documentation saying that only unicode data can and should be stored in the cache. Theoretically any bytestream should be able to be stored in the cache.

The use case that I am working with in particular is a captcha generator. I was able to store the captcha image data generated with PIL in the cache, but on retrieval, I got a UnicodeDecodeError.

If the unicode restriction is intended, there should be an error on insert as well.

I have a patch to allow binary objects to be retrieved from the memcache backend if the unicode decode fails.

Attachments (1)

allow_binary_data_in_memcache.diff (578 bytes ) - added by jhenry <jhenry@…> 16 years ago.

Download all attachments as: .zip

Change History (7)

by jhenry <jhenry@…>, 16 years ago

comment:1 by Simon G <dev@…>, 16 years ago

Component: UncategorizedCache system
Has patch: set
Triage Stage: UnreviewedDesign decision needed

comment:2 by Jacob, 16 years ago

Needs tests: set
Patch needs improvement: set
Resolution: fixed
Status: newclosed
Triage Stage: Design decision neededAccepted

I'm not sure the patch behvaior is correct -- isn't that error sometimes useful? -- but indeed arbitrary objects should be storeable.

comment:3 by Armin Ronacher, 16 years ago

Resolution: fixed
Status: closedreopened

This is still broken...

comment:4 by Armin Ronacher, 16 years ago

Cc: Armin Ronacher added

comment:5 by Philippe Raoult, 16 years ago

Resolution: invalid
Status: reopenedclosed

The patch behavior is erroneous. The current code tests isinstance(basestring) and will return the value as-is for any other class. So if you want to store a binary object you just need to avoid using strings. Anything that is pickle'able will work.

comment:6 by Dan Ros, 14 years ago

Cc: dan@… added
Note: See TracTickets for help on using tickets.
Back to Top