
    yIfT                       d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
m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 d dlmZ d dlmZ d dlmZ d dlm Z  d dl!m"Z" erd dl#m$Z$ d dl%m&Z&  ej'        e(          Z) G d d          Z*	 	 d&d'dZ+e G d d                       Z, ej-        d!          Z. ej-        d"          Z/ G d# d$          Z0g d%Z1dS )(    )annotationsN)Counter)	dataclass)get_close_matches)chain)TYPE_CHECKINGDictIterableIteratorListcast)
StrConvert)EnvList)HandledError)ToxEnvCreateArgs)Skip)PackageToxEnv)REGISTER)	RunToxEnv)ArgumentParser)Statec                  |    e Zd ZdZdddZdd	ZddZddZddZddZ	ddZ
edd            Zedd            ZdS )CliEnvar  A `CliEnv` is the user's selection of tox test environments, usually supplied via the ``-e`` command-line option
    or in a TOML file (typically ``env_list`` in ``tox.ini``). It may be treated as a sequence if it's not a "default"
    or "all" selection.

    It is in one of three forms:

    - A list of specific environments, instantiated with a string that is a comma-separated list of the environment
      names. (These may have spaces on either side of the commas which are removed.) As a sequence this will be a
      sequence of those names.

    - "ALL" which is all environments defined by the tox configuration. This is instantiated with ``ALL`` either
      alone or as any element of a comma-separated list; any other environment names are ignored. `is_all()` will be
      true and as a sequence it will be empty. This prints in string representation as ``ALL``.

    - The default environments as chosen by tox configuration. This is instantiated with `None` as the parameter,
      `is_default_list()` will be true, and as a sequence this will be empty. This prints in string representation
      as ``<env_list>``.
    NvalueNone | list[str] | strreturnNonec                    t          |t                    r4t                                          |t          t                   d           }|| _        d S )N)of_typefactory)
isinstancestrr   tor   _names)selfr   s     J/var/www/piapp/venv/lib/python3.11/site-packages/tox/session/env_select.py__init__zCliEnv.__init__1   s?    eS!! 	LLLOOE49dOKKE(-    Iterator[str]c              #  H   K   | j         s| j        | j        E d {V  d S d S d S N)is_allr$   r%   s    r&   __iter__zCliEnv.__iter__6   sG      { 	#t{6{"""""""""	# 	#66r(   boolc                *    t          | j                  S )zAA `CliEnv` is `True` if it's not the default set of environments.)r/   r$   r-   s    r&   __bool__zCliEnv.__bool__:   s    DK   r(   r"   c                P    | j         rdn| j        rdnd                    |           S )NALLz
<env_list>,)r,   is_default_listjoinr-   s    r&   __str__zCliEnv.__str__>   s/    cuu$:N*b,,TWT\T\]aTbTbcr(   c                l    | j         j         d| j        rdnt          t	          |                      dS )N( ))	__class____name__r5   reprr"   r-   s    r&   __repr__zCliEnv.__repr__A   s:    .)^^$2F,[BBDQTUYQZQZOO^^^^r(   otherobjectc                b    t          |           t          |          k    o| j        |j        k    S r+   )typer$   r%   r@   s     r&   __eq__zCliEnv.__eq__D   s'    DzzT%[[(HT[EL-HHr(   c                    | |k     S r+    rD   s     r&   __ne__zCliEnv.__ne__G   s    EM""r(   c                &    | j         d uod| j         v S )Nr3   r$   r-   s    r&   r,   zCliEnv.is_allJ   s    {$&?5DK+??r(   c                    | j         pg  S r+   rJ   r-   s    r&   r5   zCliEnv.is_default_listN   s    K%2&&r(   r+   )r   r   r   r   )r   r)   )r   r/   )r   r"   )r@   rA   r   r/   )r=   
__module____qualname____doc__r'   r.   r1   r7   r?   rE   rH   propertyr,   r5   rG   r(   r&   r   r      s         &. . . . .
# # # #! ! ! !d d d d_ _ _ _I I I I# # # # @ @ @ X@ ' ' ' X' ' 'r(   r   TFparserr   defaultCliEnv | Nonemultipler/   
group_onlyr   c           
        |r,|                      d          }|                    d          }n| }|s&|rd}nd}|                    dd||t                     |rGd	}|                    d
dd|g t          d           d}|                    ddd|g t          dd           d}|                    ddd|dt                     |S )z
    Register environment selection flags.

    :param parser: the parser to register to
    :param default: the default value for env selection
    :param multiple: allow selecting multiple environments
    :param group_only:
    :return:
    zselect target environment(s)F)requiredzJenumerate (ALL -> all environments, not set -> use <env_list> from config)zenvironment to runz-eenv)desthelprQ   rC   zlabels to evaluatez-mlabelslabel+)rX   metavarrY   rQ   rC   nargszifactors to evaluate (passing multiple factors means 'AND', passing this option multiple times means 'OR')z-ffactorsfactorappend)rX   r]   rY   rQ   rC   r^   actionzDexclude all environments selected that match this regular expressionz
--skip-envskip_envrer:   )rX   r]   rY   rQ   rC   )add_argument_groupadd_mutually_exclusive_groupadd_argumentr   r"   )rP   rQ   rS   rT   groupadd_tohelp_msgs          r&   register_env_select_flagsrk   S   s     ))*HII!&!C!CU!C!S!S [ 	,cHH+HDu8WSYZZZ 
'DxxY[bempqqqw 	 	 	 		
 		
 		
 VH
:t(\^ehiiiMr(   c                  6    e Zd ZU dZded<   ded<   dZded<   dS )	_ToxEnvInfoztox environment information.zPackageToxEnv | RunToxEnvrW   r/   	is_activeNztuple[str, Skip] | Nonepackage_skip)r=   rL   rM   rN   __annotations__ro   rG   r(   r&   rm   rm      s>         &&""""OOO,0L000000r(   rm   z,(pypy|py|cython|)((\d(\.\d+(\.\d+)?)?)|\d+)?zalpha|beta|rc\.\d+c                      e Zd Zd0dZed1d            Zd2d	Zd3d
Zd4dZed5d            Z	d3dZ
d6dZd7dZd8dZd9dZd3d Zd:d#Zd$d%d&d;d*Zd3d+Zd<d.Zd/S )=EnvSelectorstater   r   r   c                   d| _         t                      | _        || _        d | _        t                      | _        ddlm} || _	        | j        j
        j        | _        | j        j        | _        d | _        | j        j        j                            dt$          t&          t(          f         i d           t+          |j        j        dd                                          }|rt1          j        |          nd | _        d S )NTr   )MANAGERrZ   zcore labelsrc   r:   )on_empty_fallback_pyset_warned_about_state_defined_envs_r   _pkg_env_countertox.plugin.managerru   _manager_optionslog_handler_log_handler_journal
_provisionconfcore
add_configr	   r"   r   getattroptionsstriprd   compile
_filter_re)r%   rs   ru   tox_env_filter_regexs       r&   r'   zEnvSelector.__init__   s     %)!'*uu=A.5ii...... K0<,37((4W3Er=YYY&uz'9:rJJPPRR>R\"*%9:::X\r(   rR   c                B    t          | j        j        j        dd           S )NrW   )r   ry   r   r   r-   s    r&   	_cli_envszEnvSelector._cli_envs   s    t{'/===r(   $Iterator[tuple[Iterable[str], bool]]c              #    K   | j         | j         d         fdfV  | j        j        j        d         d}}| j        | j        j        r|dfV  n.| j        j        rd}n|                                  | j        dfV  | j        j        |fV  t          	                    t          j        | j        j        j        d                                                             }|r|                                dfV  dS dS )zX:return: sources of tox environments defined with name and if is marked as target to runN   Fenv_listTrZ   )r   ry   r   r   r   r5   r,   _ensure_envs_validdictfromkeysr   from_iterablevalueskeys)r%   r   everything_active
label_envss       r&   _collect_nameszEnvSelector._collect_names   s     ?&?1%'....&*k&6&;J&G#>!T^%C!D.    ^" 	' $##%%%.$&&&&k 11111]]5#6t{7G7LX7V7]7]7_7_#`#`aa
 	+//##U******	+ 	+r(   c                   t          t          j        d | j        j        D                                 }|                    d           i }| j        pg D ]O}|                    d          rt          	                    |
                    d                    }t                      }|D ]q}t                              |          st                              |          s||v r|                    |           Pt          ||d          }|r|d         nd ||<   rt          |          |z
  rut          d |                                D                       rd nDd                    t%          t&          t(                   |                                                    ||<   Q|rFd	}d
}	|                                D ]\  }}
|	s|dz  }d}	||z  }|
r	|d|
 dz  }t-          |          d S )Nc              3  @   K   | ]}|                     d           V  dS )-Nsplit).0rW   s     r&   	<genexpr>z1EnvSelector._ensure_envs_valid.<locals>.<genexpr>   s,      /[/[3		#/[/[/[/[/[/[r(   z.pkgz.pkg_externalr   r   )nr   c              3     K   | ]}|d u V  	d S r+   rG   )r   is     r&   r   z1EnvSelector._ensure_envs_valid.<locals>.<genexpr>   s&      ??19??????r(   z7provided environments not found in configuration file:
T
Fz - did you mean ?)rw   r   r   ry   r   addr   
startswithr   r   r   _DYNAMIC_ENV_FACTORS	fullmatch_PY_PRE_RELEASE_FACTORr   anyr   r6   r   r
   r"   itemsr   )r%   valid_factorsinvalid_envsrW   r_   found_factorsr`   closestmsgfirst
suggestions              r&   r   zEnvSelector._ensure_envs_valid   s%   E//[/[$+JZ/[/[/[[[\\&!!!.0>'R 	 	C~~o.. -1]]399S>>-J-JG&)eeM! 	F 	F(226::F-77??F ..!%%f----/KKKG4;&EgajjGFOO7||m+  ??gnn.>.>?????IDD$x}gnn6F6F"G"GHH S!
  
	$LCE#/#5#5#7#7 < <Z  4KCs
 <;j;;;;Cs###
	$ 
	$r(   dict[str, bool]c                4   i }|                                  D ]\  }}|D ]}||vr|||<   t          | j        j        j        dg           sMt          | j        j        j        dg           s-| j        r&t          |                                          sd|d<   |S )NrZ   r_   Tpy)r   r   ry   r   r   rv   r   r   )r%   env_name_to_active_mapa_collectionrn   names        r&   _env_name_to_activezEnvSelector._env_name_to_active   s    !#'+':':'<'< 	= 	=#L)$ = =5553<*40=
 )18R@@	0DKDKL\LdfoqsDtDt	0 )	0 .557788		0 ,0"4(%%r(   dict[str, _ToxEnvInfo]c                6     j         	i  _         i }                                                                 D ]\  }}| j        v r j                            |          5                       |          }|	 d d d            Ot          ||           j         |<   |                                }d d d            n# 1 swxY w Y   |X j        	                                }	  
                    ||          |_        	 |j        D ]s} j                             |j                  }|Pt          |j        t"                    r6 j         |j        = |j        j        D ]}	 j        |	j        xx         dz  cc<   tI# t$          $ r  j         |         j        J Y jw xY w# t$          $ rr}
|
||<    j        |z
  D ])} j         |=  j        j                            |           *| _         j         |=  j        j                            |           Y d }
~
d }
~
ww xY w|                                 j                                         z
  }|r"|t1          t3          |                              j                                        D ]!\  }}|s j                             |           "t7          fd j         D                       } fd|D              _                                                                              j         S )Nr   c              3  $   K   | ]
}|v|V  d S r+   rG   )r   r   env_name_to_actives     r&   r   z,EnvSelector._defined_envs.<locals>.<genexpr>)  s/      .m.mQQRZlQlQlqQlQlQlQl.m.mr(   c                >    i | ]}|j         v |j         |         S rG   )rz   )r   r   r%   s     r&   
<dictcomp>z-EnvSelector._defined_envs.<locals>.<dictcomp>*  s2    "t"t"ttX\`d`sXsXs4)<T)BXsXsXsr(   )rz   r   r   r{   r   with_context_build_run_envrm   get_package_env_typescopy_build_pkg_envpackage_envpackage_envsgetr   r!   rW   r   	Exceptionro   ry   r   	clear_envr   nextiterpopr   _finalize_config_mark_active)r%   failedr   rn   run_envpkg_name_typestart_package_env_use_counterrW   other_env_info_pkg_env	exceptionkeyfailed_to_createcountorderr   s   `              @r&   _defined_envszEnvSelector._defined_envs   s    &"$D+-F!%!9!9!;!;#5#;#;#=#= "V "Vi4000&33D99 D D"11$77G D D D D D D D 1<GY0O0OD'-$+$A$A$C$CMD D D D D D D D D D D D D D D !, 594I4N4N4P4P1V.2.A.A-QUWi.j.j+	V'.'; R R151D1H1H1R1R#1#=*^M_ajBkBk#=(,(;CH(E4B4F4S %R %R(,(=hm(L(L(LPQ(Q(L(L(L(LR  ) V V V#'#6t#<#I#U#U#U#U#UV% % 9 9 9'0t#'#8;X#X < <C $ 3C 8 K,66s;;;;0M- /5(224888888889 -4  &{{}}t/B/G/G/I/II ;T$'7"8"899::#4::<< 2 2e 2'++D111 ,.m.m.m.m$:M.m.m.mnnE"t"t"t"tu"t"t"tD!!###""sD   &C,CC	
C	+F*A;FF'&F'*
H&4A'H!!H&c                    | j         J | j                                         D ] }|j        j                                         !| j        j        j                                         d S r+   )rz   r   rW   r   mark_finalizedry   r   )r%   tox_envs     r&   r   zEnvSelector._finalize_config/  si    "...*1133 	. 	.GK++----,,.....r(   r   r"   RunToxEnv | Nonec                   | j         "| j         d         du r|| j         d         k    rd S | j          | j         d         r|| j         d         k    rd S | j        j                            |d          }d}|                    d|t
          | j        j        j        j                   t          j	        t          t
          |d                             }| j                            |          }t          || j        j        j        | j        j        j        || j                  } ||          }|                                 | j                            || j                   |S )Nr   Fr   packagez1the tox execute used to evaluate this environmentrunner)r   descr   rQ   )r   ry   r   get_envr   r"   r   default_runnerr   r   r   r   get_env_journalr   r   r   register_configr}   tox_add_env_config)r%   r   env_confr   r   journalargsr   s           r&   r   zEnvSelector._build_run_env5  sD   ?&4?1+=+F+F4SWSbcdSeKeKe4?&4?1+=&$$/Z[J\B\B\4;#++D%+@@Bc4;K[KcKrsssc8H+=!>!>??-//55$+*:*?AQAY[bdhduvv&,,!!!((4;???r(   	name_typetuple[str, str]run_env_nameactiver   c           	        |\  }}| j                             |          5  ||k    r| d}t          |          | j        d uo| j        j        }	 |                     |||                    ||                    }| j        |xx         dz  cc<   | j        |         j	        }	|
                    |	          }
	 t          |
          }	 |                     |||          }| j        |d         xx         dz  cc<   |
                    |          }H# t          $ r Y nw xY wn:# t          $ r-}| j        J |d         |f| j        |         _        Y d }~nd }~ww xY w|cd d d            S # 1 swxY w Y   d S )Nz cannot self-packager   Tr   )r   r   r   r   r,   _get_package_envr   r{   rz   rW   register_run_envr   r   sendStopIterationr   ro   )r%   r   r   r   r   	core_typer   missing_activepackage_tox_envr   child_package_envschild_pkg_envr   s                r&   r   zEnvSelector._build_pkg_envG  s%   #i++D11 	# 	#t##%;;;"3'''!^47QDN<QN["&"7"7	4TXZhIiIi"j"j%d+++q0+++%)%8%F%J%4%E%Eg%N%N" $%7 8 8IK(,(;(;I|U[(\(\-il;;;q@;;;$6$;$;M$J$J	K %   D [ [ [*666BKA,PYAZ#L1>>>>>>[ #+	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s[   0E*A'D"9AD
DD"DD"!E*"
E,#EE*EE**E.1E.packagerrn   r/   c                   | j         J || j         v r| j         |         j        }t          |t                    rF|                                |k    r,| d|                                 d| d}t          |          |S | j        j                            |           t          j
        |          }| j        j                            |d          }| j                            |          }t          || j        j        j        | j        j        j        || j                  }	 ||	          }
|
                                 t'          |
|          | j         |<   | j                            || j                   |
S )Nz is already defined as a z, cannot be z tooTr   )rz   rW   r!   r   idr   ry   r   r   r   r   r   r   r   r   r   r   r   r   rm   r}   r   )r%   r   r   rn   rW   r   package_typepkg_confr   r   pkg_envs              r&   r   zEnvSelector._get_package_env`  sj   "...4&&&%d+/C#}-- 6688x''!``CFFHH``RZ```C&s+++
K&&t,,,'11;#++D$+??-//55$+*:*?AQAY[bdhduvv!-d!3!3!!!$/$C$CD!((4;???r(   tuple[set[str], ...]c                t    t          | j        j        j        dg           }t	          d |D                       S )Nr_   c              3  .   K   | ]}d  |D             V  dS )c                B    h | ]}|                     d           D ]}|S )r   r   )r   r`   fs      r&   	<setcomp>z7EnvSelector._parse_factors.<locals>.<genexpr>.<setcomp>y  s1    MMMF6<<;L;LMMaaMMMMr(   NrG   )r   factor_lists     r&   r   z-EnvSelector._parse_factors.<locals>.<genexpr>y  s2      mmR]MMkMMMmmmmmmr(   )r   ry   r   r   tuple)r%   raw_factorss     r&   _parse_factorszEnvSelector._parse_factorst  s;     dk.6	2FFmmalmmmmmmr(   c           	         t          t          | j        j        j        dg                     }|                                 }| j        J |s|r*| j                                        D ]	}d|_        
|r| j	        | j	        d         s|D ]B}| j        j        j
        d                             |g           D ]}d| j        |         _        C| j                                        D ].}|                    |j        j        d                   rd|_        /|rd| j                                        D ]L\  }}|D ]@}|                    t          |                    d                              r	d|_         nAId S d S d S )NrZ   Fr   Tr   )rw   r   ry   r   r   r  rz   r   rn   r   r   r   intersectionrW   r   issubsetr   )r%   rZ   r_   env_infor[   env_namer   
factor_sets           r&   r   zEnvSelector._mark_active{  s   WT[-5xDDEE%%''"... 	"W 	" /6688 + +%*"" 24?2$/!:L2# G GE$(K$4$9($C$G$Gr$R$R G GBF+H5??G $ 3 : : < < 2 2H**8<+<X+FGG 2-1* "&*&9&?&?&A&A " "ND(&- " "
%..s4::c??/C/CDD "15H.!E"	" 	"" "" "r(   itemRunToxEnv | PackageToxEnvc                &    | j         |         j        S )z_
        :param item: the name of the environment
        :return: the tox environment
        )r   rW   )r%   r  s     r&   __getitem__zEnvSelector.__getitem__  s    
 !$'++r(   TF)only_activer   r  r   r)   c             #  t  K   | j                                         D ]\  }}|r|j        s|st          |j        t
                    s,| j        d| j                            |          rJ|| j        vr@| j        	                    |           t                              d|| j        j                   |V  dS )z
        Get tox environments.

        :param only_active: active environments are marked to be executed in the current target
        :param package: return package environments

        :return: an iteration of tox environments
        Nz&skip environment %s, matches filter %r)r   r   rn   r!   rW   r   r   matchrx   r   LOGGERwarningpattern)r%   r  r   r   r  s        r&   r   zEnvSelector.iter  s       #06688 
	 
	ND( 8#5  :hlI#F#F *t/D/DT/J/J*t111&**4000NN#KTSWSbSjkkkJJJJ
	 
	r(   c                    | j         |                                 c}fd|                                D             }|r'dd                    |           }t	          |          d S )Nc                ^    g | ])\  }}|t          |         j        t                    '|*S rG   )r!   rW   r   )r   r   aenvss      r&   
<listcomp>z=EnvSelector.ensure_only_run_env_is_active.<locals>.<listcomp>  s8    ```A1`DGKQ^9_9_`1```r(   z$cannot run packaging environment(s) r4   )r   r   r   r6   r   )r%   r   invalidr   r  s       @r&   ensure_only_run_env_is_activez)EnvSelector.ensure_only_run_env_is_active  sw    )4+C+C+E+Ef``````` 	$L'9J9JLLCs###	$ 	$r(   onprovision_tox_envc                    ||f| _         d S r+   )r   )r%   r#  r$  s      r&   _mark_provisionzEnvSelector._mark_provision  s    //r(   N)rs   r   r   r   )r   rR   )r   r   )r   r   )r   r   )r   r   )r   r"   r   r   )r   r   r   r"   r   r   r   r   )r   r"   r   r"   rn   r/   r   r   )r   r  )r  r"   r   r  )r  r/   r   r/   r   r)   )r#  r/   r$  r"   r   r   )r=   rL   rM   r'   rO   r   r   r   r   r   r   r   r   r   r  r   r  r   r"  r&  rG   r(   r&   rr   rr      s       ] ] ] ]( > > > X>+ + + +"#$ #$ #$ #$J& & & &  ># ># ># X>#@/ / / /   $# # # #2   (n n n n" " " "., , , , !	     4$ $ $ $0 0 0 0 0 0r(   rr   )r   rr   rk   )TF)
rP   r   rQ   rR   rS   r/   rT   r/   r   r   )2
__future__r   loggingrd   collectionsr   dataclassesr   difflibr   	itertoolsr   typingr   r	   r
   r   r   r   tox.config.loader.str_convertr   tox.config.typesr   
tox.reportr   tox.tox_env.apir   tox.tox_env.errorsr   tox.tox_env.packager   tox.tox_env.registerr   tox.tox_env.runnerr   argparser   tox.session.stater   	getLoggerr=   r  r   rk   rm   r   r   r   rr   __all__rG   r(   r&   <module>r:     s^   " " " " " "  				       ! ! ! ! ! ! % % % % % %       F F F F F F F F F F F F F F F F 4 4 4 4 4 4 $ $ $ $ $ $ # # # # # # , , , , , , # # # # # # - - - - - - ) ) ) ) ) ) ( ( ( ( ( ( ('''''''''''' 
	8	$	$3' 3' 3' 3' 3' 3' 3' 3'r 	, , , , ,^ 1 1 1 1 1 1 1 1 "rz"QRR #$9:: l0 l0 l0 l0 l0 l0 l0 l0^	  r(   