diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-04-21 03:19:48 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-04-21 03:19:48 +0000 |
commit | 3f9520f900de67e4276a8875d5020c7b33fd4771 (patch) | |
tree | da7f25056c73c7c29bf1def07812c2677dc67abe /lib/mako/codegen.py | |
parent | 8173c7c9143c9ec4665a37c5445c71e9f80b5af0 (diff) | |
download | external_python_mako-3f9520f900de67e4276a8875d5020c7b33fd4771.tar.gz external_python_mako-3f9520f900de67e4276a8875d5020c7b33fd4771.tar.bz2 external_python_mako-3f9520f900de67e4276a8875d5020c7b33fd4771.zip |
- Lexer/Compile exceptions propigate throughout lexer/parsetree/ast
using a more portable **exception_kwargs collection
- added "source" member to the dict propigated to Lexer/Compile exceptions
- RichTraceback can access original template source as a unicode object
using either 'source' memebr on Lexer/Compile exception, or 'source'
property on ModuleInfo, fixes #37
- unit tests for #37
Diffstat (limited to 'lib/mako/codegen.py')
-rw-r--r-- | lib/mako/codegen.py | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/mako/codegen.py b/lib/mako/codegen.py index db520da..379cb4c 100644 --- a/lib/mako/codegen.py +++ b/lib/mako/codegen.py @@ -14,20 +14,21 @@ from mako import util, ast, parsetree, filters MAGIC_NUMBER = 2 -def compile(node, uri, filename=None, default_filters=None, buffer_filters=None, imports=None): +def compile(node, uri, filename=None, default_filters=None, buffer_filters=None, imports=None, source_encoding=None): """generate module source code given a parsetree node, uri, and optional source filename""" buf = util.FastEncodingBuffer() printer = PythonPrinter(buf) - _GenerateRenderMethod(printer, _CompileContext(uri, filename, default_filters, buffer_filters, imports), node) + _GenerateRenderMethod(printer, _CompileContext(uri, filename, default_filters, buffer_filters, imports, source_encoding), node) return buf.getvalue() class _CompileContext(object): - def __init__(self, uri, filename, default_filters, buffer_filters, imports): + def __init__(self, uri, filename, default_filters, buffer_filters, imports, source_encoding): self.uri = uri self.filename = filename self.default_filters = default_filters self.buffer_filters = buffer_filters self.imports = imports + self.source_encoding = source_encoding class _GenerateRenderMethod(object): """a template visitor object which generates the full module source for a template.""" @@ -116,12 +117,13 @@ class _GenerateRenderMethod(object): self.printer.writeline("_template_filename=%s" % repr(self.compiler.filename)) self.printer.writeline("_template_uri=%s" % repr(self.compiler.uri)) self.printer.writeline("_template_cache=cache.Cache(__name__, _modified_time)") + self.printer.writeline("_source_encoding=%s" % repr(self.compiler.source_encoding)) if self.compiler.imports: buf = '' for imp in self.compiler.imports: buf += imp + "\n" self.printer.writeline(imp) - impcode = ast.PythonCode(buf, 0, 0, 'template defined imports') + impcode = ast.PythonCode(buf, source='', lineno=0, pos=0, filename='template defined imports') else: impcode = None @@ -445,8 +447,7 @@ class _GenerateRenderMethod(object): else: x = e e = locate_encode(e) - if e is None: - raise "der its none " + x + assert e is not None target = "%s(%s)" % (e, target) return target |