
    Vh!                        d dl mZ d dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZmZ d dlmZ d dlmZ  e       Zdd	d
ddZd Zd ZddZddZddZddZd Zy)    )annotationsN)	constants)AnsibleErrorAnsibleParserError)to_text	to_native)AnsibleLoader)Displaydocplainexamples
returndocsmetadata)DOCUMENTATIONEXAMPLESRETURNANSIBLE_METADATAc                N    t         j                         D ]  \  }}|| k(  s|c S  y)z" reverse lookup of the dict above N)string_to_varsitems)valuekvs      K/home/dcms/DCMS/lib/python3.12/site-packages/ansible/parsing/plugin_docs.py_var2stringr      s*    $$& 1:H    c                 R    t         j                         D  ci c]  } | d c} S c c} w )z? initialize a return dict for docs with the expected structure N)r   values)r   s    r   _init_doc_dictr   !   s#    +2245AtG555s   
$c                   t               }i }	 t        | d      5 }t        |j                         |       j	                         }ddd       |r't        D ]  }|j                  |d      |t        |   <     |S # 1 sw Y   4xY w# t
        $ rA}d| dt        |      }|st        ||      |rt        j                  |       Y d}~|d}~ww xY w)z5 Read docs from 'sidecar' yaml file doc for a plugin rb	file_nameNzUnable to parse yaml file '': orig_exc)r   openr	   readget_single_data	Exceptionr   r   displayerrorr   get)	filenameverboseignore_errorsdata	file_datayamlfileemsgkeys	            r   read_docstring_from_yaml_filer6   &   s     DI(D! 	]X%hmmoJZZ\I	] ! 	AC(1c4(@D$%	A K	] 	] 6>	!M$S155MM#s.   B *A7B 7B <B 	C7CCc                   t               }t               }d}t        j                  |       5 }t        j                  |j
                        }|D ]$  }|j                  t        j                  k(  rC|j                  dk(  r4|j                  t        v r"|j                  |vrt        |j                     }d|g|j                  t        j                  k(  s|j                  |j                         |j                  }	|	j                  d      r|	j                  d      }	|	j                  d      r|	j                  d      }	|dk(  rt!        |	      ||<   n	 t#        |	|       j%                         ||<   d}' 	 ddd       |st3        | ||      }|S # t&        $ rM}
d	t)        |      d
| dt+        |
      }|st-        ||
      |rt.        j1                  |       Y d}
~
pd}
~
ww xY w# 1 sw Y   sxY w)z
    Use tokenization to search for assignment of the documentation variables in the given file.
    Parse from YAML and return the resulting python structure or None together with examples as plain text.
    N   )rbr    )'"z'"r   r!   zUnable to parse docs 'z' in python file 'r#   r$   )setr   tokenizer&   generate_tokensreadlinetypeNAMEstartstringr   STRINGadd
startswithlstripstripr   r	   r(   r)   r   r   r   r*   r+   read_docstring_from_python_file)r-   r.   r/   seenr0   next_stringftokenstokenr   r3   r4   s               r   !read_docstring_from_python_modulerP   =   s    5DDK	x	  +#A))!**5 )	#E zzX]]* ;;!#(F5<<_cKc"0">K &5::+H & ##J/!LL.E##J/!KK.E /1(/D%/,9%8,T,d,d,f[) #S)	#+#\ .x-PK % /U`alUmow  zC  DE  zF  G,"4S1"EE$#MM#./I+# +#sD   BG)5G)A?G)F1G)	G&AG!G)!G&&G))G2c           
        t               }	 t        | d      5 }t        j                  |j	                               }ddd       j
                  D ]  }t        |t        j                        s|j                  D ]  }	 |j                  }|t        v st        |   }	t        |j                  t        j                        r#t        j                   |j                        ||	<   nZ|dk(  r#t#        |j                  j                        ||	<   n2t%        |j                  j                  |       j'                         ||	<   t        j)                  d|	z          
 	 |S # 1 sw Y   $xY w# t        $ r  t        j                  d|d| d       Y w xY w# t*        $ rB}
d	| d
t-        |
      }|st/        ||
      |rt        j1                  |       Y d}
~
|S d}
~
ww xY w)z
    Use ast to search for assignment of the DOCUMENTATION and EXAMPLES variables in the given file.
    Parse DOCUMENTATION from YAML and return the YAML doc or None together with EXAMPLES, as plain text.
    r    Nz0Building documentation, failed to assign id for z on z
, skippingr   r!   zDocumentation assigned: %sz.Unable to parse documentation in python file 'r#   r$   )r   r&   astparser'   body
isinstanceAssigntargetsidAttributeErrorr*   warningr   r   Dictliteral_evalr   r	   r(   debugr)   r   r   r+   )r-   r.   r/   r0   b_module_dataMchildttheidvarkeyr3   r4   s               r   rJ   rJ   {   s    D"(D! 	0]		-,,./A	0 VV 	ME%, MA! ! .!/!6%ekk388<+.+;+;EKK+HDL$
2 07u{{7H7H/IV 0=U[[=N=NZb/c/s/s/uV&BV&KL+M	M@ KG	0 	0 * !pqs{(|} !(  IQS\]^S_`$S155MM#Ks^   F $E2F /F ?E+F CF E(#F +%FF FF 	G" 7GG"c                0   | j                  t        j                        rt        | ||      }nG| j                  t        j                        rt        | ||      }n|st        dt        |       z        s|st        dt        |       z        d|d<   |S )zC returns a documentation dictionary from Ansible plugin docstrings )r.   r/   z Unknown documentation format: %sz%Unable to parse documentation for: %sNseealso)endswithCYAML_DOC_EXTENSIONSr6   PYTHON_DOC_EXTENSIONSrP   r   r   )r-   r.   r/   	docstrings       r   read_docstringrk      s     ../1(G[hi				122	35h_lm	=	(@SSTT]BYxEXXYY  Iir   c                h   d}d}d}g }t        | d      5 }|D ]  }|r|r#|j                  |      r|j                  |       *|r|j                  |      s n~|j                         j                  d      s_d}dt	        |      t	        |j                               z
  dz   z  }|j                  |       |j                  d      sd	|v sd
|v sd} ddd       dj                  |      j                         j                  d      }t        ||       j                         }|S # 1 sw Y   TxY w)z
    Quickly find short_description using string methods instead of node parsing.
    This does not return a full set of documentation strings and is intended for
    operations like ansible-doc -l.
    F r9   zshort_description:T r8   r   =:N.r!   )
r&   rG   appendrH   lenjoinrI   rstripr	   r(   )	r-   in_documentation	capturingindent_detectiondoc_stubt_module_datalineshort_descriptionr0   s	            r   read_docstubr}      s$    IH	h	 (! 	(D1A!BOOD)t7G'H[[]--.BC $I (+c$i#dkkm:L.Lq.P'Q$OOD)1sd{cTk#' #	((( *00299#>*h?OOQDK/( (s   A!D(7AD(D(D((D1)TT)
__future__r   rR   r>   ansibler   rg   ansible.errorsr   r   +ansible.module_utils.common.text.convertersr   r   ansible.parsing.yaml.loaderr	   ansible.utils.displayr
   r*   r   r   r   r6   rP   rJ   rk   r}    r   r   <module>r      s`    # 
  " ; J 5 )
) "	6
.;|,^*#r   