Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: cms/converters.py

Issue 5521995252891648: Issue 2180 - [cms] Add support for custom Jinja2 functions (Closed)
Patch Set: Created March 19, 2015, 9:52 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cms/converters.py
===================================================================
--- a/cms/converters.py
+++ b/cms/converters.py
@@ -263,31 +263,32 @@ class TemplateConverter(Converter):
"linkify": self.linkify,
"toclist": self.toclist,
}
globals = {
"get_string": self.get_string,
}
- for filename in self._params["source"].list_files("filters"):
- root, ext = os.path.splitext(filename)
- if ext.lower() != ".py":
- continue
+ for dirname, dictionary in [("filters", filters), ("functions", globals)]:
Sebastian Noack 2015/03/20 09:49:43 How about calling it "globals" as well to match th
Wladimir Palant 2015/03/20 16:02:24 Strictly speaking - yes, these don't need to be fu
Sebastian Noack 2015/03/20 16:10:54 Instances (with methods) would come to my mind.
+ for filename in self._params["source"].list_files(dirname):
+ root, ext = os.path.splitext(filename)
+ if ext.lower() != ".py":
+ continue
- path = "%s/%s" % ("filters", filename)
- code = self._params["source"].read_file(path)
- module = imp.new_module(root.replace("/", "."))
- exec code in module.__dict__
+ path = "%s/%s" % (dirname, filename)
+ code = self._params["source"].read_file(path)
+ module = imp.new_module(root.replace("/", "."))
+ exec code in module.__dict__
- func = os.path.basename(root)
- if not hasattr(module, func):
- raise Exception("Expected function %s not found in filter file %s" % (func, filename))
- filters[func] = getattr(module, func)
- filters[func].module_ref = module # Prevent garbage collection
+ func = os.path.basename(root)
+ if not hasattr(module, func):
+ raise Exception("Expected function %s not found in %s file %s" % (func, dirname, filename))
+ dictionary[func] = getattr(module, func)
+ dictionary[func].module_ref = module # Prevent garbage collection
self._env = jinja2.Environment(
loader=self._SourceLoader(self._params["source"]),
extensions=["jinja2.ext.do",],
autoescape=True
)
self._env.filters.update(filters)
self._env.globals.update(globals)
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld