Miscellaneous

A middleware to generate static page (using staticgenerator) of django-cms' pages

import re
import time
import datetime

from django import http
from django.conf import settings
from staticgenerator import StaticGenerator

class CMSStaticGeneratorMiddleware(object):
  def process_view(self, request, view_func, view_args, view_kwargs):
    if not hasattr(request, 'generate_static'):
      request.generate_static = False
      if request.method == 'GET':
        request.generate_static = (view_func.__module__ == 'cms.views' and (view_func.__name__ == 'handler'))

    return None

  def process_response(self, request, response):
    if hasattr(request, 'generate_static'):
      if response.status_code == 200 and request.generate_static == True:
        if response['Content-Type'].split(';')[0] == 'text/html':
          today = datetime.datetime.today()
          response.content = response.content + "<!-- cached at: " + today.strftime("%Y-%m-%d %H:%M:%S") + " -->"

          gen = StaticGenerator()
          gen.publish_from_path(request.path, response.content)

    return response