comparison mercurial/templateutil.py @ 38969:382b055cc358

templatekw: deprecate old-style template keyword function (API) .. api:: `f(**kwargs)` style template keyword function is deprecated. Switch to new `(context, mapping)` API by declaring resource requirements. The new-style API will be the default in Mercurial 4.9. See registrar.templatekeyword for details.
author Yuya Nishihara <yuya@tcha.org>
date Sun, 25 Feb 2018 21:04:33 +0900
parents bc8d925342f0
children 83f8f7b9fa60
comparison
equal deleted inserted replaced
38968:d7e6e109eaae 38969:382b055cc358
808 808
809 def runstring(context, mapping, data): 809 def runstring(context, mapping, data):
810 return data 810 return data
811 811
812 def _recursivesymbolblocker(key): 812 def _recursivesymbolblocker(key):
813 def showrecursion(**args): 813 def showrecursion(context, mapping):
814 raise error.Abort(_("recursive reference '%s' in template") % key) 814 raise error.Abort(_("recursive reference '%s' in template") % key)
815 showrecursion._requires = () # mark as new-style templatekw
815 return showrecursion 816 return showrecursion
816 817
817 def runsymbol(context, mapping, key, default=''): 818 def runsymbol(context, mapping, key, default=''):
818 v = context.symbol(mapping, key) 819 v = context.symbol(mapping, key)
819 if v is None: 820 if v is None:
825 v = context.process(key, safemapping) 826 v = context.process(key, safemapping)
826 except TemplateNotFound: 827 except TemplateNotFound:
827 v = default 828 v = default
828 if callable(v) and getattr(v, '_requires', None) is None: 829 if callable(v) and getattr(v, '_requires', None) is None:
829 # old templatekw: expand all keywords and resources 830 # old templatekw: expand all keywords and resources
830 # (TODO: deprecate this after porting web template keywords to new API) 831 # (TODO: drop support for old-style functions. 'f._requires = ()'
832 # can be removed.)
831 props = {k: context._resources.lookup(context, mapping, k) 833 props = {k: context._resources.lookup(context, mapping, k)
832 for k in context._resources.knownkeys()} 834 for k in context._resources.knownkeys()}
833 # pass context to _showcompatlist() through templatekw._showlist() 835 # pass context to _showcompatlist() through templatekw._showlist()
834 props['templ'] = context 836 props['templ'] = context
835 props.update(mapping) 837 props.update(mapping)
838 ui = props.get('ui')
839 if ui:
840 ui.deprecwarn("old-style template keyword '%s'" % key, '4.8')
836 return v(**pycompat.strkwargs(props)) 841 return v(**pycompat.strkwargs(props))
837 if callable(v): 842 if callable(v):
838 # new templatekw 843 # new templatekw
839 try: 844 try:
840 return v(context, mapping) 845 return v(context, mapping)