
    Vh                    t    d Z ddlmZ ddlZddlmZmZ ddlm	Z	m
Z
 ddlmZmZ  G d d	      Z G d
 d      Zy)z2Test metadata for passing data to delegated tests.    )annotationsN   )displaygenerate_name)write_json_fileread_json_file)
parse_diffFileDiffc                  T    e Zd ZdZd	dZd
dZddZddZedd       Z	edd       Z
y)Metadataz4Metadata object for passing data to delegated tests.c                Z    i | _         d| _        d| _        d| _        t	               | _        y)zInitialize metadata.N)changescloud_configchange_descriptionci_providerr   
session_idselfs    O/home/dcms/DCMS/lib/python3.12/site-packages/ansible_test/_internal/metadata.py__init__zMetadata.__init__   s*    ?AW[AE,0'/    c                :   t        |      }t        |d       }t        d |D              | _        |D cg c]t  }|j                  j
                  |j                  j
                  k7  s1|j                  j                  sH|j                  j                  s_|j                  j
                  v }}|D cg c]/  }|j                  j                  r|j                  j
                  1 }}||z   D ]   }|| j                  v rd| j                  |<   " yc c}w c c}w )z,Populate the changeset using the given diff.c                .    | j                   j                  S N)newpath)ks    r   <lambda>z+Metadata.populate_changes.<locals>.<lambda>#   s    

 r   )keyc              3     K   | ]9  }|j                   j                  t        |j                   j                        f ; y wr   )r   r   tupleranges).0patchs     r   	<genexpr>z,Metadata.populate_changes.<locals>.<genexpr>%   s,     [%UYY^^U5993C3C-DE[s   ?A))r   r   N)r	   sorteddictr   oldr   r   exists)r   diffpatchesr$   renamesdeletesr   s          r   populate_changeszMetadata.populate_changes    s    T""(6J"K[SZ[[/6  Fe%))..EIINN:Z_d_h_h_o_otyt}t}  uE  uE599>>  F  F/6Oeeii>N>N599>>OO g% 	+Dt||# "+DLL	+	 FOs#   2D(D?DD4DDc                    t        | j                  | j                  | j                  | j                  j                         | j                        S )z3Return a dictionary representation of the metadata.)r   r   r   r   r   )r'   r   r   r   r   to_dictr   r   s    r   r0   zMetadata.to_dict3   sA    LL**((#66>>@
 	
r   c                v    | j                         }t        j                  d|d|d       t        ||       y)z)Write the metadata to the specified file.z>>> Metadata: 
   )	verbosityN)r0   r   infor   )r   r   datas      r   to_filezMetadata.to_file=   s*    ||~tT:aHd#r   c                B    t        |       }t        j                  |      S )z/Return metadata loaded from the specified file.)r   r   	from_dict)r   r6   s     r   	from_filezMetadata.from_fileE   s     d#!!$''r   c                    t               }| d   |_        | d   |_        | d   |_        t        j                  | d         |_        | d   |_        |S )z5Return metadata loaded from the specified dictionary.r   r   r   r   r   )r   r   r   r   ChangeDescriptionr9   r   r   )r6   metadatas     r   r9   zMetadata.from_dictK   s\     :	? $^ 4#M2&7&A&A$G[B\&]#"<0r   NreturnNone)r*   t.Optional[list[str]]r?   r@   r?   dict[str, t.Any])r   strr?   r@   )r   rD   r?   r   )r6   rC   r?   r   )__name__
__module____qualname____doc__r   r.   r0   r7   staticmethodr:   r9    r   r   r   r      sA    >*+&
$ ( (
 	 	r   r   c                  V    e Zd ZdZddZed	d       Zed	d       Zd
dZe	dd       Z
y)r<   zDescription of changes.c                X    d| _         g | _        g | _        i | _        i | _        g | _        y )N commandchanged_pathsdeleted_pathsregular_command_targetsfocused_command_targetsno_integration_pathsr   s    r   r   zChangeDescription.__init__[   s1    (*(*=?$=?$/1!r   c                L    | j                   j                  | j                        S )zOptional list of target names.)rR   getrO   r   s    r   targetszChangeDescription.targetsc        ++//==r   c                L    | j                   j                  | j                        S )z&Optional list of focused target names.)rS   rV   rO   r   s    r   focused_targetsz!ChangeDescription.focused_targetsh   rX   r   c                    t        | j                  | j                  | j                  | j                  | j
                  | j                        S )z=Return a dictionary representation of the change description.rN   )r'   rO   rP   rQ   rR   rS   rT   r   s    r   r0   zChangeDescription.to_dictm   sC    LL,,,,$($@$@$($@$@!%!:!:
 	
r   c                    t               }| d   |_        | d   |_        | d   |_        | d   |_        | d   |_        | d   |_        |S )z=Return a change description loaded from the given dictionary.rO   rP   rQ   rR   rS   rT   )r<   rO   rP   rQ   rR   rS   rT   )r6   r   s     r   r9   zChangeDescription.from_dictx   s`     $%y/ $_ 5 $_ 5*./H*I'*./H*I''+,B'C$r   Nr>   )r?   rA   rB   )r6   rC   r?   r<   )rE   rF   rG   rH   r   propertyrW   rZ   r0   rI   r9   rJ   r   r   r<   r<   X   sK    !2 > > > >	
 
 
r   r<   )rH   
__future__r   typingtutilr   r   ior   r   r*   r	   r
   r   r<   rJ   r   r   <module>rc      s4    8 " 

@ @F+ +r   