qmsk_www_pages/pages.py
changeset 226 26ec457d0eb2
parent 224 cea4578f7910
child 99 88fa55fa0194
equal deleted inserted replaced
225:a9bd09144985 226:26ec457d0eb2
     4 import datetime
     4 import datetime
     5 import logging; log = logging.getLogger('qmsk_www_pages.pages')
     5 import logging; log = logging.getLogger('qmsk_www_pages.pages')
     6 import os, os.path
     6 import os, os.path
     7 
     7 
     8 import markdown
     8 import markdown
       
     9 import mako.template
     9 
    10 
    10 class NotFound (Exception):
    11 class NotFound (Exception):
       
    12     pass
       
    13 
       
    14 class RenderError (Exception):
    11     pass
    15     pass
    12 
    16 
    13 class Site (object):
    17 class Site (object):
    14     @classmethod
    18     @classmethod
    15     def lookup (cls):
    19     def lookup (cls):
   340     def render_html (self, request):
   344     def render_html (self, request):
   341         return markdown.markdown(self.open().read(),
   345         return markdown.markdown(self.open().read(),
   342             output_format   = self.format,
   346             output_format   = self.format,
   343         )
   347         )
   344 
   348 
       
   349 class TemplatePage (Page):
       
   350     def render_html (self, request):
       
   351         """
       
   352             Raises RenderError if !DEBUG, arbitrary error with stack trace otherwise.
       
   353         """
       
   354 
       
   355         try:
       
   356             return mako.template.Template(filename=self.path).render()
       
   357         except Exception as error:
       
   358             if settings.DEBUG:
       
   359                 raise
       
   360             else:
       
   361                 raise RenderError(error)
       
   362 
   345 SITE = Site.lookup()
   363 SITE = Site.lookup()
   346 
   364 
   347 TYPES = {
   365 TYPES = {
   348     'html':         HTML_Page,
   366     'html':         HTML_Page,
   349     'md':           MarkdownPage,
   367     'md':           MarkdownPage,
   350     'markdown':     MarkdownPage,
   368     'markdown':     MarkdownPage,
       
   369     'tmpl':         TemplatePage,
   351 }
   370 }
   352 
   371 
   353 def page (page):
   372 def page (page):
   354     return Page.lookup(SITE, page)
   373     return Page.lookup(SITE, page)
   355 
   374