Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1510)

Unified Diff: third_party/google-endpoints/dogpile/cache/proxy.py

Issue 2666783008: Add google-endpoints to third_party/. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/google-endpoints/dogpile/cache/proxy.py
diff --git a/third_party/google-endpoints/dogpile/cache/proxy.py b/third_party/google-endpoints/dogpile/cache/proxy.py
new file mode 100644
index 0000000000000000000000000000000000000000..15c6b5746f5479bd4d81e65841fd227db7e157cd
--- /dev/null
+++ b/third_party/google-endpoints/dogpile/cache/proxy.py
@@ -0,0 +1,95 @@
+"""
+Proxy Backends
+------------------
+
+Provides a utility and a decorator class that allow for modifying the behavior
+of different backends without altering the class itself or having to extend the
+base backend.
+
+.. versionadded:: 0.5.0 Added support for the :class:`.ProxyBackend` class.
+
+"""
+
+from .api import CacheBackend
+
+
+class ProxyBackend(CacheBackend):
+ """A decorator class for altering the functionality of backends.
+
+ Basic usage::
+
+ from dogpile.cache import make_region
+ from dogpile.cache.proxy import ProxyBackend
+
+ class MyFirstProxy(ProxyBackend):
+ def get(self, key):
+ # ... custom code goes here ...
+ return self.proxied.get(key)
+
+ def set(self, key, value):
+ # ... custom code goes here ...
+ self.proxied.set(key)
+
+ class MySecondProxy(ProxyBackend):
+ def get(self, key):
+ # ... custom code goes here ...
+ return self.proxied.get(key)
+
+
+ region = make_region().configure(
+ 'dogpile.cache.dbm',
+ expiration_time = 3600,
+ arguments = {
+ "filename":"/path/to/cachefile.dbm"
+ },
+ wrap = [ MyFirstProxy, MySecondProxy ]
+ )
+
+ Classes that extend :class:`.ProxyBackend` can be stacked
+ together. The ``.proxied`` property will always
+ point to either the concrete backend instance or
+ the next proxy in the chain that a method can be
+ delegated towards.
+
+ .. versionadded:: 0.5.0
+
+ """
+
+ def __init__(self, *args, **kwargs):
+ self.proxied = None
+
+ def wrap(self, backend):
+ ''' Take a backend as an argument and setup the self.proxied property.
+ Return an object that be used as a backend by a :class:`.CacheRegion`
+ object.
+ '''
+ assert(
+ isinstance(backend, CacheBackend) or
+ isinstance(backend, ProxyBackend))
+ self.proxied = backend
+ return self
+
+ #
+ # Delegate any functions that are not already overridden to
+ # the proxies backend
+ #
+ def get(self, key):
+ return self.proxied.get(key)
+
+ def set(self, key, value):
+ self.proxied.set(key, value)
+
+ def delete(self, key):
+ self.proxied.delete(key)
+
+ def get_multi(self, keys):
+ return self.proxied.get_multi(keys)
+
+ def set_multi(self, mapping):
+ self.proxied.set_multi(mapping)
+
+ def delete_multi(self, keys):
+ self.proxied.delete_multi(keys)
+
+ def get_mutex(self, key):
+ return self.proxied.get_mutex(key)
« no previous file with comments | « third_party/google-endpoints/dogpile/cache/plugins/mako_cache.py ('k') | third_party/google-endpoints/dogpile/cache/region.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698