From dccfce6718cdd40bfabe6ed8b254bb280d8e1203 Mon Sep 17 00:00:00 2001
From: Matthew Williams <matthew@flowroute.com>
Date: Tue, 27 Mar 2012 08:51:37 -0700
Subject: [PATCH] added format_advanced jinja filter to template module

---
 template | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/template b/template
index 110d397aa1b..68e967ffe93 100755
--- a/template
+++ b/template
@@ -19,6 +19,7 @@
 
 import sys
 import os
+import collections
 import jinja2
 import shlex
 try:
@@ -26,6 +27,21 @@ try:
 except ImportError:
     import simplejson as json
 
+environment = jinja2.Environment()
+
+def format_advanced(fmt, data):
+    # jinja2 filter to use advanced python string formatting
+    # e.g, {{ "{0} {1} {2}"|format_advanced(['a', 'b', 'c']) }}
+    # see http://docs.python.org/library/string.html#formatstrings
+    if isinstance(data, collections.Mapping):
+        return fmt.format(**data)
+    elif isinstance(data, collections.Sequence):
+        return fmt.format(*data)
+    else:
+        return data
+
+environment.filters['format_advanced'] = format_advanced
+
 # ===========================================
 # convert arguments of form a=b c=d
 # to a dictionary
@@ -91,7 +107,7 @@ if os.path.exists(dest):
     md5sum = os.popen("md5sum %s" % dest).read().split()[0]
 
 # call Jinja2 here and save the new template file
-template = jinja2.Template(source)
+template = environment.from_string(source)
 data_out = template.render(data)
 f = open(dest, "w+")
 f.write(data_out)