
    Vh^                        d Z ddlmZ ddlZddl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mZmZ ddlmZmZ ddlmZmZ dd	lmZ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$ dZ%dddZ& G d d      Z'dddZ(ddZ)y)z!Classify changes in Ansible code.    )annotationsN   )walk_module_targetswalk_integration_targetswalk_units_targetswalk_compile_targetswalk_sanity_targetsload_integration_prefixes'analyze_integration_target_dependenciesIntegrationTarget)display	is_subdir   )get_python_module_utils_importsget_python_module_utils_name)get_csharp_module_utils_importsget_csharp_module_utils_name)#get_powershell_module_utils_imports get_powershell_module_utils_name)
TestConfigIntegrationConfig)ChangeDescription)data_context__focused__c                   t        |       }t               t               t               t               t               d}t        j                  t              }t               }t               }t               }t               }	|D ]  }
t        j
                  j                  |
      s|j                  |
       4|j                  |
       |j                  |
      }|sYt        j                  d|
t        |      fz  d       |D ]*  }t        j                  |d       |j                  |       ,  |t        |      z  }|rCt        j                  dt        |      t        |      fz         t        t        |      |z        }t        j                  dt        |      z         d}|D ]  }
|j                  |
      }|Ad	}t        j                  d
|
z  d       t        |       }t        j                  d|
z         nt!        |j#                  t$        d            xr |
|v }t'        d |j)                         D              }|r#t+        d |D              s|	j                  |
       rPd|j-                        xs d}dv r7|j-                        r&t+        fd|D              s|r|dz  }|dz  }nd|z  }|j-                        s|dz  }d}nd}| j.                  |k\  rt        j                  |
d|d       |j)                         D ]0  \  }}||   j                  |       |s||   j                  |       2  |dkD  r'| j.                  dk  rt        j0                  d|z         |j)                         D ]/  \  }}|j3                  d       t+        d |D              s*dh||<   1 t'        d |j)                         D              }t'        d |j)                         D              }|j)                         D ]  \  }}|dgk(  sg ||<    t5               }|_        t        |      |_        t        |      |_        ||_        ||_        t        |	      |_         |S )zSCategorize the given list of changed paths and return a description of the changes.sanityunitsintegrationwindows-integrationnetwork-integrationz&Expanded "%s" to %d dependent file(s):r   )	verbosityzAExpanded %d changed file(s) into %d additional dependent file(s).z$Mapping %d changed file(s) to tests.r   NFz	%s -> allr   zPath not categorized: %sc              3  0   K   | ]  \  }}|s	||f  y wN ).0keyvalues      ^/home/dcms/DCMS/lib/python3.12/site-packages/ansible_test/_internal/classification/__init__.py	<genexpr>z%categorize_changes.<locals>.<genexpr>t   s     O*#u#uOs   
	c              3  $   K   | ]  }d |v  
 ywr   Nr%   )r&   commands     r)   r*   z%categorize_changes.<locals>.<genexpr>v   s     )Xw-7*B)Xs   z: noner   c              3  2   K   | ]  }|k7  s	d |v   ywr,   r%   )r&   r-   verbose_commands     r)   r*   z%categorize_changes.<locals>.<genexpr>~   s     kGPW[jPj}7ks   
	z
 (focused)z (targeted)z%sz -> z+Omitted %d file(s) that triggered no tests.c              3  &   K   | ]	  }|d k(    yw)allNr%   r&   targets     r)   r*   z%categorize_changes.<locals>.<genexpr>   s     56v5s   r2   c              3  B   K   | ]  \  }}|s	|t        |      f  y wr$   sortedr&   cmdtargetss      r)   r*   z%categorize_changes.<locals>.<genexpr>   s      blc7ZaC1bs   
c              3  <   K   | ]  \  }}|t        |      f  y wr$   r6   r8   s      r)   r*   z%categorize_changes.<locals>.<genexpr>   s     `|sGS&/2`s   )!
PathMappersetcollectionsdefaultdictospathexistsaddget_dependent_pathsr   infolenr7   classify	all_testswarningboolpopFOCUSED_TARGETdictitemsanygetr"   noticediscardr   r-   changed_pathsdeleted_pathsregular_command_targetsfocused_command_targetsno_integration_paths)argspathsr0   mappercommandsfocused_commandsrT   original_pathsadditional_pathsrW   rA   dependent_pathsdependent_path
none_counttestsfocused_targetresultr"   r-   r4   r:   sorted_commandschangess     `                    r)   categorize_changesrg   9   s   F %u"u"u%H #..s3!eM"uN!$%(U 1ww~~d#d#4  44T:=s?G[@\\hij- 	1NLL15  0	11$ E
"X\_`e\fhkl|h}[~~s5z$445LL7#e*DEJ ,6%="NLLt+q9dOEOO6=>!%))ND"AB]t~G]NOOOEc)XRW)X&X$((.%4eii6P6ZTZ6Z[ !O3		/8Rkukk)"l2F-/99_-a
		~~*48AF${{} 	6OGVW!!&) )--f5		6Q,6\ A~$..1,DzQR$NN, (5W55!&HW	( bhnnFVbbO`GWG]G]G_``+113 *ug')OG$*  !G%GO">2G"=1G&5G#&6G##)*>#?G N    c                      e Zd ZdZddZddZddZddZddZddZ	ddZ
dd	Zdd
ZddZddZddZddZddZy)r<   z,Map file paths to test commands and targets.c                *   || _         t        | j                         | _        t        t	                     | _        t        t                     | _        t        t                     | _	        t        t                     | _        t        t                     | _        | j                  D cg c]3  }t        j                  j!                  |j                        d   dv s2|5 c}| _        | j                  D cg c]4  }t        j                  j!                  |j                        d   dk(  s3|6 c}| _        t'        d | j                  D              | _        t'        d | j                  D              | _        t'        d | j                  D              | _        t/        d | j                  D              | _        t/        d | j
                  D              | _        t/        d	 | j
                  D              | _        t/        d
 | j
                  D              | _        t/        d | j
                  D              | _        t/        d | j
                  D              | _        t=               | _        tA        | j
                        | _!        i | _"        i | _#        i | _$        i | _%        | j
                  D ]V  }|jL                  D ]E  }|| jJ                  vrt'               | jJ                  |<   | jJ                  |   jO                  |       G X y c c}w c c}w )Nr   ).ps1.psm1.csc              3  N   K   | ]  }|j                   s|j                     y wr$   )moduler3   s     r)   r*   z&PathMapper.__init__.<locals>.<genexpr>   s      a6SYS`S` as   %%c              3  B   K   | ]  }|j                   D ]  }|   y wr$   aliasesr&   r4   as      r)   r*   z&PathMapper.__init__.<locals>.<genexpr>   s      ZV6>>ZaqZqZs   c              3  4   K   | ]  }|j                     y wr$   )rA   r3   s     r)   r*   z&PathMapper.__init__.<locals>.<genexpr>   s     NNs   c              3  L   K   | ]  }|j                   |j                  f  y wr$   )rA   ro   r3   s     r)   r*   z&PathMapper.__init__.<locals>.<genexpr>   s     (h&&++v}})E(hs   "$c              3  8   K   | ]  }|j                   |f  y wr$   )namer3   s     r)   r*   z&PathMapper.__init__.<locals>.<genexpr>   s     /m&f0E/ms   c              3  F   K   | ]  }|j                   D ]  }||f 
  y wr$   rq   rs   s      r)   r*   z&PathMapper.__init__.<locals>.<genexpr>   s(     0|msm{m{0|hi!V0|0|s   !c              3  v   K   | ]1  }d |j                   v r!|j                  D ]  }||j                  f  3 yw)posix/Nrr   modulesrx   r&   r4   ms      r)   r*   z&PathMapper.__init__.<locals>.<genexpr>   sI      0gV3;v~~3MW]WeWe0gRS 23FKK0@ 0g0@ 0g   79c              3  v   K   | ]1  }d |j                   v r!|j                  D ]  }||j                  f  3 yw)windows/Nr|   r~   s      r)   r*   z&PathMapper.__init__.<locals>.<genexpr>   I      2kv5?6>>5Q[a[i[i2kVW 45fkk2B 2k2B 2kr   c              3  v   K   | ]1  }d |j                   v r!|j                  D ]  }||j                  f  3 yw)network/Nr|   r~   s      r)   r*   z&PathMapper.__init__.<locals>.<genexpr>   r   r   )(rX   get_integration_all_targetintegration_all_targetlistr   integration_targetsr   module_targetsr   compile_targetsr   units_targetsr	   sanity_targetsr@   rA   splitextpowershell_targetscsharp_targetsr=   units_modulesunits_pathssanity_pathsrM   module_names_by_pathintegration_targets_by_nameintegration_targets_by_aliasposix_integration_by_modulewindows_integration_by_modulenetwork_integration_by_moduler
   prefixesr   integration_dependenciespython_module_utils_importspowershell_module_utils_importscsharp_module_utils_importspaths_to_dependent_targets
needs_filerC   )selfrX   r4   rA   s       r)   __init__zPathMapper.__init__   s   	&@&K##'(@(B#C "#6#89#$8$:;!"4"67"#6#898<8K8K  #FfrwwO_O_`f`k`kOlmnOo  tE  PE6  #F484G4Gu&277K[K[\b\g\gKhijKkotKtvu  aT=O=O aaZt/A/AZZN$:M:MNN$((hTXTgTg(h$h!+//mTXTlTl/m+m(,00|4KcKc0|,|)+/ 0gtOgOg 0g ,g(-1 2kQUQiQi 2k .k*-1 2kQUQiQi 2k .k* 23(OPTPhPh(i%@B(DF,@B(MO'.. 	BF)) Bt>>><?ED33D9//599&A	B	B7 #Fus   (3LL64L+Lc                   t        | j                  |            }t               }|rRt        |      }||z  }t               }|D ]0  }| j                  |      }|D ]  }||vs|j                  |        2 |rRt	        |      S )zeReturn a list of paths which depend on the given path, recursively expanding dependent paths as well.)r=   !get_dependent_paths_non_recursiver   rC   r7   )r   rA   unprocessed_pathsrY   queued_pathsqueued_path	new_pathsnew_paths           r)   rD   zPathMapper.get_dependent_paths   s     F Ft LM 12L&&E #+ 8 BB;O	 ) 8Hu,)--h788   e}rh   c                    | j                  |      }|| j                  j                  |t                     D cg c]  }|j                  dz    c}z  }t        t        |            }|S c c}w )ziReturn a list of paths which depend on the given path, including dependent integration test target paths./)get_dependent_paths_internalr   rP   r=   rA   r7   )r   rA   rY   r4   s       r)   r   z,PathMapper.get_dependent_paths_non_recursive   sa    11$7$2Q2Q2U2UVZ\_\a2bc&++#ccs5z" ds   A*c                   t         j                  j                  t         j                  j                  |      d         d   }t	        |t               j                  j                        rB|dk(  r| j                  |      S |dk(  r| j                  |      S |dk(  r| j                  |      S t	        |t               j                  j                        r| j                  |      S g S )z6Return a list of paths which depend on the given path.r   .pyrl   rm   )r@   rA   r   splitr   r   contentmodule_utils_pathget_python_module_utils_usage!get_powershell_module_utils_usageget_csharp_module_utils_usageintegration_targets_pathget_integration_target_usage)r   rA   exts      r)   r   z'PathMapper.get_dependent_paths_internal   s    ggrww}}T2156q9T<>11CCDe|99$??g~==dCCe|99$??T<>11JJK44T::	rh   c                n   | j                   st        j                  d       t        j                         }t	        | j
                        | _         t        j                         }t        j                  dt        | j                         ||z
  fz         t        |      }t        | j                   |         S )zZReturn a list of paths which depend on the given path which is a Python module_utils file.z(Analyzing python module_utils imports...z1Processed %d python module_utils in %d second(s).)	r   r   rE   timer   r   rF   r   r7   r   rA   beforeafterrx   s        r)   r   z(PathMapper.get_python_module_utils_usage  s    //LLCDYY[F/NtOcOc/dD,IIKELLLPSTXTtTtPuw|  @F  xF  PG  G  H+D1d66t<==rh   c                n   | j                   st        j                  d       t        j                         }t	        | j
                        | _         t        j                         }t        j                  dt        | j                         ||z
  fz         t        |      }t        | j                   |         S )z^Return a list of paths which depend on the given path which is a PowerShell module_utils file.z,Analyzing powershell module_utils imports...z5Processed %d powershell module_utils in %d second(s).)	r   r   rE   r   r   r   rF   r   r7   r   s        r)   r   z,PathMapper.get_powershell_module_utils_usage  s    33LLGHYY[F3VW[WnWn3oD0IIKELLPTWX\X|X|T}  @E  HN  @N  TO  O  P/5d::4@AArh   c                   | j                   st        j                  d       t        j                         }t	        | j
                  | j                        | _         t        j                         }t        j                  dt        | j                         ||z
  fz         t        |      }t        | j                   |         S )zVReturn a list of paths which depend on the given path which is a C# module_utils file.z$Analyzing C# module_utils imports...z-Processed %d C# module_utils in %d second(s).)
r   r   rE   r   r   r   r   rF   r   r7   r   s        r)   r   z(PathMapper.get_csharp_module_utils_usage'  s    //LL?@YY[F/NtOfOfhlh{h{/|D,IIKELLHCPTPpPpLqsx  |B  tB  LC  C  D+D1d66t<==rh   c                V   |j                  d      d   }t        | j                  j                  |t	                           D cg c]Y  }t
        j                  j                  t               j                  j                  |      t
        j                  j                  z   [ }}|S c c}w )zZReturn a list of paths which depend on the given path which is an integration target file.r      )r   r7   r   rP   r=   r@   rA   joinr   r   r   sep)r   rA   target_namer4   
dependentss        r)   r   z'PathMapper.get_integration_target_usage4  s    jjoa($*4+H+H+L+L[Z]Z_+`$ac  ggll<>#9#9#R#RTZ[^`^e^e^i^ii c
 c cs   AB&c                \    | j                  |      }|y|| j                  v r	d|vr||d<   |S )zIClassify the given path and return an optional dictionary of the results.Nr   )	_classifyr   )r   rA   rd   s      r)   rG   zPathMapper.classify<  s@    % > 4$$$)?#F8rh   c                    t               j                  j                  r| j                  |      S t               j                  j                  r| j                  |      S y)z-Return the classification for the given path.N)r   r   
is_ansible_classify_ansible
collection_classify_collection)r   rA   s     r)   r   zPathMapper._classifyJ  sI    >!!,,))$//>!!,,,,T22rh   c           
     R   t         j                  j                  |      }t         j                  j                  |      }t         j                  j	                  |      \  }}i }t         j                  j
                  |vr|dv rt        | j                        S t        |d      rt        | j                        S t        |d      r|S t        |t               j                  j                        rt         j                  j                  |      s|S | j                  j                  |j                  d      d         }|st!        j"                  d|z         |S d|j$                  v r|S dd	|j$                  v r|j&                  nd
dd|j$                  v r|j&                  nd
dd|j$                  v r|j&                  nd
t(        |j&                  iS t        |t               j                  j*                        r|t               j                  j*                  k(  r?dD ]:  }||k(  r|dk(  r|| j,                  ic S ||dz   k(  s&|dk(  s,|| j,                  ic S  | j,                  | j,                  | j,                  dS t        |t               j                  j.                        rddiS t        |t               j                  j0                        rm|| j2                  v rd|iS t         j                  j                  |      }	|	r:|	dz   | j2                  v rd|	dz   iS t         j                  j                  |	      }	|	r:t        |t               j                  j4                        r| j6                  j                  |      }
|
rxd|
| j8                  v r|
nd
d|dk(  r| j:                  j                  |
      nd
d|dv r| j<                  j                  |
      nd
d| j>                  j                  |
      t(        |
iS |S t        |t               j                  j@                        r|dk(  r|S |dk(  r|S |dk(  r|S t        |t               j                  jB                  d         r|dk(  r|jE                  d      r:d|dd
 z  tG        fd| jH                  D              rddS | j,                  ddS | jJ                  j                  |      d k(  r|}nr|jM                  d!      r'| jJ                  j                  |d
d"       d k(  r|d
d" }n:|jM                  d#      r'| jJ                  j                  |d
d$       d k(  r|d
d$ }nd
}|r6d%|z  | jH                  v rddS t!        j"                  d&z  d'(       ddiS t        |t               j                  jB                  d)         rCt         j                  jO                  t               j                  j0                  d*d)      }|d+k(  rC| j,                  | j,                  | j,                  t         j                  jO                  |d,      d-S t         j                  jO                  |d.|z        }|| j2                  vrd
}d/|z  }|| j                  vrd
}d0|z  }|| j                  vrd
}|d1v r| j,                  |d2S |d3k(  r| j,                  | j,                  |d4S |d5k(  r| j,                  |dS |d6k(  r|| j,                  |d4S |||d7S t        |t               j                  jB                  d8         rddiS t        |t               j                  jB                  d9         r;|d+k(  rt        | j                        S g d:}||v rtQ        | j                        }nd
}| j                  j                  d;|z        }t         j                  jO                  t               j                  j0                  d*d9      }t         j                  jO                  |d.|z        }|| j2                  vrd
}d|rd	|j$                  v r|j&                  n|d|rd|j$                  v r|j&                  nd
d|rd|j$                  v r|j&                  nd
d|t(        |r|j&                  iS d
iS t        |t               j                  jB                  d<         r| jS                  d<|      S t        |t               j                  jB                  d=         r| jS                  d=|      S t        |t               j                  jB                  d>         sVt        |t               j                  jB                  d?         s+t        |t               j                  jB                  d@         rj|dk(  re|| jJ                  v rH| jJ                  |   d k(  r6d%|z  | jH                  v rddS t!        j"                  d&z  d'(       ddiS | j,                  ddS t        |t               j                  jB                  dA         r| jS                  dA|      S y
)BzOReturn the classification for the given path using rules common to all layouts.)zazure-pipelines.ymlz.azure-pipelinesz.githubr   r   zUnexpected non-target found: %szhidden/r   r{   Nr    r   r!   r   )r   r    r!   z.cfgz.requirements.txtr   r2   r   r   )rm   rk   rm   rl   actionnet_znetwork/.*_%s   c              3  P   K   | ]  }t        j                  d z  |        yw)z^%s$N)research)r&   aliasnetwork_targets     r)   r*   z.PathMapper._classify_common.<locals>.<genexpr>  s!     u%299W~%=uEus   #&)r!   r   network_configi	_templateiznetwork/%s/z%Integration tests for "%s" not found.T)unique
connectionpluginsr    )r   r    r!   r   
test_%s.pyzconnection_%szconnection_windows_%s)winrmpsrpr    r   local)r   r!   r   network_cliparamiko_ssh)r   r    r   doc_fragments	inventory)	host_listscriptyamliniautozinventory_%sfilterlookupterminalcliconfnetconftest)*r@   rA   dirnamebasenamer   r   rH   rX   r   r   r   r   rB   r   rP   r   r   rI   rr   rx   rL   integration_pathr   sanity_path	unit_pathr   module_pathr   r   r   r   r   r   plugin_paths
startswithrO   r   r   endswithr   r   _simple_plugin_tests)r   rA   r   filenamerx   r   minimalr4   r-   	test_pathmodule_namenetwork_platform	units_dir
units_pathintegration_namewindows_integration_nametest_allposix_integration_fallbackr   s                     @r)   _classify_commonzPathMapper._classify_commonT  s	   ''//$'77##D)GG$$X.	c"$77;;d"   !++T-.TYY''T9%NT<>11JJK77>>$'5599$**S/!:LMF AD HIFNN* h&...Hv{{d%jFNN6Rv{{X\%jFNN6Rv{{X\	  T<>11BBC,.00AAA  G
 w3&=#T%@%@   w88SF]#T%@%@     $::'+'B'B'+'B'B  T<>11==>%  T<>11;;<t'''T  -Is?d&6&66S  GGOOI6	  T<>11==>3377=KK4;M;M,M[SW!X[_dXd4#C#C#G#G#Tjn)beixbx4+M+M+Q+QR]+^  C)4+M+M+Q+QR]+^"K  NT<>11CCDe|g~e|T<>11>>xHIe|??6*%4tABx%?NuSWStStuu3A%*   04/J/J!& 
 ==$$T*i7'+$]]9-$--2C2CD"I2NR[2['+CRy$]];/DMM4E4Ed3Bi4PT]4]'+CRy$'+$#%25E%EN%)J)JJ3A%*  
 OO$Kn$\eij    T<>11>>|LM\^%;%;%E%EyR^_Iz!#'#>#>+/+F+F+/+F+FWW\\)R8	  i1DEJ!1!11!
.5t'G'GG#' '>'E$'t/O/OO+/( ((+/+F+F' 
 w#'#>#>+/+F+F'  }$+/+F+F' 
 ~%#3+/+F+F'   0'?#  T<>11>>OP%  T<>11>>{KLz! ++H x-G		-R*-1*5599.4:OPF\^%;%;%E%EyR]^Ii1DEJ!1!11!
 fV^^9Sv{{Ys%fv~~A]v{{cg%fv~~A]v{{cgv 
 <@  T<>11>>xHI,,Xt<<T<>11>>xHI,,Xt<<dLN22??
KL$ 6 6 C CI NO$ 6 6 C CI NOe|4==(T]]4-@I-M%2T%9N%)J)JJ3A%*  
 OO$Kn$\eij   
 ,0+F+F" 
 T<>11>>vFG,,VT::rh   c                    | j                  |      }||S t        j                  j                  |      }t        j                  j	                  |      \  }}i }|j                  d      r|S |j                  d      r|S d|vr|dv r|S |dv r|S y)zQReturn the classification for the given path using rules specific to collections.Nchangelogs/zdocs/r   )
.gitignoreCOPYINGLICENSEMakefile)z.in.md.rstz.tomlr   )r  r@   rA   r   r   r   )r   rA   rd   r   dummyr   r   s          r)   r   zPathMapper._classify_collectionq  s    &&t,M77##D)WW%%h/
s"$??=)N??7#Nd?      rh   c                   t         j                  j                  |      }t         j                  j                  |      }t         j                  j	                  |      \  }}i }ddi}|dk(  rMddddddd	d
}|j                  |      }	|	r|	j                  d      \  }
}|
|iS d| d}|| j                  v rd|iS | j                  |      }||S |j                  d      rt        | j                        S |j                  d      r|S |j                  d      r|S |j                  d      r!d}|| j                  vrd}| j                  |dS |j                  d      rt        | j                        S |j                  d      r|S |j                  d      rcdt         j                  j	                  |j                  t         j                  j                        d         d    }|| j                  v rd|iS |S |j                  d      r|S |j                  d      rL|j                  d      r;d|j                  d      d   j                  d       d   z  }|| j                  v rd|iS |j                  d!      r|d"k(  rt        | j                  d#$      S |j                  d%      r,d|z  }|| j                  v rd|iS t        | j                        S |j                  d&      rd'd(d)S |j                  d*      rd'd(d+S |j                  d,      r|d-v r|| j                  iS |d.v r|d'iS |j                  d/      s|j                  d0      rd'd(d)S |j                  d1      rd'd(d+S |j                  d2      rt        | j                        S |j                  d3      rt        | j                        S d|vr|d4v r|S |d5v r|S |d6v r|S y)7zMReturn the classification for the given path using rules specific to Ansible.r   z
packaging/z.azure-pipelines/commandszintegration:cloud/zintegration:allznetwork-integration:allz
sanity:allz	units:allzwindows-integration:all)zcloud.shzlinux.shz
network.shz	remote.shz	sanity.shzunits.shz
windows.sh:zcloud/r   Nzbin/r  zhacking/z lib/ansible/executor/powershell/ztest/units/executor/powershell/r   zlib/ansible/z	licenses/
packaging_r   r   ztest/ansible_test/ztest/lib/ansible_test/config/zcloud-config-z	cloud/%s/-r   .z'test/lib/ansible_test/_data/completion/z1test/lib/ansible_test/_data/completion/docker.txtT)forcez;test/lib/ansible_test/_internal/commands/integration/cloud/z0test/lib/ansible_test/_internal/commands/sanity/r2   zansible-test/)r   r   z/test/lib/ansible_test/_internal/commands/units/)r   r   z)test/lib/ansible_test/_data/requirements/)r   r!   r    )r   r   z.test/lib/ansible_test/_util/controller/sanity/z*test/lib/ansible_test/_util/target/sanity/z*test/lib/ansible_test/_util/target/pytest/z	test/lib/ztest/support/)z.gitattributesr	  z.mailmapr
  r  )zMANIFEST.inzpyproject.tomlzrequirements.txt)r  r  )r@   rA   r   r   r   rP   r   r   r  r   rH   rX   r   r   r   r   )r   rA   r   r   rx   r   r   	packagingtest_map
test_matchtest_commandtest_targetcloud_targetrd   r  packaging_targets                   r)   r   zPathMapper._classify_ansible  sR   ''//$'77##D)GG$$X.	c"$ <
	 110-7.)'7H "h/J,6,<,<S,A)k !+  $D6+Lt@@@!<  &&t,M ??6"TYY''??=)N??:&N??=>:J!1!11!
 (,'B'B# 
 ??>*TYY''??;'N??<(!+BGG,<,<TZZ=TUV=W,XYZ,[+\]4#C#CC!#3  N??/0N??:;/*TZZ_Q-?-E-Ec-J1-MM4#D#DD%|  ??DEJJ $77??XY&-Lt@@@!<  TYY''??MN. 
 ??LM. 
 ??FG   $55    
 %  ??KLPTP_P_  aM  QN. 
 ??GH. 
 ??;'TYY''???+TYY''d?     
 !    rh   c                V   |dk(  rt        | j                  d      S | j                  j                  |d|      }|r|j                  }nd}t
        j                  j                  t               j                  j                  d|d|z        }|| j                  vrd}t        ||      S )z
        Return tests for the given plugin type and plugin name.
        This function is useful for plugin types which do not require special processing.
        r   T_Nr   r   )r   r   )rH   rX   r   rP   rx   r@   rA   r   r   r   r   r   rM   )r   plugin_typeplugin_nameintegration_targetr  r  s         r)   r   zPathMapper._simple_plugin_testsP  s    
 *$TYY--!==AA[ZeBfg166#WW\\,."8"8"B"BI{\hkv\vw
T---J(
 	
rh   N)rX   r   returnNone)rA   strr"  	list[str])rA   r$  r"  zt.Optional[dict[str, str]])r  r$  r   r$  r"  zdict[str, t.Optional[str]])__name__
__module____qualname____doc__r   rD   r   r   r   r   r   r   rG   r   r  r   r   r   r%   rh   r)   r<   r<      sS    6)BV&&>B>[z$Lwr
rh   r<   c                2    |rd}nt        |       }dd|||dS )zFReturn the targets for each test command when all tests should be run.r2   r   )r   )rX   r  r   s      r)   rH   rH   j  s1    !&!;D!A -55 rh   c                <    t        | t              r| j                  S y)z6Return the target to use when all tests should be run.r2   )
isinstancer   changed_all_target)rX   s    r)   r   r   z  s    $)*&&&rh   r$   )rX   r   rY   r%  r0   zt.Optional[str]r"  r   )F)rX   r   r  rJ   r"  zdict[str, str])rX   r   r"  r$  )*r)  
__future__r   r>   r@   r   r   typingtr4   r   r   r   r   r	   r
   r   r   utilr   r   pythonr   r   csharpr   r   
powershellr   r   configr   r   metadatar   datar   rL   rg   r<   rH   r   r%   rh   r)   <module>r8     sq    ' "  	 	  	 	 	




 upv

 v

r rh   