def create_macro_capture_env(node):
class ParserMacroCapture(jinja2.Undefined):
"""
This class sets up the parser to capture macros.
"""
def __init__(self, hint=None, obj=None, name=None,
exc=None):
super(jinja2.Undefined, self).__init__()
self.node = node
self.name = name
self.package_name = node.get('package_name')
def __getattr__(self, name):
# jinja uses these for safety, so we have to override them.
# see https://github.com/pallets/jinja/blob/master/jinja2/sandbox.py#L332-L339 # noqa
if name in ['unsafe_callable', 'alters_data']:
return False
self.package_name = self.name
self.name = name
return self
def __call__(self, *args, **kwargs):
return True
return ParserMacroCapture
评论列表
文章目录