Current File : //usr/lib/python3/dist-packages/cloudinit/__pycache__/templater.cpython-312.pyc
�

x[h���b�UddlZddlZddlZddlZddlmZddlmZddlm	Z	ddlm
ZddlmZddl
mZeed<	dd	lmZdd
lmZdZeZej2e�Zd
ZGd�de�ZGd�de�Ze	j>d�d��Z d�Z!d�Z"dd�Z#d�Z$dd�Z%y#eef$rdZeZY�awxYw)�N)�Any)�TemplateSyntaxError)�performance)�
type_utils)�util)�
write_file�
JUndefined)�DebugUndefined)�TemplateTFzCI_MISSING_JINJA_VAR/c
�X��eZdZdeddf�fd�Zd�Ze	ddedededefd	��Zd
Z	�xZ
S)�JinjaSyntaxParsingException�error�returnNc���t�|�|jxsd|j|j|j
�|j|_y)Nzunknown syntax error)�super�__init__�message�lineno�name�filename�source)�selfr�	__class__s  ��5/usr/lib/python3/dist-packages/cloudinit/templater.pyrz$JinjaSyntaxParsingException.__init__/sA���	����M�M�3�3��L�L��J�J��N�N�		
��l�l���c��|j|j|j|jj	�|jdz
j���S)�;Avoid jinja2.TemplateSyntaxError multi-line __str__ format.���syntax_error�line_number�line_content)�format_error_messagerrr�
splitlines�strip�rs r�__str__z#JinjaSyntaxParsingException.__str__;sN���(�(����������/�/�1�$�+�+��/�B�H�H�J�)�
�	
rr r!r"c�X�|rd|��nd}tjj|||��S)rz: �r)r
�message_template�formatrs   rr#z0JinjaSyntaxParsingException.format_error_messageCs<��/;��L�>�*���*�;�;�B�B�%�#�%�C�
�	
rzfUnable to parse Jinja template due to syntax error: {syntax_error} on line {line_number}{line_content})r))�__name__�
__module__�__qualname__rrr'�staticmethod�strr#r*�
__classcell__)rs@rr
r
.sf���
#�"�
#�
�
#�
���
��
��
��
�

�	
��
�	=�rr
c��eZdZdZd�Zd�Zy)�UndefinedJinjaVariablez>Class used to represent any undefined jinja template variable.c�*�t�|j��S�N)�MISSING_JINJA_PREFIX�_undefined_namer&s rr'zUndefinedJinjaVariable.__str__\s��-�t�/C�/C�D�Drc��t|�jtd�}tdj	|j
|����)Nr)zhUndefined jinja variable: "{this}-{other}". Jinja tried subtraction. Perhaps you meant "{this}_{other}"?)�this�other)r0�replacer6�	TypeErrorr+r7)rr:s  r�__sub__zUndefinedJinjaVariable.__sub___sI���E�
�"�"�#7��<���
@�@F���)�)��AG�A�
�	
rN)r,r-r.�__doc__r'r=�rrr3r3Ys��H�E�
rr3zRendering basic templatec�<���fd�}tjd||�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��|jd�}|�|jd�}|�td��tj|j	d��}�}t|�dkDr\|j
�}t|t�s(td|�dtj|��d|�d���||}t|�dkDr�\|j
�}t|t�s'td	|�d
|�dtj|�����t||�S)N�rz,Match encountered but no valid group present�.z&Can not traverse into non-dictionary 'z
' of type z while looking for subkey '�'zCan 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�replacerzbasic_render.<locals>.replacerrs�����{�{�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�'�(�(rz)\$\{([A-Za-z0-9_.]+)\}|\$([A-Za-z0-9_.]+))�re�sub)�contentrTrUs ` r�basic_renderrYis"���)�6�6�6�4�h���rc���d�}|jd�dk7r|jdd�\}}n|}d}tjd|tj�}|s	dt
|fS|j
d�j�j�}|dvrtd	|z��|d
k(r$tstjd�dt
|fS|d
k(rtrd
||fSdt
|fS)Nc�X�|jd�rdnd}	tjd�5t|tddg��j
d	i|��|z	cddd�S#1swYyxYw#t$r'}|xjdz
c_t|��|�d}~wt$r}||�d}~wwxYw)
N�
r)zRendering jinja2 templateTz
jinja2.ext.do)�	undefined�trim_blocks�
extensionsrB)rr?)
�endswithr�Timed�	JTemplater3�renderrrr
�	Exception)rXrT�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\���rBr)z##\s*template:(.*)�basic)�jinjarjz.Unknown template rendering type '%s' requestedrkzcJinja not available as the selected renderer for desired template, reverting to the basic renderer.)
�findrIrVrP�IrYrE�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�,�,rc��|si}ttj|��\}}}tj	d||�|||�S)Nz+Rendering content of '%s' using renderer %s)rxr�load_text_filerq�debug)�fnrTrw�rendererrXs     r�render_from_filer~�sD�����'6�t�7J�7J�2�7N�'O�$�M�8�W��I�I�;�R��O��G�V�$�$rc�L�t||�}tj|||��y)N)�mode)r~rr)r|�outfnrTr��contentss     r�render_to_filer��s����F�+�H��O�O�E�8�$�/rc�:�|si}t|�\}}}|||�S)z
Render string)rx)rXrT�_template_typer}s    r�
render_stringr��s(�����(7��(@�%�N�H�g��G�V�$�$rc�*�tj|�}||d�}t||�j�dz}|r'tj|d��}|std|z��|dk(r tjj|�yt||d��y)	N)�variant�prefixr\T)�defaultz.Cannot render template file %s - invalid yaml.�-�w)�omode)
rrzr��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�loggingrVr��typingr�jinja2r�	cloudinitrrrNr�cloudinit.atomic_helperr�__annotations__r
�_DebugUndefinedrrbrpr	�ImportError�AttributeError�object�	getLoggerr,rqr6r
r3�timedrYrxr~r�r�r�r?rr�<module>r�s�����	�
��&�!�&��.�

���8�,��O� �J�
�g����!��.��&�"5�&�V

�Z�

� ����-�.�%�/�%�P/-�d%�0�
%�
0��g	�^�$���O��J��s�B � B.�-B.