equal
deleted
inserted
replaced
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 |