Skip to content

Instantly share code, notes, and snippets.

@rctay
Created June 14, 2010 15:05
Show Gist options
  • Save rctay/437799 to your computer and use it in GitHub Desktop.
Save rctay/437799 to your computer and use it in GitHub Desktop.
[gae][bloggart] clear memoizer cache
diff --git a/admin.py b/admin.py
index b55e0cd..bbc08cd 100644
--- a/admin.py
+++ b/admin.py
@@ -17,6 +17,8 @@ application = webapp.WSGIApplication([
(config.url_prefix + '/admin/regenerate', handlers.RegenerateHandler),
(config.url_prefix + '/admin/post/delete/(\d+)', handlers.DeleteHandler),
(config.url_prefix + '/admin/post/preview/(\d+)', handlers.PreviewHandler),
+
+ (config.url_prefix + '/admin/clear_cache', handlers.ClearHandler),
])
diff --git a/handlers.py b/handlers.py
index f164993..a672b1c 100644
--- a/handlers.py
+++ b/handlers.py
@@ -56,6 +56,31 @@ class BaseHandler(webapp.RequestHandler):
theme))
+class ClearHandler(webapp.RequestHandler):
+ """Clear memoizer cache for BlogPosts."""
+
+ def get(self):
+ class Runner(object):
+ """
+ Encapsulated in a class, so that we can save state in instances for deferred
+ processing.
+ """
+ def run(self, batch_size=50, start_ts=None, classes=None):
+ q = models.BlogPost.all().order('-published')
+ q.filter('published <', start_ts or datetime.datetime.max)
+ posts = q.fetch(batch_size)
+ for post in posts:
+ utils.clear_memoizer_cache(post)
+ if len(posts) == batch_size:
+ deferred.defer(self.run, batch_size, posts[-1].published)
+
+ import logging
+ logging.info("clearing memoizer cache")
+ self.response.out.write("clearing...")
+
+ Runner().run()
+
+
class AdminHandler(BaseHandler):
def get(self):
from generators import generator_list
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment