| Index: cms/converters.py |
| =================================================================== |
| --- a/cms/converters.py |
| +++ b/cms/converters.py |
| @@ -263,31 +263,33 @@ 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), ("globals", globals)]: |
| + 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 |
| + name = os.path.basename(root) |
| + if not hasattr(module, name): |
| + raise Exception("Expected symbol %s not found in %s file %s" % (name, dirname, filename)) |
| + dictionary[name] = getattr(module, name) |
| + if hasattr(dictionary[name], "__call__"): |
|
Sebastian Noack
2015/03/20 16:10:54
You might want to use the callable() built-in func
Wladimir Palant
2015/03/20 16:21:12
A function doesn't usually have a reference to its
Sebastian Noack
2015/03/20 16:26:54
Yeah, this actually make sense, since we create th
Wladimir Palant
2015/03/20 16:42:50
Done.
|
| + dictionary[name].module_ref = module # Prevent garbage collection |
| self._env = jinja2.Environment(loader=self._SourceLoader(self._params["source"]), autoescape=True) |
| self._env.filters.update(filters) |
| self._env.globals.update(globals) |
| def get_html(self, source): |
| template = self._env.from_string(source) |
| module = template.make_module(self._params) |