
    Vh_                        d Z ddlmZ ddlZddlZddlZddlmZm	Z	m
Z
mZmZmZ ddlmZ ddlm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  G d de      Zy)Sanity test using yamllint.    )annotationsN   )SanitySingleVersionSanityMessageSanityFailureSanitySuccessSanityTargetsSANITY_ROOT   )
TestResult)
TestTarget)SubprocessErrordisplay	is_subdir)run_command)SanityConfig)data_context)PythonConfigc                  V    e Zd ZdZedd       Zed	d       Zd
dZddZe	dd       Z
y)YamllintTestr   c                     y)zError code for ansible-test matching the format used by the underlying test program, or None if the program does not use error codes.zansible-test selfs    _/home/dcms/DCMS/lib/python3.12/site-packages/ansible_test/_internal/commands/sanity/yamllint.py
error_codezYamllintTest.error_code3   s         c                     y)z9True if the test requires PyYAML to have libyaml support.Tr   r   s    r   require_libyamlzYamllintTest.require_libyaml8   s     r   c           
     <   |D cg c]3  }t         j                  j                  |j                        d   dv s2|5 }}t        t	               j
                  j                  j                               D ]  \  }}|dk(  r|j                  |D cg c]u  }t         j                  j                  |j                        d   dk(  rDt         j                  j                  |j                        dk7  rt        |j                  |      r|w c}        |S c c}w c c}w )z\Return the given list of test targets, filtered to include only those relevant for the test.r   )z.ymlz.yamlmodule_utilsz.pyz__init__.py)ospathsplitextsortedr   contentplugin_pathsitemsextendbasenamer   )r   targetstargetyaml_targetsplugin_typeplugin_paths         r   filter_targetszYamllintTest.filter_targets=   s    -4n68H8H8UVW8X\m8mnn(.|~/E/E/R/R/X/X/Z([ 	G$Kn,g !FF!#!1!1&++!>q!AU!J!#!1!1&++!>-!O!*6;;!D "( !F G		G  o!Fs   3DDA:D
c                   | j                  |      }|j                  D cg c]  }|j                   }}| j                  |||      }|j	                  ||      }|rt        | j                  |      S t        | j                        S c c}w )N)messages)load_processorincluder$   
test_pathsprocess_errorsr   namer	   )r   argsr,   pythonsettingsr-   pathsresultss           r   testzYamllintTest.testL   sy    &&t,+2??;;;//$v6))'59 W==TYY'' <s   Bc                R   |j                   t        j                   j                  t        dd      g}dj                  |      }t	        j
                  |d       	 t        | ||d      \  }}d}|rt        ||||
      | j                  rg S t        j                  |      d   }	|	D 
cg c]7  }
t        |
d   |
d   |
d   t        |
d         t        |
d         |
d         9 }	}
|	S # t        $ r.}|j                  }|j                  }|j                  }Y d	}~d	}~ww xY wc c}
w )zGTest the specified paths using the given Python and return the results.yamllintzyamllinter.py
   )	verbosityT)datacapturer   N)cmdstatusstderrstdoutr3   codemessager$   linecolumnlevel)rJ   rK   r$   rL   rM   rN   )r$   r#   joinr   r   infor   r   rI   rH   rG   explainjsonloadsr   int)r9   r<   r:   rF   rD   rI   rH   rG   exr=   rs              r   r6   zYamllintTest.test_pathsY   s)    KKGGLLj/B

 yyTQ'	(stLNFFF !c&PVWW<<I**V$Z0   !6iL6QvYq{#G*
   -  	YYFYYFYYF	s   C* *<D$*	D!3$DD!N)returnzt.Optional[str])rW   bool)r,   list[TestTarget]rW   rY   )r9   r   r,   r
   r:   r   rW   r   )r9   r   r<   z	list[str]r:   r   rW   zlist[SanityMessage])__name__
__module____qualname____doc__propertyr   r    r1   r>   staticmethodr6   r   r   r   r   r   0   sI    %   ( $ $r   r   )r]   
__future__r   rR   r#   typingt r   r   r   r	   r
   r   r>   r   r-   r   utilr   r   r   util_commonr   configr   rD   r   host_configsr   r   r   r   r   <module>rh      sU    ! "  	   
N& Nr   