
    yIf^4                       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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 er$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j"        e#          Z$dZ%dZ&dZ'e%e&e'ddgZ(dZ)eee*df                  Z+ G d de,          Z- G d de.          Z/d>dZ0d?d@d'Z1 G d( d          Z2dAd+Z3 G d, d-          Z4 e
d.          dBd2            Z5dCd4Z6dDd8Z7dEd:Z8dEd;Z9dFd<Z:d=Z;dS )Gz6Apply value substitution (replacement) on tox strings.    )annotationsN)SectionProxy)	lru_cache)TYPE_CHECKINGAnyIteratorPatternSequenceUnion)	stringify)	shell_cmd)Path)ConfigLoadArgs)	IniLoader)Config)SetEnv)	ConfigSet:{}[]d   MatchExpressionc                      e Zd ZdZdS )MatchRecursionErrorz)Could not stabilize on replacement value.N__name__
__module____qualname____doc__     Q/var/www/piapp/venv/lib/python3.11/site-packages/tox/config/loader/ini/replace.pyr   r   (   s        3333r#   r   c                      e Zd ZdZdS )
MatchErrorz1Could not find end terminator in MatchExpression.Nr   r"   r#   r$   r&   r&   ,   s        ;;;;r#   r&   valuestrreturnMatchArgc                N    t                               |           d         d         S )z)Find all replaceable tokens within value.r   )r   parse_and_split_to_terminator)r'   s    r$   find_replace_exprr-   0   s     88??B1EEr#   confr   loaderr   argsr   depthintc                    |t           k    rd| d| d}t          |          t          | |||                              t	          |                    S )z?Replace all active tokens within value according to the config.zCould not expand z after recursing z frames)	conf_argsr1   )MAX_REPLACE_DEPTHr   Replacerjoinr-   )r.   r/   r'   r0   r1   msgs         r$   replacer9   5   sc       H%HH%HHH!#&&&D&D>>>CCDUV[D\D\]]]r#   c                  b    e Zd ZdZddd	ZddZddZedd            Ze	 	 ddd            Z	dS ) r   z8An expression that is handled specially by the Replacer.NexprSequence[MatchArg]term_pos
int | Noner)   Nonec                "    || _         || _        d S Nr;   r=   )selfr;   r=   s      r$   __init__zMatchExpression.__init__@   s    	 r#   r(   c                (    d| j         d| j        dS )NzMatchExpression(expr=z, term_pos=)rB   )rC   s    r$   __repr__zMatchExpression.__repr__D   s    QtyQQt}QQQQr#   otherobjectboolc                j    t          |t          |                     r| j        |j        k    S t          S rA   )
isinstancetyper;   NotImplemented)rC   rH   s     r$   __eq__zMatchExpression.__eq__G   s/    eT$ZZ(( 	+9
**r#   r'   MatchExpression | Nonec                ,   |                     d          rt          dggd          S |                     t                    sdS 	 |                     |dd         t          t
                    \  }}t          ||          S # t          $ r Y nw xY wdS )z-Process a curly brace replacement expression.z[]posargs   rB   N)
terminatorsplit)
startswithr   REPLACE_STARTr,   REPLACE_ENDARG_DELIMITERr&   )clsr'   rec_exprr=   s       r$   _next_replace_expressionz(MatchExpression._next_replace_expressionL   s     D!! 	C")BBBB.. 	4	E!$!B!Babb	&# "C " "Hh #8DDDD	  	 	 	D	
 ts   -B 
BB rT   rU   
str | Nonetuple[Sequence[MatchArg], int]c                   g }g }d}|t          |          k     rtt          |          |dz   k    rw||         dk    rk||dz            t          v r$|                    ||dz                       |dz  }l||dz            dk    r&|                    |||dz                       |dz  }||d         }|r(|                    |          r|t          |          z  }n|r@|                    |          r+|                    |           g }|t          |          z  }|                     |          }|&||j        pddz   z  }|                    |           T|                    ||                    |dz  }|t          |          k     t|r|d|}	t          |	          |                    |           d |D             |fS )aG  
        Tokenize `value` to up `terminator` character.

        If `split` is given, multiple arguments will be returned.

        Returns list of arguments (list of str or MatchExpression) and final character position examined in value.

        This function recursively calls itself via `_next_replace_expression`.
        r   rS   \   Nz remains unmatched in c                ,    g | ]}t          |          S r"   )_flatten_string_fragments).0as     r$   
<listcomp>zAMatchExpression.parse_and_split_to_terminator.<locals>.<listcomp>   s!    ;;;)!,,;;;r#   )lenBACKSLASH_ESCAPE_CHARSappendrV   r\   r=   r&   )
rZ   r'   rT   rU   r0   last_argposfragmentr;   r8   s
             r$   r,   z-MatchExpression.parse_and_split_to_terminatorb   s     02CJJ5zzC!G##c
d(:(:q>%;;;OOE#'N3331HCq>T)) OOE#a-$89991HCSTT{H h11*== s:& ,,U33 H%%%s5zz!//99D*a//%%%OOE#J'''1HC= CJJ@  &#FFUFF oo%H;;d;;;S@@r#   rA   )r;   r<   r=   r>   r)   r?   )r)   r(   )rH   rI   r)   rJ   )r'   r(   r)   rP   )r]   N)r'   r(   rT   r(   rU   r^   r)   r_   )
r   r   r    r!   rD   rG   rO   classmethodr\   r,   r"   r#   r$   r   r   =   s        BB! ! ! ! !R R R R   
    [*   	7A 7A 7A 7A [7A 7A 7Ar#   seq_of_str_or_otherSequence[str | Any]c                D   g }g }| D ]n}t          |t                    r|                    |           -|r*|                    d                    |                     g }|                    |           o|r(|                    d                    |                     |S )zcJoin runs of contiguous str values in a sequence; nny non-str items in the sequence are left as-is.r]   )rL   r(   rj   r7   )ro   resultlast_strobjs       r$   rd   rd      s    FH"  c3 	OOC     bggh//000MM# )bggh''(((Mr#   c                  4    e Zd ZdZdddZddZddZddZdS )r6   zARecursively expand MatchExpression against the config and loader.r   r.   r   r/   r   r4   r   r1   r2   r)   r?   c                >    || _         || _        || _        || _        d S rA   )r.   r/   r4   r1   )rC   r.   r/   r4   r1   s        r$   rD   zReplacer.__init__   s"    	"


r#   r'   r*   Sequence[str]c                       fd|D             S )Nc                    g | ];}t          |t                    r                    |          nt          |          <S r"   )rL   r   _replace_matchr(   )re   merC   s     r$   rg   z%Replacer.__call__.<locals>.<listcomp>   sF    hhh\^:b/+J+JW##B'''PSTVPWPWhhhr#   r"   rC   r'   s   ` r$   __call__zReplacer.__call__   s    hhhhbghhhhr#   r(   c                >    d                      | |                    S )Nr]   r7   r|   s     r$   r7   zReplacer.join   s    wwttE{{###r#   r   c                >     j                                         } fd|j        D             }|^}}|dk    rt          j        }n|s|dgk    rt          j        }n|dk    rt           j        ||          }ni|dk    rt          |          }nS|dk    rt           j        ||          }n6t                              |          }t           j         j        ||          }|t          d t          |          D                       }|rf	 t!           j         j        || j        dz             S # t$          $ r3}	t&                              t+          |	                     |cY d }	~	S d }	~	ww xY w|S t,           d	t.           t                              |          z  S )
Nc                :    g | ]}                     |          S r"   r   )re   argrC   s     r$   rg   z+Replacer._replace_match.<locals>.<listcomp>   s#    ???S$))C..???r#   /r]   envttyrR   c              3  @   K   | ]}t          |t                    V  d S rA   )rL   r   )re   ms     r$   	<genexpr>z*Replacer._replace_match.<locals>.<genexpr>   s,      !k!kQ*Q"@"@!k!k!k!k!k!kr#   rS   z%s)r4   copyr;   osseppathsepreplace_envr.   replace_ttyreplace_pos_argsrY   r7   replace_referencer/   anyr-   r9   r1   r   LOGGERwarningr(   rW   rX   )
rC   r'   r4   flattened_argsof_typer0   replace_value	arg_valueneeds_expansionerrs
   `         r$   rz   zReplacer._replace_match   s   N''))	????EJ???'$c>>(*MM 
	\TbT\\JMM'	4CCMM'--MM	!!,TYiHHMM%**>::I-diiQZ[[M$!!k!kJ[\iJjJj!k!k!kkkO ))"49dk=)UYU_bcUcddd* ) ) )NN3s88,,,((((((() ! 
  00;00=3E3En3U3UUUs   $D1 1
E.;(E)#E.)E.Nr   )
r.   r   r/   r   r4   r   r1   r2   r)   r?   )r'   r*   r)   rw   )r'   r*   r)   r(   )r'   r   r)   r(   )r   r   r    r!   rD   r}   r7   rz   r"   r#   r$   r6   r6      sy        KK    i i i i$ $ $ $V V V V V Vr#   r6   )maxsizer   r^   Pattern[str]c                p    t          j        dt          j        | pd           dt           j                  S )Nz
    (\[(?P<full_env>z.*z(:(?P<env>[^]]+))?|(?P<section>[-\w]+))])? # env/section
    (?P<key>[-a-zA-Z0-9_]+) # key
    (:(?P<default>.*))? # default value
    $
)recompileescapeVERBOSE)r   s    r$   _replace_refr      sB    :	Ys{d++	 	 	 	
  r#   r4   c                   t          |j        j        p|j        j                  }|                    |          }|r8|                                }|d         }|d         |d         r|d         |d<   d }	 t          |d         |d         |j        | |          D ]}		 t          |	t                    r$|
                    | |j        |	|                   c S |	                    ||j                  }t          |          \  }
}|
                    dd          c S # t          $ r}|}Y d }~d }~ww xY wn# t           $ r}|}Y d }~nd }~ww xY w|$t          |t                    r|d         }||S n|d S )Nkeysectionfull_envr   #z\#default)r   r   prefixnamematch	groupdict_config_value_sourcesenv_namerL   r   process_rawloadchainr   r9   KeyError	Exception)r.   r/   r'   r4   patternr   settingsr   	exceptionsrcas_str_excr   s                 r$   r   r      s    6>0GFN4GHHGMM%  E  ??$$uoI&8J+?&"*:"6HY&*		,Xe_hy>QS\Segkmstt 	6 	66!#|44 V%11$	8JCPSHUUUUUHHS)/::E !*% 0 0IFA!>>#u55555	   $ $ $ #IIIIII$	6  	 	 	IIIIII	 )X..  "9-&"N '  4sN   8&D7 6DD7 D3)D7 
D3'D.)D7 .D33D7 7
EEEr   current_env"Iterator[SectionProxy | ConfigSet]c              #     K   | | |v r|                     |           V  |$|j        V  ||                     |          V  d S ||j        j        k    r	|j        V  |                    |          }||V  d S d S rA   )get_envcorecore_sectionr   get_section)r   r   r   r.   r/   r'   s         r$   r   r     s       3$;;ll3 i",,{+++++ &%***iw''E r#   	list[str]c                   d }|j         <|                     |j                   }	 |d         r|d         }n# t          $ r Y nw xY w|                     |          }|t                              |          nt          |          S )Nargs_are_paths
change_dir)r   r   r   pos_argsrY   r7   r   )r.   r0   r4   to_pathenv_confr   s         r$   r   r   1  s    G%<<	 233	() 1"<0 	 	 	D	}}W%%H'/'7=d###Yx=P=PPs   6 
AAc                   |r|d         sd}t          |          |d         }d| }|j        ||j        vrW|j                            |           |                     |j                  }|d         }||v r|                    ||          S ni|j        d         |k    rXd                    d |j        |j                            |          d          D                       }d| }t          |          |t          j
        v rt          j
        |         S t          |          d	k    rd
n!t                              |d	d                    S )Nr   z3No variable name was supplied in {env} substitutionzenv:set_envz, c              3  *   K   | ]}|d d         V  dS )   Nr"   )re   is     r$   r   zreplace_env.<locals>.<genexpr>N  s*       b b1122 b b b b b br#   zcircular chain between set env rS   r]   )r&   r   r   rj   r   r   r7   indexr   r   environrh   rY   )	r.   r0   r4   r8   r   new_keyr   r   circulars	            r$   r   r   ?  sX    tAw Coo
q'CSllG%)/))O""7+++||I$677H&y1Gg~~||C333 _R G++yy b b		@U@UV]@^@^@`@`0a b b bbbH>H>>C%c***
bjz#Ta22]%7%7QRR%A%AAr#   c                    t           j                                        rt          |           dk    r| d         ndnt          |           dk    r| d         ndS )Nr   r]   rS   )sysstdoutisattyrh   )r0   s    r$   r   r   X  sS    141B1B1D1Djs4yy1}}DGG""UXY]U^U^abUbUb$q''hjjr#   )r*   r&   r   r-   r9   )r'   r(   r)   r*   r   )r.   r   r/   r   r'   r(   r0   r   r1   r2   r)   r(   )ro   rp   r)   rp   )r   r^   r)   r   )
r.   r   r/   r   r'   r(   r4   r   r)   r^   )r   r^   r   r^   r   r^   r.   r   r/   r   r)   r   )r.   r   r0   r   r4   r   r)   r(   )r0   r   r)   r(   )<r!   
__future__r   loggingr   r   r   configparserr   	functoolsr   typingr   r   r   r	   r
   r   tox.config.loader.stringifyr   tox.execute.requestr   pathlibr   tox.config.loader.apir   tox.config.loader.inir   tox.config.mainr   tox.config.set_envr   tox.config.setsr   	getLoggerr   r   rY   rW   rX   ri   r5   r(   r*   
ValueErrorr   r   r&   r-   r9   r   rd   r6   r   r   r   r   r   r   __all__r"   r#   r$   <module>r      s2   < < " " " " " "  				 				 



 % % % % % %       I I I I I I I I I I I I I I I I 1 1 1 1 1 1 ) ) ) ) ) ) *444444//////&&&&&&)))))))))))) 
	8	$	$ 'S#N   E#00124 4 4 4 4* 4 4 4< < < < < < < <F F F F
^ ^ ^ ^ ^]A ]A ]A ]A ]A ]A ]A ]A@   ".V .V .V .V .V .V .V .Vb 4	 	 	 	& & & &R   8Q Q Q QB B B B2k k k kr#   