diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-04-14 11:21:10 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-04-14 11:21:10 -0400 |
commit | 6d96ef8c2d454622070d2d63ed0a2a911cde3834 (patch) | |
tree | 0e8d97d4df6a43e573d2d9c01d751117a45fe518 | |
parent | 10c0aae0e06832d7a1684063246568dc93217b7a (diff) | |
download | mako-6d96ef8c2d454622070d2d63ed0a2a911cde3834.tar.gz |
- add module source thing as ModuleInfo.get_module_source_metadata
-rw-r--r-- | mako/exceptions.py | 27 | ||||
-rw-r--r-- | mako/template.py | 20 |
2 files changed, 27 insertions, 20 deletions
diff --git a/mako/exceptions.py b/mako/exceptions.py index 523805f..cbe28f6 100644 --- a/mako/exceptions.py +++ b/mako/exceptions.py @@ -8,7 +8,6 @@ import traceback import sys -import re from mako import util, compat class MakoException(Exception): @@ -28,7 +27,7 @@ class CompileException(MakoException): def __init__(self, message, source, lineno, pos, filename): MakoException.__init__(self, message + _format_filepos(lineno, pos, filename)) - self.lineno =lineno + self.lineno = lineno self.pos = pos self.filename = filename self.source = source @@ -37,7 +36,7 @@ class SyntaxException(MakoException): def __init__(self, message, source, lineno, pos, filename): MakoException.__init__(self, message + _format_filepos(lineno, pos, filename)) - self.lineno =lineno + self.lineno = lineno self.pos = pos self.filename = filename self.source = source @@ -77,7 +76,6 @@ class RichTraceback(object): self.records = self._init(traceback) if isinstance(self.error, (CompileException, SyntaxException)): - import mako.template self.source = self.error.source self.lineno = self.error.lineno self._has_source = True @@ -169,21 +167,10 @@ class RichTraceback(object): template_ln = 1 - source_map = re.search( - r"__M_BEGIN_METADATA(.+?)__M_END_METADATA", - module_source, re.S).group(1) - source_map = compat.json.loads(source_map) - line_map = dict( - (int(k), v) for k, v in source_map['line_map'].items() - ) - - for mod_line in reversed(sorted(line_map)): - tmpl_line = line_map[mod_line] - while mod_line > 0: - mod_line -= 1 - if mod_line in line_map: - break - line_map[mod_line] = tmpl_line + source_map = mako.template.ModuleInfo.\ + get_module_source_metadata( + module_source, full_line_map=True) + line_map = source_map['full_line_map'] template_lines = [line for line in template_source.split("\n")] @@ -198,7 +185,7 @@ class RichTraceback(object): line, template_filename, template_ln, template_line, template_source)) if not self.source: - for l in range(len(new_trcback)-1, 0, -1): + for l in range(len(new_trcback) - 1, 0, -1): if new_trcback[l][5]: self.source = new_trcback[l][7] self.lineno = new_trcback[l][5] diff --git a/mako/template.py b/mako/template.py index 00783b7..c19a66a 100644 --- a/mako/template.py +++ b/mako/template.py @@ -596,6 +596,26 @@ class ModuleInfo(object): if module_filename: self._modules[module_filename] = self + @classmethod + def get_module_source_metadata(cls, module_source, full_line_map=False): + source_map = re.search( + r"__M_BEGIN_METADATA(.+?)__M_END_METADATA", + module_source, re.S).group(1) + source_map = compat.json.loads(source_map) + if full_line_map: + line_map = source_map['full_line_map'] = dict( + (int(k), v) for k, v in source_map['line_map'].items() + ) + + for mod_line in reversed(sorted(line_map)): + tmpl_line = line_map[mod_line] + while mod_line > 0: + mod_line -= 1 + if mod_line in line_map: + break + line_map[mod_line] = tmpl_line + return source_map + @property def code(self): if self.module_source is not None: |