80 lines
2.0 KiB
Python
80 lines
2.0 KiB
Python
#!/usr/bin/env python
|
|
# -*- mode: python; indent-tabs-mode: nil; -*- coding: iso-8859-1 -*-
|
|
|
|
"""
|
|
Formatters.py
|
|
|
|
Copyright 2009-2010 by Marcello Perathoner
|
|
|
|
Distributable under the GNU General Public License Version 3 or newer.
|
|
|
|
Formatters for all mediatypes.
|
|
|
|
"""
|
|
|
|
from __future__ import unicode_literals
|
|
|
|
import glob
|
|
import logging
|
|
import os.path
|
|
|
|
import genshi.template
|
|
import genshi.filters
|
|
|
|
import cherrypy
|
|
|
|
import HTMLFormatter
|
|
import OPDSFormatter
|
|
import JSONFormatter
|
|
|
|
def format (format_, page, os_):
|
|
""" Main entry point. """
|
|
|
|
return formatters[format_].format (page, os_)
|
|
|
|
|
|
formatters = {}
|
|
formatters['opds'] = OPDSFormatter.OPDSFormatter ()
|
|
formatters['stanza'] = formatters['opds']
|
|
formatters['mobile'] = HTMLFormatter.MobileFormatter ()
|
|
formatters['html'] = HTMLFormatter.HTMLFormatter ()
|
|
formatters['json'] = JSONFormatter.JSONFormatter ()
|
|
# FIXME: only needed to load sitemap.xml templates
|
|
formatters['xml'] = HTMLFormatter.XMLishFormatter ()
|
|
|
|
def on_template_loaded (template):
|
|
"""
|
|
Callback.
|
|
|
|
We need to use the callback because we are using includes.
|
|
The callback will also setup () the includes.
|
|
|
|
"""
|
|
|
|
genshi.filters.Translator (_).setup (template)
|
|
|
|
|
|
def init ():
|
|
""" Load all template files in template_dir. """
|
|
|
|
template_dir = cherrypy.config['genshi.template_dir']
|
|
|
|
for fn in glob.glob (os.path.join (template_dir, '*')):
|
|
if fn.endswith ('~') or fn.endswith ('#') or fn.endswith ('schemas.xml'):
|
|
# backup file or emacs temp file
|
|
continue
|
|
|
|
cherrypy.engine.autoreload.files.update (fn)
|
|
|
|
bn = os.path.basename (fn)
|
|
template = genshi.template.TemplateLoader (
|
|
template_dir,
|
|
callback = on_template_loaded).load (bn)
|
|
|
|
page, dot_format = os.path.splitext (bn)
|
|
|
|
formatters[dot_format[1:]].set_template (page, template)
|
|
|
|
cherrypy.log ("Template '%s' loaded." % fn,
|
|
context = 'GENSHI', severity = logging.INFO)
|