ó
    x[hú  ã                   óh  • % S SK r S SKrS SKrS SKrS SKJr  S SKJr  S SKJ	r	  S SKJ
r  S SKJr  S SKJr  \\S'    S S	KJr  S S
KJr  Sr\r\R2                  " \5      rSr " S S\5      r " S S\5      r\	R>                  " S5      S 5       r S r!S r"SS jr#S r$SS jr%g! \\4 a    Sr\r Ndf = f)é    N)ÚAny)ÚTemplateSyntaxError)Úperformance)Ú
type_utils)Úutil)Ú
write_fileÚ
JUndefined)ÚDebugUndefined)ÚTemplateTFzCI_MISSING_JINJA_VAR/c            
       óh   ^ • \ rS rSrS\SS4U 4S jjrS r\ SS\S\S	\S\4S
 jj5       r	Sr
SrU =r$ )ÚJinjaSyntaxParsingExceptioné.   ÚerrorÚreturnNc                 ó®   >• [         TU ]  UR                  =(       d    SUR                  UR                  UR
                  5        UR                  U l        g )Nzunknown syntax error)ÚsuperÚ__init__ÚmessageÚlinenoÚnameÚfilenameÚsource)Úselfr   Ú	__class__s     €Ú5/usr/lib/python3/dist-packages/cloudinit/templater.pyr   Ú$JinjaSyntaxParsingException.__init__/   sA   ø€ ô 	‰ÑØ�M‰M×3Ð3Ø�L‰LØ�J‰JØ�N‰Nô		
ð —l‘lˆ�ó    c                 ó¸   • U R                  U R                  U R                  U R                  R	                  5       U R                  S-
     R                  5       S9$ )ú;Avoid jinja2.TemplateSyntaxError multi-line __str__ format.é   ©Úsyntax_errorÚline_numberÚline_content)Úformat_error_messager   r   r   Ú
splitlinesÚstrip©r   s    r   Ú__str__Ú#JinjaSyntaxParsingException.__str__;   sN   € à×(Ñ(ØŸ™ØŸ™ØŸ™×/Ñ/Ó1°$·+±+À±/ÑB×HÑHÓJð )ð 
ð 	
r   r"   r#   r$   c                 ó\   • U(       a  SU 3OSn[         R                  R                  U UUS9$ )r   z: Ú r!   )r   Úmessage_templateÚformatr!   s      r   r%   Ú0JinjaSyntaxParsingException.format_error_messageC   s<   € ö /;˜˜L˜>Ñ*ÀˆÜ*×;Ñ;×BÑBØ%Ø#Ø%ð Cð 
ð 	
r   zfUnable to parse Jinja template due to syntax error: {syntax_error} on line {line_number}{line_content})r   )r,   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   r)   ÚstaticmethodÚstrr%   r-   Ú__static_attributes__Ú__classcell__)r   s   @r   r   r   .   sf   ø† ð
#à"ð
#ð 
÷
#ò
ð ð ñ
Øð
àð
ð ð
ð 
ô	
ó ð
ð	=ö r   r   c                   ó$   • \ rS rSrSrS rS rSrg)ÚUndefinedJinjaVariableéY   z>Class used to represent any undefined jinja template variable.c                 ó.   • [         < U R                  < 3$ ©N)ÚMISSING_JINJA_PREFIXÚ_undefined_namer(   s    r   r)   ÚUndefinedJinjaVariable.__str__\   s   € Þ-¨t×/CÓ/CÐDÐDr   c                 ó†   • [        U5      R                  [        S5      n[        SR	                  U R
                  US95      e)Nr,   zhUndefined jinja variable: "{this}-{other}". Jinja tried subtraction. Perhaps you meant "{this}_{other}"?)ÚthisÚother)r5   Úreplacer=   Ú	TypeErrorr.   r>   )r   rB   s     r   Ú__sub__ÚUndefinedJinjaVariable.__sub___   sI   € Ü�E“
×"Ñ"Ô#7¸Ó<ˆÜð@ß@FÁØ×)Ñ)°ð AGð Aó
ð 	
r   © N)r0   r1   r2   r3   Ú__doc__r)   rE   r6   rG   r   r   r9   r9   Y   s   † ÙHòEõ
r   r9   zRendering basic templatec                 ó>   ^• U4S jn[         R                  " SX 5      $ )zÜThis does simple replacement of bash variable like templates.

It identifies patterns like ${a} or $a and can also identify patterns like
${a.b} or $a.b which will look for a key 'b' in the dictionary rooted
by key 'a'.
c           
      ó\  >• U R                  S5      nUc  U R                  S5      nUc  [        S5      e[        R                  " UR	                  S5      5      nTn[        U5      S:”  af  UR                  5       n[        U[        5      (       d,  [        SU< S[        R                  " U5      < SU< S35      eX4   n[        U5      S:”  a  Mf  UR                  5       n[        U[        5      (       d+  [        S	U< S
U< S[        R                  " U5      < 35      e[        X4   5      $ )Né   r    z,Match encountered but no valid group presentÚ.z&Can not traverse into non-dictionary 'z
' of type z while looking for subkey 'Ú'zCan not extract key 'z' from non-dictionary ')ÚgroupÚRuntimeErrorÚcollectionsÚdequeÚsplitÚlenÚpopleftÚ
isinstanceÚdictrD   ÚtuÚobj_namer5   )Úmatchr   ÚpathÚselected_paramsÚkeyÚparamss        €r   ÚreplacerÚbasic_render.<locals>.replacerr   sü   ø€ à�{‰{˜1‹~ˆØ‰<Ø—;‘;˜q“>ˆDØ‰<ÜÐMÓNÐNÜ× Ò  §¡¨C£Ó1ˆØ ˆÜ�$‹i˜!‹mØ—,‘,“.ˆCÜ˜o¬t×4Ñ4Ýó '¬¯ª°OÖ(DÃcðKóð ð .Ñ2ˆOô �$‹i˜!�mð �l‰l‹nˆÜ˜/¬4×0Ñ0Ýã›¬¯ª°_Õ)EðGóð ô �?Ñ'Ó(Ð(r   z)\$\{([A-Za-z0-9_.]+)\}|\$([A-Za-z0-9_.]+))ÚreÚsub)Úcontentr]   r^   s    ` r   Úbasic_renderrc   i   s    ø€ õ)ô6 �6Š6Ø4°hóð r   c                 óì  • S nU R                  S5      S:w  a  U R                  SS5      u  p#OU nSn[        R                  " SU[        R                  5      nU(       d	  S[
        U 4$ UR                  S5      R                  5       R                  5       nUS;  a  [        S	U-  5      eUS
:X  a)  [        (       d  [        R                  S5        S[
        U4$ US
:X  a  [        (       a  S
X4$ S[
        U4$ )Nc                 ód  • U R                  S5      (       a  SOSn [        R                  " S5         [        U [        SS/S9R
                  " S	0 UD6U-    sS S S 5        $ ! , (       d  f       g = f! [         a$  nU=R                  S-  sl        [        US9UeS nAf[         a  nXDeS nAff = f)
NÚ
r,   zRendering jinja2 templateTzjinja2.ext.do)Ú	undefinedÚtrim_blocksÚ
extensionsrK   )r   rG   )
Úendswithr   ÚTimedÚ	JTemplater9   Úrenderr   r   r   Ú	Exception)rb   r]   ÚaddÚtemplate_syntax_errorÚunknown_errors        r   Újinja_renderÚ%detect_template.<locals>.jinja_render“   sÁ   € à×&Ñ& t×,Ñ,‰d°"ˆð	3Ü×"Ò"Ð#>Õ?äØÜ"8Ø$(Ø$3Ð#4ñ	÷
 ‘fðñ 'ð
  &ñ'ð ñð÷ @×?×?ûô #ó 	)Ø!×(Ò(¨AÑ-Õ(Ü-Ø+ñà(ð)ûô ó 	3ØÐ2ûð	3ús@   œA2 ²%A!Á	A2 Á!
A/Á+A2 Á/A2 Á2
B/Á<BÂB/Â(B*Â*B/rf   éÿÿÿÿrK   r,   z##\s*template:(.*)Úbasic)Újinjaru   z.Unknown template rendering type '%s' requestedrv   zcJinja not available as the selected renderer for desired template, reverting to the basic renderer.)ÚfindrR   r`   rY   ÚIrc   rN   Úlowerr'   Ú
ValueErrorÚJINJA_AVAILABLEÚLOGÚwarning)Útextrr   ÚidentÚrestÚ
type_matchÚtemplate_types         r   Údetect_templaterƒ   ’   sô   € ò3ð, ‡y�y�ƒ˜"ÓØ—j‘j  qÓ)‰ˆˆtàˆØˆÜ—’Ð/°¼¿¹Ó=€JÞØœ tÐ,Ð,à"×(Ñ(¨Ó+×1Ñ1Ó3×9Ñ9Ó;ˆØÐ 2Ó2ÜØ@Øñ óð ð ˜GÓ#¯OªOÜ�K‰KðFôð œ\¨4Ð0Ð0Ø˜gÓ%¯/ª/Ø˜\Ð0Ð0àœ tÐ,Ð,r   c                 ó”   • U(       d  0 n[        [        R                  " U 5      5      u  p#n[        R	                  SX5        U" XA5      $ )Nz+Rendering content of '%s' using renderer %s)rƒ   r   Úload_text_filer|   Údebug)Úfnr]   r‚   Úrendererrb   s        r   Úrender_from_filer‰   Ä   s>   € ÞØˆÜ'6´t×7JÒ7JÈ2Ó7NÓ'OÑ$€M˜WÜ‡I�IÐ;¸RÔOÙ�GÓ$Ð$r   c                 óD   • [        X5      n[        R                  " XUS9  g )N)Úmode)r‰   r   r   )r‡   Úoutfnr]   r‹   Úcontentss        r   Úrender_to_filerŽ   Ì   s   € Ü Ó+€HÜ‡O‚O�E¨$Ó/r   c                 ó@   • U(       d  0 n[        U 5      u  p#n U" X5      $ )zRender string)rƒ   )rb   r]   Ú_template_typerˆ   s       r   Úrender_stringr‘   Ñ   s$   € æØˆÜ(7¸Ó(@Ñ%€N˜gÙ�GÓ$Ð$r   c                 ó2  • [         R                  " U5      nXS.n[        XV5      R                  5       S-   nU(       a*  [         R                  " USS9nU(       d  [        SU-  5      eUS:X  a   [        R                  R                  U5        g [        X%SS9  g )	N)ÚvariantÚprefixrf   T)Údefaultz.Cannot render template file %s - invalid yaml.Ú-Úw)Úomode)
r   r…   r‘   ÚrstripÚ	load_yamlrO   ÚsysÚstdoutÚwriter   )r“   ÚtemplateÚoutputÚis_yamlr”   r�   Ú
tpl_paramsÚouts           r   Úrender_templater£   Ù   s‚   € Ü×"Ò" 8Ó,€HØ$Ñ7€JÜ˜hÓ3×;Ñ;Ó=ÀÑD€HÞÜ�nŠn˜X¨tÑ4ˆÞÜØ@À8ÑKóð ð �ƒ}Ü�
‰
×Ñ˜Õ"ä�6¨3Ó/r   )i¤  r<   )&rP   Úloggingr`   r›   Útypingr   Újinja2r   Ú	cloudinitr   r   rW   r   Úcloudinit.atomic_helperr   Ú__annotations__r
   Ú_DebugUndefinedr   rl   r{   r	   ÚImportErrorÚAttributeErrorÚobjectÚ	getLoggerr0   r|   r=   r   r9   Útimedrc   rƒ   r‰   rŽ   r‘   r£   rG   r   r   Ú<module>r°      sÏ   ðô Û Û 	Û 
Ý å &å !Ý &Ý Ý .ð
 ƒðÝ8Ý,à€OØ €Jð
 ×Ò˜Ó!€Ø.Ð ô&Ð"5ô &ôV
˜Zô 
ð  ×ÒÐ-Ó.ñ%ó /ð%òP/-òd%ô0ò
%õ0øðg 	�^Ð$ó Ø€OØ‚Jðús   ¼B" Â"B1Â0B1