diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-11-09 19:44:52 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-11-09 19:44:52 -0500 |
commit | c8598ab628a0da0d55857196627753dad9849a39 (patch) | |
tree | 70530c81a36bc5011602c92be4dcd86380d7bb77 /mako/codegen.py | |
parent | f33e3cf9ec62456dae60703a373057fe3221b956 (diff) | |
download | external_python_mako-c8598ab628a0da0d55857196627753dad9849a39.tar.gz external_python_mako-c8598ab628a0da0d55857196627753dad9849a39.tar.bz2 external_python_mako-c8598ab628a0da0d55857196627753dad9849a39.zip |
- New flag on Template, TemplateLookup -
strict_undefined=True, will cause
variables not found in the context to
raise a NameError immediately, instead of
defaulting to the UNDEFINED value.
Diffstat (limited to 'mako/codegen.py')
-rw-r--r-- | mako/codegen.py | 43 |
1 files changed, 36 insertions, 7 deletions
diff --git a/mako/codegen.py b/mako/codegen.py index 650eb82..1a64944 100644 --- a/mako/codegen.py +++ b/mako/codegen.py @@ -21,7 +21,8 @@ def compile(node, imports=None, source_encoding=None, generate_magic_comment=True, - disable_unicode=False): + disable_unicode=False, + strict_undefined=False): """Generate module source code given a parsetree node, uri, and optional source filename""" @@ -45,7 +46,8 @@ def compile(node, imports, source_encoding, generate_magic_comment, - disable_unicode), + disable_unicode, + strict_undefined), node) return buf.getvalue() @@ -58,7 +60,8 @@ class _CompileContext(object): imports, source_encoding, generate_magic_comment, - disable_unicode): + disable_unicode, + strict_undefined): self.uri = uri self.filename = filename self.default_filters = default_filters @@ -67,6 +70,7 @@ class _CompileContext(object): self.source_encoding = source_encoding self.generate_magic_comment = generate_magic_comment self.disable_unicode = disable_unicode + self.strict_undefined = strict_undefined class _GenerateRenderMethod(object): """A template visitor object which generates the @@ -406,11 +410,36 @@ class _GenerateRenderMethod(object): ) else: if getattr(self.compiler, 'has_ns_imports', False): - self.printer.writeline( - "%s = _import_ns.get(%r, context.get(%r, UNDEFINED))" % - (ident, ident, ident)) + if self.compiler.strict_undefined: + self.printer.writelines( + "%s = _import_ns.get(%r, UNDEFINED)" % + (ident, ident), + "if %s is UNDEFINED:" % ident, + "try:", + "%s = context[%r]" % (ident, ident), + "except KeyError:", + "raise NameError(\"'%s' is not defined\")" % + ident, + None, None + ) + else: + self.printer.writeline( + "%s = _import_ns.get(%r, context.get(%r, UNDEFINED))" % + (ident, ident, ident)) else: - self.printer.writeline("%s = context.get(%r, UNDEFINED)" % (ident, ident)) + if self.compiler.strict_undefined: + self.printer.writelines( + "try:", + "%s = context[%r]" % (ident, ident), + "except KeyError:", + "raise NameError(\"'%s' is not defined\")" % + ident, + None + ) + else: + self.printer.writeline( + "%s = context.get(%r, UNDEFINED)" % (ident, ident) + ) self.printer.writeline("__M_writer = context.writer()") |