
    Vh                    ~    d dl mZ d dlZd dlmZmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ  e       Z G d d	      Zy)
    )annotationsN)AnsibleErrorAnsibleUndefinedVariableAnsibleTemplateError)	to_native)FieldAttribute)Templar)Displayc                  Z     e Zd ZdZ ededd      Zd
 fd	Zd ZddZ	ddZ
dd	Z xZS )Conditionalz
    This is a mix-in class, to be used with Base to allow the object
    to be run conditionally when a condition is met or skipped.
    listT)isadefaultextendprependc                b    t        | d      s|t        d      || _        t        |           y )N_loaderz<a loader must be specified when using Conditional() directly)hasattrr   r   super__init__)selfloader	__class__s     L/home/dcms/DCMS/lib/python3.12/site-packages/ansible/playbook/conditional.pyr   zConditional.__init__'   s2     tY'~"#abb%    c                B    t        |t              st        | ||g       y y N)
isinstancer   setattr)r   attrnamevalues       r   _validate_whenzConditional._validate_when2   s    %&D$( 'r   c                ,    | j                  ||      d   S )z}
        Loops through the conditionals set on this object, returning
        False if any of them evaluate as such.
        r   ) evaluate_conditional_with_result)r   templarall_varss      r   evaluate_conditionalz Conditional.evaluate_conditional6   s    
 44WhGJJr   c           
     P   | j                   D ]V  }||dk(  rd}n't        |t              r|}n	 | j                  |||      }t        j                  d|d	|       |rR||fc S  y
# t        $ r5}t	        dt        |      dt        |      t        | dd            d}~ww xY w)zLoops through the conditionals set on this object, returning
        False if any of them evaluate as such as well as the condition
        that was false.
        N TzThe conditional check 'z' failed. The error was: _ds)objzEvaluated conditional (): )TN)	whenr   bool_check_conditionalr   r   getattrdisplaydebug)r   r&   r'   conditionalreses         r   r%   z,Conditional.evaluate_conditional_with_result=   s    
  99 	(K"kR&7K.!11+wQC MMk3OPK''!	($  $ &R[\gRhjstujvw#D%6 s   A''	B%00B  B%c                v   |}||_         	 |j                  |      rAt        j                  d|z         |j	                  |      }t        |t              r|S |dk(  ryt        |d      rt        d      |j	                  d|z        j                         dk(  S # t        $ r}t        d|d	|      d }~ww xY w)
Nzjconditional statements should not include jinja2 templating delimiters such as {{ }} or {%% %%}. Found: %sr*   F
__UNSAFE__z9Conditional is marked as unsafe, and cannot be evaluated.z3{%% if %s %%} True {%% else %%} False {%% endif %%}Truez$error while evaluating conditional (r-   )available_variablesis_templater2   warningtemplater   r/   r   r   stripr   )r   r4   r&   r'   originalr6   s         r   r0   zConditional._check_conditionalV   s    &.#	j"";/ "-.
 &..{;k40&& B&  {L1*+fgg ##ESeg    ( 	j*\dfg+hii	js$   AB B ;B 	B8"B33B8r   )r&   r	   r'   dict[str, t.Any]returnr/   )r&   r	   r'   r@   rA   ztuple[bool, t.Optional[str]])r4   strr&   r	   r'   r@   rA   r/   )__name__
__module____qualname____doc__r   r   r.   r   r#   r(   r%   r0   __classcell__)r   s   @r   r   r      s5    
 fd4ND	)K2jr   r   )
__future__r   typingtansible.errorsr   r   r   +ansible.module_utils.common.text.convertersr   ansible.playbook.attributer   ansible.templater	   ansible.utils.displayr
   r2   r    r   r   <module>rQ      s4   $ #  W W A 5 $ )
)Rj Rjr   