Created
October 5, 2015 22:00
-
-
Save jvanasco/d302c9f6de9f8d257f36 to your computer and use it in GitHub Desktop.
dogpile encoding
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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