
    yIfA@                       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 ddlmZ ddlmZmZmZmZmZmZ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& erddl'm(Z(  G d de          Z) G d de
          Z* edd          Z+dZ, G d de          Z-eee.df         eee                  ee.ef         f         Z/ G d de)          Z0d#dZ1d#dZ2d#d Z3d#d!Z4d"Z5dS )$zBCustomize argparse logic for tox (also contains the base options).    )annotationsN)SUPPRESSActionArgumentDefaultsHelpFormatterArgumentErrorArgumentParser	Namespace)Path)TYPE_CHECKINGAnyCallableDictListLiteralOptionalSequenceTupleTypeTypeVarcast)
StrConvert)NAME)is_ci   )get_env_var)	IniConfig)Statec                  Z     e Zd ZdZd fdZddZddZedd            Z	 	 dddZ	 xZ
S )ArgumentParserWithEnvAndConfigzkArgument parser which updates its defaults by checking the configuration files and environmental variables.argsr   kwargsreturnNonec                    d|v r|                     d          nt                      | _        | j        j        |d<    t	                      j        |i | d S )Nfile_configepilog)popr   r%   r&   super__init__)selfr    r!   	__class__s      I/var/www/piapp/venv/lib/python3.11/site-packages/tox/config/cli/parser.pyr)   z'ArgumentParserWithEnvAndConfig.__init__   s_    8E8O8O6::m444U^U`U`+2x$)&)))))    c                D    | j         D ]}|                     |           d S N)_actionsfix_default)r*   actions     r,   fix_defaultsz+ArgumentParserWithEnvAndConfig.fix_defaults"   s4    m 	% 	%FV$$$$	% 	%r-   r2   r   c                   t          |d          rt          |d          ru|j        t          k    re|                     |          }|j        }t          ||          }|#| j        r| j                            ||          }||\  |_        }||_        t          |t          j                  rV|j                                        D ]>}t          |t                    sd}t          |          |                                 =d S d S )Ndefaultdestof_typez;detected sub-parser added without using our own add command)hasattrr5   r   get_typer6   r   r%   getdefault_source
isinstanceargparse_SubParsersActionchoicesvalues	ToxParserRuntimeErrorr3   )r*   r2   r8   keyoutcomedefault_valuerA   msgs           r,   r1   z*ArgumentParserWithEnvAndConfig.fix_default&   s   69%% 	6'&&*A*A 	6fnX`F`F`mmF++G+C!#w777G4#3*..sG.DD"07-(5%fh899 	& .//11 & &!&)44 ,WC&s+++##%%%%	& 	&& &r-   	type[Any]c                H   t          | dd           }|t          | t          j                  rt          | j                 }nt          | t          j                  re| j        r^t                      }t          |d<   dd
                    d | j        D                        d}t          |t                      |          }na| j        t          | j                  }nEt          | t          j                  r| j        t          | j                  }nt!          |           |S )Nr8   r   zLiteral[z, c              3  4   K   | ]}t          |          V  d S r/   )repr).0is     r,   	<genexpr>z:ArgumentParserWithEnvAndConfig.get_type.<locals>.<genexpr>@   s(      1R1Ra$q''1R1R1R1R1R1Rr-   ])getattrr=   r>   _AppendActionr   type_StoreActionr@   localsr   joinevalglobalsr5   _StoreConstActionconst	TypeError)r2   r8   loc
as_literals       r,   r:   z'ArgumentParserWithEnvAndConfig.get_type7   s   $+FIt$D$D?&("899 (v{+FH$9:: 
(v~ 
(hh!(IU		1R1R6>1R1R1R(R(RUUU
z799c::+v~..FH$>?? (FLD\v|,,'''r-   NSequence[str] | None	namespaceNamespace | Noner	   c                    |                      ||          \  }}|r,|                     dd                    |           d           |S )Nzunrecognized arguments:  zX
hint: if you tried to pass arguments to a command use -- to separate them from tox ones)parse_known_argserrorrU   )r*   r    r^   resargvs        r,   
parse_argsz)ArgumentParserWithEnvAndConfig.parse_argsJ   sf    
 ))$	::	T 	JJj388D>> j j j   
r-   )r    r   r!   r   r"   r#   r"   r#   )r2   r   r"   r#   )r2   r   r"   rH   NN)r    r]   r^   r_   r"   r	   )__name__
__module____qualname____doc__r)   r3   r1   staticmethodr:   rf   __classcell__r+   s   @r,   r   r      s        uu* * * * * *% % % %& & & &"    \( &*&*        r-   r   c                  8     e Zd ZdZd fdZd fd
ZddZ xZS )HelpFormatterzNA help formatter that provides the default value and the source it comes from.progstrr"   r#   c                P    t                                          |dd           d S )N      )max_help_positionwidth)r(   r)   )r*   rr   r+   s     r,   r)   zHelpFormatter.__init__[   s(    3?????r-   r2   r   
str | Nonec                    t                                          |          pd}t          |d          r2d}|                    |          r|d t	          |                     d}|S )N r<   z (default: %(default)s)z2 (default: %(default)s -> from %(default_source)s))r(   _get_help_stringr9   endswithlen)r*   r2   textr5   r+   s       r,   r|   zHelpFormatter._get_help_string^   sq    GG,,V44:6+,, 	d/G}}W%% d#g,,/cccr-   r   c                Z    dd}|t           ur||                     ||g           d S d S d S )Ncontentrs   r"   c                    | S r/    )r   s    r,   keepz(HelpFormatter.add_raw_text.<locals>.keepg   s    Nr-   )r   rs   r"   rs   )r   	_add_item)r*   r   r   s      r,   add_raw_textzHelpFormatter.add_raw_textf   sR    	 	 	 	 xD$4NN4$(((((  $4$4r-   )rr   rs   r"   r#   )r2   r   r"   ry   )r   ry   r"   r#   )ri   rj   rk   rl   r)   r|   r   rn   ro   s   @r,   rq   rq   X   s{        XX@ @ @ @ @ @     ) ) ) ) ) ) ) )r-   rq   
ToxParserTrB   )bound   c                  N    e Zd ZU dZed	d            Zed
d            Zded<   dS )ParsedzCLI options.r"   intc                @    t          | j        | j        z
  d          }|S )z:return: reporting verbosityr   )maxverbosequiet)r*   results     r,   	verbosityzParsed.verbosityu   s!     $,3Q77r-   boolc                >    t          t          | j        dk              S )z8:return: flag indicating if the output is colored or notyes)r   r   coloredr*   s    r,   
is_coloredzParsed.is_colored{   s     D$,%/000r-   exit_and_dump_afterN)r"   r   )r"   r   )ri   rj   rk   rl   propertyr   r   __annotations__r   r-   r,   r   r   r   sd            X
 1 1 1 X1 r-   r   .c                       e Zd ZdZdddd* fdZd+dZd,dZd- fdZddd. fdZe	d/d"            Z
e	d/d#            Zd0d$Z	 	 d1d2 fd)Z xZS )3rB   zArgument parser for tox.F)rootadd_cmdr    r   r   r   r   r!   r"   r#   c               *   d | _         i | _        g | _        g | _         t	                      j        |i | |du r|                                  |du r9d}|                     d|d          | _        d| j        _	        d| j        _
        d S d | _        d S )NTz*tox command to execute (by default legacy)subcommandscommand)titledescriptionr6   Flegacy)of_cmdhandlers
_arguments_groupsr(   r)   _add_base_optionsadd_subparsers_cmdrequiredr5   )r*   r   r   r    r!   rG   r+   s         r,   r)   zToxParser.__init__   s    "&GI.0jl$)&)))4<<""$$$d??>C$($7$7mY\cl$7$m$mDI!&DI (DIDIIIr-   cmdrs   aliasesSequence[str]help_msghandlerCallable[[State], int]r   c                   | j         d}t          |          | j                             |||t          | j                  }||_        ||f}|| j        |<   |D ]}|| j        |<   | j        D ]\  }	}
} |j        |	d|
i| | j	        D ]>\  }	}} |j
        |	i |}|D ](\  }} |j        di |}|D ]\  }}} |j        |i | )?|                     |           |S )Nzno sub-command group allowed)helpr   formatter_classr%   r8   r   )r   rC   
add_parserrq   r%   r   r   r   add_argumentr   add_argument_groupadd_mutually_exclusive_group_add_provision_arguments)r*   r   r   r   r   rG   
sub_parserr   aliasr    r8   r!   exclgroupe_kwargs	arguments
excl_groupa_args_a_kwargss                       r,   add_commandzToxParser.add_command   s    90Cs### $	 4 4)( !5 !
 !

  
g%$c 	+ 	+E#*DM%  %)_ 	F 	F!D'6#J#TE7EfEEEE"&, 	A 	AD&$1J14B6BBE'+ A A#)?U?KK(KK
+4 A A'FAx+J+V@x@@@@AA 	%%j111r-   r   c           	        |                     dddt          d d            G d dt                    }t          j                            dd	          d	k    r t          t          j        d                   }n't          j        d
t          j
        dk    rdnd          }|                     ddd|t          t                   |d           |                     ddddt          t                   dg            |                                }|                     ddt                      d           |                     dddd            d S )!Nz--result-jsonresult_jsonpathzSwrite a JSON file with detailed information about all commands and results involved)r6   metavarr8   r5   r   c                      e Zd Z	 dddZdS )6ToxParser._add_provision_arguments.<locals>.SeedActionNparserr   r^   r	   rA   str | Sequence[Any] | Noneoption_stringry   r"   r#   c                   |dk    rd }nk	 t          t          t          |                    }|dk    rd}t          |          n0# t          $ r#}t	          | t          |                    |d }~ww xY wt          || j        |           d S )Nnotsetr   zmust be greater than zero)r   r   rs   
ValueErrorr   setattrr6   )r*   r   r^   rA   r   r   rG   excs           r,   __call__z?ToxParser._add_provision_arguments.<locals>.SeedAction.__call__   s     X%%!FFE!$T#v%6%6!7!7!Q;;"=C",S//1 ' & E E E+D#c((;;DE	49f55555s   9A 
A2A--A2r/   )
r   r   r^   r	   rA   r   r   ry   r"   r#   )ri   rj   rk   r   r   r-   r,   
SeedActionr      s2         -16 6 6 6 6 6 6r-   r   PYTHONHASHSEEDrandomr   win32i   l    z
--hashseedSEEDzset PYTHONHASHSEED to SEED before running commands. Defaults to a random integer in the range [1, 4294967295] ([1, 1024] on Windows). Passing 'notset' suppresses this behavior.	hash_seed)r   r   r2   r8   r5   r6   z
--discoverdiscover+z7for Python discovery first try these Python executables)r6   nargsr   r8   r   r5   z--list-dependencies
store_truez8list the dependencies installed during environment setup)r2   r5   r   z--no-list-dependenciesstore_falselist_dependenciesz>never list the dependencies installed during environment setup)r2   r6   r   )r   r
   r   osenvironr;   r   r   randintsysplatformr   r   rs   r   r   )r*   r   r   hashseed_default	list_depss        r,   r   z"ToxParser._add_provision_arguments   s   f 	  	
 	
 	
	6 	6 	6 	6 	6 	6 	6 	6( :>>*H55AA"2:.>#?@@%~a9P9PV`aaaSM$ 	  		
 		
 		
 	IJ 	  	
 	
 	
 ;;==	!GGK	 	 	
 	
 	
 	$ $Q	 	 	
 	
 	
 	
 	
r-   c                     t                      j        |i }| j        9|dvr5dfd}|j        ||_        g | j                            |f           |S )N>   zoptional argumentszpositional argumentsr   r   r"   c                 ~    d ddfd
}g                      | f            di }|j        ||_        |S )Nr7   r   rs   r8   type[Any] | Noner   r   r"   r   c                H     |i |}                     || |f           |S r/   )append)r8   r   r   res_argsr   prev_add_args       r,   r   zXToxParser.add_argument_group.<locals>.add_mutually_exclusive_group.<locals>.add_argument  s7    '3|V'Hx'H'HH$$fgx%@AAA#Or-   )r   rs   r8   r   r   r   r"   r   r   )r   r   )r   r   res_exclr   r   r   r!   	prev_excls      @@r,   r   zBToxParser.add_argument_group.<locals>.add_mutually_exclusive_group  s}    KO $ $ $ $ $ $ $ $ $
 13	Xy1222$9..v..'4(4%r-   )r   r   r"   r   )r(   r   r   r   r   r   )r*   r    r!   r   r   r   r   r+   s     `  @@r,   r   zToxParser.add_argument_group   s    ++T<V<<;4/c#c#c                ;I2NF/DFDLvt 4555r-   Nr7   r8   r   r   c                   t                      j        |i |}| j        |j        dk    r| j                            |||f           t          | d          rh| j        at          | j        d          rLd | j        j        	                                D             
                                D ]} |j        |d|i| |||_        |S )Nr   r   r@   c                4    i | ]\  }}t          |          |S r   )id)rL   kvs      r,   
<dictcomp>z*ToxParser.add_argument.<locals>.<dictcomp>  s$    NNNDAqr!uuaNNNr-   r8   )r(   r   r   r6   r   r   r9   r   r@   itemsrA   r8   )r*   r8   r    r!   r   r   r+   s         r,   r   zToxParser.add_argument  s    %%t6v66;6;&#8#8O""D'6#:;;;tV$$ J)>749V_C`C`)>NNDI4E4K4K4M4MNNNUUWW J JF'F'IwI&IIII$FNr-   clstype[ToxParserT]r   c                     | dd          S )NFT)add_helpr   r   r   s    r,   basezToxParser.base  s    sE----r-   c                6     | t           t          ddd          S )NTz8create and set up environments to run command(s) in them)rr   r   r   r   r   )r   rq   r   s    r,   corezToxParser.core#  s*    s)R
 
 
 	
r-   c                L    t          |            |                                  dS )z(Argument options that always make sense.N)add_core_argumentsr3   r   s    r,   r   zToxParser._add_base_options-  s(    4   r-   r]   r^   Parsed | Nonetuple[Parsed, list[str]]c                   |t           j        dd          }d }| j        +|r)t          |          D ]\  }}|| j        j        v r|} nd }|"||         g|d |         ||dz   d          R }n,t          |          dvr| j        d| j        j        v rdg|R }|t                      n|}t                                          ||          \  }}||fS )Nr   >   z-hz--helpr   )r^   )	r   re   r   	enumerater@   tupler   r(   rb   )	r*   r    r^   cmd_atatargr   r   r+   s	           r,   rb   zToxParser.parse_known_args2  s   
 <8ABB<D!9 T $T??  C$)+++FE , <D$ww-D$vz||2DDDDD4[[ 666DI<QV^bfbkbsVsVs?d??D&.I''**46*BB4t|r-   )
r    r   r   r   r   r   r!   r   r"   r#   )
r   rs   r   r   r   rs   r   r   r"   r   )r   rB   r"   r#   )r    r   r!   r   r"   r   )r    rs   r8   r   r!   r   r"   r   )r   r   r"   r   rg   rh   )r    r]   r^   r  r"   r  )ri   rj   rk   rl   r)   r   r   r   r   classmethodr   r  r   rb   rn   ro   s   @r,   rB   rB      sL       ""05u            BA
 A
 A
 A
F     . DH 	 	 	 	 	 	 	 	 . . . [. 
 
 
 [
    &*#'          r-   r   r   r"   r#   c                   ddl m} d                    d t          |                                          D                       }|                     d          }dt          j        |t                              d| |_	        |
                                }|                    dd	d
ddt                     |                    ddd
ddd           d S )Nr   )LEVELS|c              3  N   K   | ] \  }}| d t          j        |           V  !dS )=N)logginggetLevelName)rL   clevels      r,   rN   z&add_verbosity_flags.<locals>.<genexpr>N  s?      ee(!UA== 4U ; ;==eeeeeer-   r   z@every -v increases, every -q decreases verbosity level, default z, map z-vz	--verbosecountr   zincrease verbosity)r2   r6   r   r5   z-qz--quietr   zdecrease verbosity)
tox.reportr  rU   sortedr   r   r  r  DEFAULT_VERBOSITYr   r   r   )r   r  	level_mapverbosity_groupr   s        r,   add_verbosity_flagsr  K  s   !!!!!!eefU[UaUaUcUcNdNdeeeeeI//<<O	V'/@(ABB	V 	VJS	V 	V   <<>>I!!     47Ocmnooooor-   c                   t                      }t          j                            dd          rd}n|                    t          j                            dd                    rd}nIt          j                            dd          dk    rd}n"t
          j                                        rdnd}|                     d|ddgd	
           d S )NNO_COLORr{   noFORCE_COLORr   TERMdumbz	--coloredz^should output be enriched with colors, default is yes unless TERM=dumb or NO_COLOR is defined.)r5   r@   r   )	r   r   r   r;   to_boolr   stdoutisattyr   )r   	convertercolors      r,   add_color_flagsr*  `  s    I	z~~j"%% 7			2:>>-<<	=	= 7		#	#v	-	-**,,6$
m	      r-   c                F    |                      ddddt          d           d S )Nz--exit-and-dump-afterr   secondsr   zddump tox threads after n seconds and exit the app - useful to debug when tox hangs, 0 means disabled)r6   r   r5   rR   r   )r   r   r   s    r,   add_exit_and_dump_afterr.  s  s;    
"s      r-   c           
        t          |            t          |            t          |            |                     ddddd t          t
          t                   d           |                     ddd	d t          t
          t                   d
           |                     ddd	d t          t
          t                   d           d S )Nz-cz--confconfig_filefilezFconfiguration file/folder for tox (if not specified will discover one))r6   r   r5   rR   r8   r   z	--workdirwork_dirdirzNtox working directory (if not specified will be the folder of the config file)z--rootroot_dirzOproject root directory (if not specified will be the folder of the config file))r*  r  r.  r   r
   r   r-  s    r,   r  r  ~  s    FF###
U  	 	 	 ]     ^      r-   )r  rq   r   rB   )r   r   r"   r#   )6rl   
__future__r   r>   r  r   r   r   r   r   r   r   r   r	   pathlibr
   typingr   r   r   r   r   r   r   r   r   r   r   r   tox.config.loader.str_convertr   
tox.pluginr   tox.util.cir   env_varr   inir   tox.session.stater   r   rq   r   r  r   rs   ArgumentArgsrB   r  r*  r.  r  __all__r   r-   r,   <module>r@     s   H H " " " " " "   				  



 n n n n n n n n n n n n n n n n       t t t t t t t t t t t t t t t t t t t t t t t t t t t t 4 4 4 4 4 4                               (''''''< < < < <^ < < <~) ) ) ) )1 ) ) ), W\555
     Y   " U38_htCy&94S>IJB B B B B. B B BJp p p p*   &      Dr-   