Ë
    x[hú  ã                   ób  — U d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dlm
Z d dlmZ d dlmZ eed<   	 d d	lmZ d d
lmZ dZeZ ej2                  e«      ZdZ G d„ de«      Z G d„ de«      Z e	j>                  d«      d„ «       Z d„ Z!d„ Z"dd„Z#d„ Z$dd„Z%y# eef$ r dZeZY Œaw xY w)é    N)ÚAny)ÚTemplateSyntaxError)Úperformance)Ú
type_utils)Úutil)Ú
write_fileÚ
JUndefined)ÚDebugUndefined)ÚTemplateTFzCI_MISSING_JINJA_VAR/c            
       óX   ‡ — e Zd Zdeddfˆ fd„Zd„ Ze	 ddedededefd	„«       Zd
Z	ˆ xZ
S )ÚJinjaSyntaxParsingExceptionÚerrorÚreturnNc                 ó¤   •— t         ‰| �  |j                  xs d|j                  |j                  |j
                  «       |j                  | _        y )Nzunknown syntax error)ÚsuperÚ__init__ÚmessageÚlinenoÚnameÚfilenameÚsource)Úselfr   Ú	__class__s     €ú5/usr/lib/python3/dist-packages/cloudinit/templater.pyr   z$JinjaSyntaxParsingException.__init__/   sA   ø€ ô 	‰ÑØ�M‰MÒ3Ð3Ø�L‰LØ�J‰JØ�N‰Nô		
ð —l‘lˆ�ó    c                 ó¾   — | j                  | j                  | j                  | j                  j	                  «       | j                  dz
     j                  «       ¬«      S )ú;Avoid jinja2.TemplateSyntaxError multi-line __str__ format.é   ©Úsyntax_errorÚline_numberÚline_content)Úformat_error_messager   r   r   Ú
splitlinesÚstrip©r   s    r   Ú__str__z#JinjaSyntaxParsingException.__str__;   sN   € à×(Ñ(ØŸ™ØŸ™ØŸ™×/Ñ/Ó1°$·+±+À±/ÑB×HÑHÓJð )ó 
ð 	
r   r    r!   r"   c                 óX   — |rd|› �nd}t         j                  j                  | ||¬«      S )r   z: Ú r   )r   Úmessage_templateÚformatr   s      r   r#   z0JinjaSyntaxParsingException.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)   )Ú__name__Ú
__module__Ú__qualname__r   r   r'   ÚstaticmethodÚstrr#   r*   Ú__classcell__)r   s   @r   r   r   .   sf   ø„ ð
#à"ð
#ð 
õ
#ò
ð ð ñ
Øð
àð
ð ð
ð 
ò	
ó ð
ð	=ô r   r   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚUndefinedJinjaVariablez>Class used to represent any undefined jinja template variable.c                 ó*   — t         ›| j                  ›�S ©N)ÚMISSING_JINJA_PREFIXÚ_undefined_namer&   s    r   r'   zUndefinedJinjaVariable.__str__\   s   € Ý-¨t×/CÒ/CÐDÐDr   c                 óŒ   — t        |«      j                  t        d«      }t        dj	                  | j
                  |¬«      «      ‚)Nr)   zhUndefined jinja variable: "{this}-{other}". Jinja tried subtraction. Perhaps you meant "{this}_{other}"?)ÚthisÚother)r0   Úreplacer6   Ú	TypeErrorr+   r7   )r   r:   s     r   Ú__sub__zUndefinedJinjaVariable.__sub___   sI   € Ü�E“
×"Ñ"Ô#7¸Ó<ˆÜð@ß@FÁØ×)Ñ)°ð AGó Aó
ð 	
r   N)r,   r-   r.   Ú__doc__r'   r=   © r   r   r3   r3   Y   s   „ ÙHòEó
r   r3   zRendering basic templatec                 ó<   ‡— ˆfd„}t        j                  d|| «      S )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           
      ó0  •— | j                  d«      }|€| j                  d«      }|€t        d«      ‚t        j                  |j	                  d«      «      }‰}t        |«      dkD  r\|j                  «       }t        |t        «      s(t        d|›dt        j                  |«      ›d|›d�«      ‚||   }t        |«      dkD  rŒ\|j                  «       }t        |t        «      s't        d	|›d
|›dt        j                  |«      ›�«      ‚t        ||   «      S )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Údictr<   ÚtuÚobj_namer0   )Úmatchr   ÚpathÚselected_paramsÚkeyÚparamss        €r   Úreplacerzbasic_render.<locals>.replacerr   sú   ø€ à�{‰{˜1‹~ˆØˆ<Ø—;‘;˜q“>ˆDØˆ<ÜÐMÓNÐNÜ× Ñ  §¡¨C£Ó1ˆØ ˆÜ�$‹i˜!ŠmØ—,‘,“.ˆCÜ˜o¬tÔ4Ýò '¬¯©°OÕ(DÂcðKóð ð .¨cÑ2ˆOô �$‹i˜!‹mð �l‰l‹nˆÜ˜/¬4Ô0Ýâš¬¯©°_Ô)EðGóð ô �? 3Ñ'Ó(Ð(r   z)\$\{([A-Za-z0-9_.]+)\}|\$([A-Za-z0-9_.]+))ÚreÚsub)ÚcontentrT   rU   s    ` r   Úbasic_renderrY   i   s"   ø€ ô)ô6 �6‰6Ø4°hÀóð r   c                 óÆ  — d„ }| j                  d«      dk7  r| j                  dd«      \  }}n| }d}t        j                  d|t        j                  «      }|s	dt
        | fS |j                  d«      j                  «       j                  «       }|dvrt        d	|z  «      ‚|d
k(  r$t        st        j                  d«       dt
        |fS |d
k(  rt        rd
||fS dt
        |fS )Nc                 óX  — | j                  d«      rdnd}	 t        j                  d«      5   t        | t        ddg¬«      j
                  d	i |¤Ž|z   	 cd d d «       S # 1 sw Y   y xY w# t        $ r'}|xj                  dz  c_        t        |¬«      |‚d }~wt        $ r}||‚d }~ww xY w)
Nú
r)   zRendering jinja2 templateTzjinja2.ext.do)Ú	undefinedÚtrim_blocksÚ
extensionsrB   )r   r?   )
Úendswithr   ÚTimedÚ	JTemplater3   Úrenderr   r   r   Ú	Exception)rX   rT   ÚaddÚtemplate_syntax_errorÚunknown_errors        r   Újinja_renderz%detect_template.<locals>.jinja_render“   sÇ   € à×&Ñ& tÔ,‰d°"ˆð	3Ü×"Ñ"Ð#>Ó?ñ 	ð”IØÜ"8Ø$(Ø$3Ð#4ô	÷
 ‘fñ'ð
  &ñ'ð ñð÷	÷ 	ò 	ûô #ò 	)Ø!×(Ò(¨AÑ-Õ(Ü-Ø+ôà(ð)ûô ò 	3Ø ]Ð2ûð	3ús@   —A* ¬(AÁ	A* ÁA'Á#A* Á'A* Á*	B)Á3"BÂB)Â!B$Â$B)r\   éÿÿÿÿrB   r)   z##\s*template:(.*)Úbasic)Újinjarj   z.Unknown template rendering type '%s' requestedrk   zcJinja not available as the selected renderer for desired template, reverting to the basic renderer.)ÚfindrI   rV   rP   ÚIrY   rE   Úlowerr%   Ú
ValueErrorÚJINJA_AVAILABLEÚLOGÚwarning)Útextrh   ÚidentÚrestÚ
type_matchÚtemplate_types         r   Údetect_templaterx   ’   sò   € ò3ð, ‡y�y�ƒ˜"ÒØ—j‘j  qÓ)‰ˆ‰tàˆØˆÜ—‘Ð/°¼¿¹Ó=€JÙØœ tÐ,Ð,à"×(Ñ(¨Ó+×1Ñ1Ó3×9Ñ9Ó;ˆØÐ 2Ñ2ÜØ@Øñ óð ð ˜GÒ#­OÜ�K‰KðFôð œ\¨4Ð0Ð0Ø˜gÒ%­/Ø˜\¨4Ð0Ð0àœ tÐ,Ð,r   c                 óŽ   — |si }t        t        j                  | «      «      \  }}}t        j	                  d| |«        |||«      S )Nz+Rendering content of '%s' using renderer %s)rx   r   Úload_text_filerq   Údebug)ÚfnrT   rw   ÚrendererrX   s        r   Úrender_from_filer~   Ä   sD   € ÙØˆÜ'6´t×7JÑ7JÈ2Ó7NÓ'OÑ$€M�8˜WÜ‡I�IÐ;¸RÀÔOÙ�G˜VÓ$Ð$r   c                 óL   — t        | |«      }t        j                  |||¬«       y )N)Úmode)r~   r   r   )r|   ÚoutfnrT   r€   Úcontentss        r   Úrender_to_filerƒ   Ì   s   € Ü  FÓ+€HÜ‡O�O�E˜8¨$Ö/r   c                 ó:   — |si }t        | «      \  }}}  || |«      S )zRender string)rx   )rX   rT   Ú_template_typer}   s       r   Úrender_stringr†   Ñ   s(   € áØˆÜ(7¸Ó(@Ñ%€N�H˜gÙ�G˜VÓ$Ð$r   c                 ó*  — t        j                  |«      }| |dœ}t        ||«      j                  «       dz   }|r't        j                  |d¬«      }|st        d|z  «      ‚|dk(  r t        j                  j                  |«       y t        ||d¬«       y )	N)ÚvariantÚprefixr\   T)Údefaultz.Cannot render template file %s - invalid yaml.ú-Úw)Úomode)
r   rz   r†   ÚrstripÚ	load_yamlrF   Ú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˜8¨3Ö/r   )i¤  r5   )&rG   ÚloggingrV   r�   Útypingr   Újinja2r   Ú	cloudinitr   r   rN   r   Úcloudinit.atomic_helperr   Ú__annotations__r
   Ú_DebugUndefinedr   rb   rp   r	   ÚImportErrorÚAttributeErrorÚobjectÚ	getLoggerr,   rq   r6   r   r3   ÚtimedrY   rx   r~   rƒ   r†   r˜   r?   r   r   ú<module>r¥      sÓ   ðô Û Û 	Û 
Ý å &å !Ý &Ý Ý .ð
 ƒðÝ8Ý,à€OØ €Jð
 €g×Ñ˜Ó!€Ø.Ð ô&Ð"5ô &ôV
˜Zô 
ð  €×ÑÐ-Ó.ñ%ó /ð%òP/-òd%ó0ò
%ô0øðg 	�^Ð$ò Ø€OØ‚Jðús   ¼B  Â B.Â-B.