git » blitiri » commit 72a7e1d

Add basic caching support to restructured text rendering

author Leandro Lucarella
2008-08-31 17:45:41 UTC
committer Leandro Lucarella
2008-08-31 20:04:53 UTC
parent eee424fe9c39d1035b947f950c3e52dbbb40f7f6

Add basic caching support to restructured text rendering

blitiri.cgi +21 -0
config.py.sample +3 -0

diff --git a/blitiri.cgi b/blitiri.cgi
index b158380..fdefadb 100755
--- a/blitiri.cgi
+++ b/blitiri.cgi
@@ -24,6 +24,10 @@ comments_path = "/tmp/blog/comments"
 # default templates. If they're not found, the built-in ones will be used.
 templates_path = "/tmp/blog/templates"
 
+# Path where the cache is stored (must be writeable by the web server)
+# If None is specified, cache is disabled
+cache_path = "/tmp/blog/cache"
+
 # URL to the blog, including the name. Can be a full URL or just the path.
 blog_url = "/blog/blitiri.cgi"
 
@@ -404,6 +408,22 @@ div.section h1 {
 
 """
 
+# Cache decorator
+def cached(f):
+	def decorate(obj, *args, **kwargs):
+		if cache_path is None: # cache disabled
+			s = f(obj, *args, **kwargs)
+		else:
+			cache_file = os.path.join(cache_path,
+					'blitiri.cache.%s.html' % hash(obj))
+			try:
+				s = open(cache_file).read()
+			except:
+				s = f(obj, *args, **kwargs)
+				open(cache_file, 'w').write(s)
+		return s
+	return decorate
+
 # helper functions
 def rst_to_html(rst, secure = True):
 	settings = {
@@ -417,6 +437,7 @@ def rst_to_html(rst, secure = True):
 	parts = publish_parts(rst, settings_overrides = settings,
 				writer_name = "html")
 	return parts['body'].encode('utf8')
+rst_to_html = cached(rst_to_html)
 
 def validate_rst(rst, secure = True):
 	try:
diff --git a/config.py.sample b/config.py.sample
index c3b3653..79efac7 100644
--- a/config.py.sample
+++ b/config.py.sample
@@ -20,6 +20,9 @@ comments_path = "/tmp/blog/comments"
 # default templates. If they're not found, the built-in ones will be used.
 templates_path = "/tmp/blog/templates"
 
+# Path where the cache is stored (must be writeable by the web server)
+cache_path = "/tmp/blog/cache"
+
 # URL to the blog, including the name. Can be a full URL or just the path.
 blog_url = "/blog/blitiri.cgi"