Skip to content

Instantly share code, notes, and snippets.

@jvanasco
Created October 5, 2015 22:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jvanasco/d302c9f6de9f8d257f36 to your computer and use it in GitHub Desktop.
Save jvanasco/d302c9f6de9f8d257f36 to your computer and use it in GitHub Desktop.
dogpile encoding
class _EncodedProxy(ProxyBackend):
def value_decode(self, value):
raise NotImplementedError("override me")
def value_encode(self, value):
raise NotImplementedError("override me")
def set(self, k, v):
v = self.value_encode(v)
self.proxied.set(k, v)
def get(self, key):
v = self.proxied.get(key)
return self.value_decode(v)
def set_multi(self, mapping):
for (k, v) in mapping.iteritems():
mapping[k] = self.value_encode(v)
return self.proxied.set_multi(mapping)
def get_multi(self, keys):
results = self.proxied.get_multi(keys)
translated = []
for record in results:
try:
translated.append(self.value_decode(record))
except Exception as e:
raise
return translated
class JsonProxy(_EncodedProxy):
def value_decode(self, v):
"""this can raise an exception
"""
if not v or v is NO_VALUE:
return NO_VALUE
v = json2py(v)
return CachedValue(*v)
def value_encode(self, v):
"""this can raise an exception
"""
v = py2json(v)
return v
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment