diff tests/test-template-engine.t @ 36445:e8d37838f5df

templatekw: add 'requires' flag to switch to exception-safe interface The current templatekw interface, f(repo, ctx, templ, **args), is horrible because it's quite easy to encounter TypeError, ValueError, etc. It's also bad for Python 3 porting due to the **kwargs issue. This patch introduces a flag to switch to new f(context, mapping) API seen in templater functions. The requirement spec isn't verified (yet) because context.resource() can gracefully raise a ResourceUnavailable exception, but it's planned to be used as a filter in the help, such as "Revision Keywords" (if 'ctx' in requires), "File Keywords" (if 'fctx' in requires), etc. showauthor() is ported to the new API as an example. 20 more follows.
author Yuya Nishihara <yuya@tcha.org>
date Sun, 25 Feb 2018 13:24:35 +0900
parents 58c1368ab629
children 6ff6e1d6b5b8
line wrap: on
line diff
--- a/tests/test-template-engine.t	Sun Feb 25 12:50:30 2018 +0900
+++ b/tests/test-template-engine.t	Sun Feb 25 13:24:35 2018 +0900
@@ -9,6 +9,15 @@
   >         self._defaults = defaults
   >         self._resources = resources
   > 
+  >     def symbol(self, mapping, key):
+  >         return mapping[key]
+  > 
+  >     def resource(self, mapping, key):
+  >         v = self._resources[key]
+  >         if v is None:
+  >             v = mapping[key]
+  >         return v
+  > 
   >     def process(self, t, map):
   >         tmpl = self.loader(t)
   >         props = self._defaults.copy()
@@ -16,10 +25,12 @@
   >         for k, v in props.items():
   >             if k in ('templ', 'ctx', 'repo', 'revcache', 'cache', 'troubles'):
   >                 continue
-  >             if hasattr(v, '__call__'):
+  >             if callable(v) and getattr(v, '_requires', None) is None:
   >                 props = self._resources.copy()
   >                 props.update(map)
   >                 v = v(**props)
+  >             elif callable(v):
+  >                 v = v(self, props)
   >             v = templater.stringify(v)
   >             tmpl = tmpl.replace('{{%s}}' % k, v)
   >         yield tmpl