view roundup/cgi/engine_chameleon.py @ 5775:17e110426ad7

issue2551046: Attempts to attach file or create large message fail under python2 This patch fixes a bug introduced for working around an issue in python3. There were a few ways to fix this, but I think this fix: 1) follows the spirit of the original patch 2) follows python programming expectations I am still having an issue trying to get both code paths executed from the test suite. The super code path is not tested, but I did validate that path from the browser and it works producing valid uploaded files in both python 2 and 3. Thanks to Ezio Melotti and Joseph Myers for their help in guiding me to come up with this solution.
author John Rouillard <rouilj@ieee.org>
date Sat, 08 Jun 2019 21:10:39 -0400
parents 55f09ca366c4
children 4d20d8251bf2
line wrap: on
line source

"""Templating engine adapter for the Chameleon."""

__docformat__ = 'restructuredtext'

import os.path
import chameleon

from roundup.cgi.templating import context, TALLoaderBase
from roundup.anypy.strings import s2u

class Loader(TALLoaderBase):
    def __init__(self, dir):
        self.dir = dir
        self.loader = chameleon.PageTemplateLoader(dir)

    def load(self, tplname):
        src, filename = self._find(tplname)
        return RoundupPageTemplate(self.loader.load(src))

class RoundupPageTemplate(object):
    def __init__(self, pt):
        self._pt = pt

    def render(self, client, classname, request, **options):
        c = context(client, self, classname, request)
        c.update({'options': options})

        def translate(msgid, domain=None, mapping=None, default=None):
            result = client.translator.translate(domain, msgid,
                         mapping=mapping, default=default)
            return s2u(result)

        output = self._pt.render(None, translate, **c)
        return output.encode(client.charset)

    def __getitem__(self, name):
        return self._pt[name]

    def __getattr__(self, name):
        return getattr(self._pt, name)


Roundup Issue Tracker: http://roundup-tracker.org/