Beispiel #1
0
    def _push_writer(self):
        """push a capturing buffer onto this Context and return
        the new writer function."""

        buf = util.FastEncodingBuffer()
        self._buffer_stack.append(buf)
        return buf.write
Beispiel #2
0
def compile(node,
            uri,
            filename=None,
            default_filters=None,
            buffer_filters=None,
            imports=None,
            future_imports=None,
            source_encoding=None,
            generate_magic_comment=True,
            disable_unicode=False,
            strict_undefined=False,
            enable_loop=True,
            reserved_names=frozenset()):
    """Generate module source code given a nodes node,
      uri, and optional source filename"""

    # if on Py2K, push the "source_encoding" string to be
    # a bytestring itself, as we will be embedding it into
    # the generated source and we don't want to coerce the
    # result into a unicode object, in "disable_unicode" mode
    if not compat.py3k and isinstance(source_encoding, compat.text_type):
        source_encoding = source_encoding.encode(source_encoding)

    buf = util.FastEncodingBuffer()

    printer = PythonPrinter(buf)
    _GenerateRenderMethod(
        printer,
        _CompileContext(uri, filename, default_filters, buffer_filters,
                        imports, future_imports, source_encoding,
                        generate_magic_comment, disable_unicode,
                        strict_undefined, enable_loop, reserved_names), node)
    return buf.getvalue()
Beispiel #3
0
 def test_fast_buffer_encoded(self):
     s = u("drôl m’a rée « S’il")
     buf = util.FastEncodingBuffer(encoding='utf-8')
     buf.write(s[0:10])
     buf.write(s[10:])
     q = buf.getvalue()
     eq_(buf.getvalue(), s.encode('utf-8'))
Beispiel #4
0
def _render_error(template, context, error):
    if template.error_handler:
        result = template.error_handler(context, error)
        if not result:
            compat.reraise(*sys.exc_info())
    else:
        error_template = errors.html_error_template()
        if context._outputting_as_unicode:
            context._buffer_stack[:] = [
                util.FastEncodingBuffer(as_unicode=True)]
        else:
            context._buffer_stack[:] = [util.FastEncodingBuffer(
                error_template.output_encoding,
                error_template.encoding_errors)]

        context._set_with_template(error_template)
        error_template.render_context(context, error=error)
Beispiel #5
0
 def test_fast_buffer_truncate(self):
     buf = util.FastEncodingBuffer()
     buf.write("string a ")
     buf.write("string b")
     buf.truncate()
     buf.write("string c ")
     buf.write("string d")
     eq_(buf.getvalue(), "string c string d")
Beispiel #6
0
def _render(template, callable_, args, data, as_unicode=False):
    """create a Context and return the string
    output of the given template and template callable."""

    if as_unicode:
        buf = util.FastEncodingBuffer(as_unicode=True)
    elif template.bytestring_passthrough:
        buf = compat.StringIO()
    else:
        buf = util.FastEncodingBuffer(as_unicode=as_unicode,
                                      encoding=template.output_encoding,
                                      errors=template.encoding_errors)
    context = Context(buf, **data)
    context._outputting_as_unicode = as_unicode
    context._set_with_template(template)

    _render_context(template, callable_, context, *args,
                    **_kwargs_for_callable(callable_, data))
    return context._pop_buffer().getvalue()