summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2014-04-14 11:21:10 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2014-04-14 11:21:10 -0400
commit6d96ef8c2d454622070d2d63ed0a2a911cde3834 (patch)
tree0e8d97d4df6a43e573d2d9c01d751117a45fe518
parent10c0aae0e06832d7a1684063246568dc93217b7a (diff)
downloadmako-6d96ef8c2d454622070d2d63ed0a2a911cde3834.tar.gz
- add module source thing as ModuleInfo.get_module_source_metadata
-rw-r--r--mako/exceptions.py27
-rw-r--r--mako/template.py20
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: