summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Trofatter <bentrofatter@gmail.com>2012-11-09 14:55:01 -0600
committerBenjamin Trofatter <bentrofatter@gmail.com>2012-11-09 14:55:01 -0600
commit38cd2bb4cb2958193010634d1614919a5e07dbe3 (patch)
tree4e548e247a00cf2e4caa3324437754871bf040b8
parentd9e3e8c91c7bfaad2a4a7e131168dbf70e9437c1 (diff)
downloadmako-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.py8
-rw-r--r--mako/lookup.py6
-rw-r--r--mako/template.py6
-rw-r--r--test/test_template.py7
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"]