diff options
author | Benjamin Trofatter <bentrofatter@gmail.com> | 2012-11-09 14:55:01 -0600 |
---|---|---|
committer | Benjamin Trofatter <bentrofatter@gmail.com> | 2012-11-09 14:55:01 -0600 |
commit | 38cd2bb4cb2958193010634d1614919a5e07dbe3 (patch) | |
tree | 4e548e247a00cf2e4caa3324437754871bf040b8 | |
parent | d9e3e8c91c7bfaad2a4a7e131168dbf70e9437c1 (diff) | |
download | mako-38cd2bb4cb2958193010634d1614919a5e07dbe3.tar.gz |
Added futures support to mako
Provide a list of names to import from __future__ to Template or
TemplateLookup, and it will render the import from __future__
statement at the top of the generated code so that it actually works.
-rw-r--r-- | mako/codegen.py | 8 | ||||
-rw-r--r-- | mako/lookup.py | 6 | ||||
-rw-r--r-- | mako/template.py | 6 | ||||
-rw-r--r-- | test/test_template.py | 7 |
4 files changed, 24 insertions, 3 deletions
diff --git a/mako/codegen.py b/mako/codegen.py index 6c54892..714d6ae 100644 --- a/mako/codegen.py +++ b/mako/codegen.py @@ -25,6 +25,7 @@ def compile(node, default_filters=None, buffer_filters=None, imports=None, + future_imports=None, source_encoding=None, generate_magic_comment=True, disable_unicode=False, @@ -52,6 +53,7 @@ def compile(node, default_filters, buffer_filters, imports, + future_imports, source_encoding, generate_magic_comment, disable_unicode, @@ -68,6 +70,7 @@ class _CompileContext(object): default_filters, buffer_filters, imports, + future_imports, source_encoding, generate_magic_comment, disable_unicode, @@ -79,6 +82,7 @@ class _CompileContext(object): self.default_filters = default_filters self.buffer_filters = buffer_filters self.imports = imports + self.future_imports = future_imports self.source_encoding = source_encoding self.generate_magic_comment = generate_magic_comment self.disable_unicode = disable_unicode @@ -187,6 +191,10 @@ class _GenerateRenderMethod(object): self.printer.writeline("# -*- encoding:%s -*-" % self.compiler.source_encoding) + if self.compiler.future_imports: + # FIXME: this should only import the future features requested + self.printer.writeline("from __future__ import %s" % + (", ".join(self.compiler.future_imports),)) self.printer.writeline("from mako import runtime, filters, cache") self.printer.writeline("UNDEFINED = runtime.UNDEFINED") self.printer.writeline("__M_dict_builtin = dict") diff --git a/mako/lookup.py b/mako/lookup.py index 4d86696..023b6d0 100644 --- a/mako/lookup.py +++ b/mako/lookup.py @@ -171,7 +171,8 @@ class TemplateLookup(TemplateCollection): imports=None, enable_loop=True, input_encoding=None, - preprocessor=None): + preprocessor=None, + futures=False): self.directories = [posixpath.normpath(d) for d in util.to_list(directories, ()) @@ -209,7 +210,8 @@ class TemplateLookup(TemplateCollection): 'strict_undefined':strict_undefined, 'imports':imports, 'enable_loop':enable_loop, - 'preprocessor':preprocessor} + 'preprocessor':preprocessor, + 'futures': futures} if collection_size == -1: self._collection = {} diff --git a/mako/template.py b/mako/template.py index b069139..4e99d9f 100644 --- a/mako/template.py +++ b/mako/template.py @@ -216,7 +216,8 @@ class Template(object): strict_undefined=False, imports=None, enable_loop=True, - preprocessor=None): + preprocessor=None, + futures=None): if uri: self.module_id = re.sub(r'\W', "_", uri) self.uri = uri @@ -247,6 +248,7 @@ class Template(object): self.enable_loop = enable_loop self.strict_undefined = strict_undefined self.module_writer = module_writer + self.futures = futures if util.py3k and disable_unicode: raise exceptions.UnsupportedError( @@ -306,6 +308,7 @@ class Template(object): cache_impl, cache_enabled, cache_args, cache_type, cache_dir, cache_url ) + @util.memoized_property def reserved_names(self): @@ -601,6 +604,7 @@ def _compile(template, text, filename, generate_magic_comment): default_filters=template.default_filters, buffer_filters=template.buffer_filters, imports=template.imports, + future_imports=template.futures, source_encoding=lexer.encoding, generate_magic_comment=generate_magic_comment, disable_unicode=template.disable_unicode, diff --git a/test/test_template.py b/test/test_template.py index 03bcf09..e6fa3c6 100644 --- a/test/test_template.py +++ b/test/test_template.py @@ -1240,3 +1240,10 @@ class PreprocessTest(TemplateTest): """, preprocessor=convert_comments) assert flatten_result(t.render()) == "im a template - # not a comment - ## not a comment" + + +class FuturesTest(TemplateTest): + + def test_future_import(self): + t = Template("${ x / y }", futures=["division"]) + assert result_lines(t.render(x=12, y=5)) == ["2.4"] |