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

Unified Diff: third_party/google-endpoints/dogpile/cache/plugins/mako_cache.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/plugins/mako_cache.py
diff --git a/third_party/google-endpoints/dogpile/cache/plugins/mako_cache.py b/third_party/google-endpoints/dogpile/cache/plugins/mako_cache.py
new file mode 100644
index 0000000000000000000000000000000000000000..61f4ffaf327b21b11c6d0e0e9c9368dd85e90f72
--- /dev/null
+++ b/third_party/google-endpoints/dogpile/cache/plugins/mako_cache.py
@@ -0,0 +1,90 @@
+"""
+Mako Integration
+----------------
+
+dogpile.cache includes a `Mako <http://www.makotemplates.org>`_ plugin
+that replaces `Beaker <http://beaker.groovie.org>`_
+as the cache backend.
+Setup a Mako template lookup using the "dogpile.cache" cache implementation
+and a region dictionary::
+
+ from dogpile.cache import make_region
+ from mako.lookup import TemplateLookup
+
+ my_regions = {
+ "local":make_region().configure(
+ "dogpile.cache.dbm",
+ expiration_time=360,
+ arguments={"filename":"file.dbm"}
+ ),
+ "memcached":make_region().configure(
+ "dogpile.cache.pylibmc",
+ expiration_time=3600,
+ arguments={"url":["127.0.0.1"]}
+ )
+ }
+
+ mako_lookup = TemplateLookup(
+ directories=["/myapp/templates"],
+ cache_impl="dogpile.cache",
+ cache_args={
+ 'regions':my_regions
+ }
+ )
+
+To use the above configuration in a template, use the ``cached=True``
+argument on any Mako tag which accepts it, in conjunction with the
+name of the desired region as the ``cache_region`` argument::
+
+ <%def name="mysection()" cached="True" cache_region="memcached">
+ some content that's cached
+ </%def>
+
+
+"""
+from mako.cache import CacheImpl
+
+
+class MakoPlugin(CacheImpl):
+ """A Mako ``CacheImpl`` which talks to dogpile.cache."""
+
+ def __init__(self, cache):
+ super(MakoPlugin, self).__init__(cache)
+ try:
+ self.regions = self.cache.template.cache_args['regions']
+ except KeyError:
+ raise KeyError(
+ "'cache_regions' argument is required on the "
+ "Mako Lookup or Template object for usage "
+ "with the dogpile.cache plugin.")
+
+ def _get_region(self, **kw):
+ try:
+ region = kw['region']
+ except KeyError:
+ raise KeyError(
+ "'cache_region' argument must be specified with 'cache=True'"
+ "within templates for usage with the dogpile.cache plugin.")
+ try:
+ return self.regions[region]
+ except KeyError:
+ raise KeyError("No such region '%s'" % region)
+
+ def get_and_replace(self, key, creation_function, **kw):
+ expiration_time = kw.pop("timeout", None)
+ return self._get_region(**kw).get_or_create(
+ key, creation_function,
+ expiration_time=expiration_time)
+
+ def get_or_create(self, key, creation_function, **kw):
+ return self.get_and_replace(key, creation_function, **kw)
+
+ def put(self, key, value, **kw):
+ self._get_region(**kw).put(key, value)
+
+ def get(self, key, **kw):
+ expiration_time = kw.pop("timeout", None)
+ return self._get_region(**kw).get(key, expiration_time=expiration_time)
+
+ def invalidate(self, key, **kw):
+ self._get_region(**kw).delete(key)
« no previous file with comments | « third_party/google-endpoints/dogpile/cache/plugins/__init__.py ('k') | third_party/google-endpoints/dogpile/cache/proxy.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698