a )g|@sfddlmZmZmZeZddlmZddlm Z ddl m Z m Z ddl mZdgZGdddeZdS) )absolute_importdivisionprint_function)Mapping)missing) AnsibleErrorAnsibleUndefinedVariable) to_native AnsibleJ2Varsc@sBeZdZdZdddZddZddZd d Zd d Zd dZ dS)r a Helper class to template all variable content before jinja2 sees it. This is done by hijacking the variable storage that jinja2 uses, and overriding __contains__ and __getitem__ to look like a dict. Added bonus is avoiding duplicating the large hashes that inject tends to be. To facilitate using builtin jinja2 things like range, globals are also handled here. NcCsr||_||_t|_t|trn|D]F\}}|tur&|dddkrZ||j|dd<q&|dvr&||j|<q&dS)z Initializes this object with a valid Templar() object, as well as several dictionaries of variables representing different scopes (in jinja2 terminology). NZl_)context environmenttemplate)_templar_globalsdict_locals isinstanceitemsr)selfZtemplarglobalslocalskeyvalr9/usr/lib/python3.9/site-packages/ansible/template/vars.py__init__+s zAnsibleJ2Vars.__init__cCs0||jvrdS||jjvrdS||jvr,dSdS)NTF)rravailable_variablesr)rkrrr __contains__=s   zAnsibleJ2Vars.__contains__cCs$t}||jj|j|jt|SN)setupdaterrrriterrkeysrrr__iter__FszAnsibleJ2Vars.__iter__cCs$t}||jj|j|jt|Sr )r!r"rrrrlenr$rrr__len__KszAnsibleJ2Vars.__len__c Cs:||jvr|j|S||jjvr.|jj|}n ||jvrB|j|Std|ddlm}t|trl|dkst||st |dr|Sd}z|j |}Wnt y}z,|jj j |d|j|t dWYd}~Sd}~0ty0}zs