
    yIfV                        d Z 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
mZmZ ddlmZ ddlmZmZ e
rdd	l	mZ  G d
 dee                   ZdZdS )zHConvert string configuration values to tox python configuration objects.    )annotationsN)chainPath)TYPE_CHECKINGAnyIterator)Convert)CommandEnvList)Finalc                  ,   e Zd ZU dZedd            Zed d            Zed!d            Zed!d            Zed"d            Z	ed#d            Z
ed$d            Zed%d            Zh dZded<   h dZded<    eeez            Zed&d            ZdS )'
StrConvertz.A class converting string values to tox types.valuestrreturnc                D    t          |                                           S N)r   stripr   s    Q/var/www/piapp/venv/lib/python3.11/site-packages/tox/config/loader/str_convert.pyto_strzStrConvert.to_str   s    5zz!!!    r   c                     t          |           S r   r   r   s    r   to_pathzStrConvert.to_path   s    E{{r   of_type	type[Any]Iterator[str]c              #     K   t          |t                    sd| v rdnd}|                    dd          }|                     |          D ]}|                                } | r| V  d S )N
, )
issubclassr   replacesplitr   )r   r   splittertokens       r   to_listzStrConvert.to_list   s      %gw77Q45==44c##D"--[[** 	 	EKKMME 	 	r   c              #  L   K   t                               | |          E d {V  d S r   )r   r)   )r   r   s     r   to_setzStrConvert.to_set&   s4      %%eW55555555555r   tuple[type[Any], type[Any]]Iterator[tuple[str, str]]c              #    K   |                      d          D ]p}|                                rZ|                    d          \  }}} |r+|                                |                                 fV  \d|}t          |          qd S )Nr    =z2dictionary lines must be of form key=value, found )r&   r   	partition	TypeError)r   r   rowkeysepmsgs         r   to_dictzStrConvert.to_dict*   s      ;;t$$ 	) 	)Cyy{{ )"%--"4"4S% )))++u{{}}44444VsVVC#C..()	) 	)r   escapespecial_charsc                   g }t          |           D ]`\  }}|                    |           ||k    r@| |dz
  |         }||k    r4| |dz   |dz            }||h|vr|                    |           ad                    |          S )z
        Escape backslash in value that is not followed by a special character.

        This allows windows paths to be written without double backslash, while
        retaining the POSIX backslash escape semantics for quotes and escapes.
              r#   )	enumerateappendjoin)r   r7   r8   resultixchar	last_char	next_chars           r   _win32_process_path_backslashz(StrConvert._win32_process_path_backslash5   s     !%(( 	* 	*HBMM$v~~!"q&2+.	&&!"q&26/2	V$<m$<<<MM&)))wwvr   r   c                f   |                      dd          } t          j        dk    }|rDt          j        d          }t                              | |j        |j        |j        z             } t          j        | d          }d|_	        d|_
        g }d}	 |D ]v}|rDt          |          d	k    r1|d         |d
         k    r|                    d          r
|d	d
         }|                    |           |j                                        }wn-# t           $ r  |                    | |d                    Y nw xY wt          |          dk    rd| d}t!          |          |d         dk    r3|d                             d          r|d         d	d         |d<   dg|}t#          |          S )z
        At this point, ``value`` has already been substituted out, and all punctuation / escapes are final.

        Value will typically be stripped of whitespace when coming from an ini file.
        z\##win32T)posix)r7   r8   r#   r   r:   )'"Nzattempting to parse z into a command failed-)r%   sysplatformshlexr   rD   r7   quotes
whitespacewhitespace_split
commenterslen
startswithr=   instreamtell
ValueErrorr   )r   is_winsr'   argsposargr5   s           r   
to_commandzStrConvert.to_commandI   s    eS))( 	$'''A<<xh5 =  E
 ;uD111$(! 	% / / $c#hhlls1vR/@/@S^^T^E_E_/@ad)CC   ',,../  	% 	% 	%KKcdd$$$$$	%t99>>HHHHCS//!7c>>d1g0055>1gabbkDG<$<Dt}}s   A9D 'D:9D:r   c                    ddl m t          t          j        fd|                     d          D                                 }t          |          S )Nr   )extend_factorsc              3  .   K   | ]} |          V  d S r    ).0exprr`   s     r   	<genexpr>z)StrConvert.to_env_list.<locals>.<genexpr>s   s-      +_+_TNN4,@,@+_+_+_+_+_+_r   r    )tox.config.loader.ini.factorr`   listr   from_iterabler&   r   )r   elementsr`   s     @r   to_env_listzStrConvert.to_env_listo   s]    ??????++_+_+_+_U[[Y]M^M^+_+_+___``x   r   >   1onyestruezFinal[set[str]]TRUTHFUL_VALUES>   r#   0noofffalseFALSE_VALUESboolc                   t          |                                                                           }|t          j        v rdS |t          j        v rdS d| dd                    t          j                   }t          |          )NTFzvalue z' cannot be transformed to bool, valid: z, )	r   r   lowerr   ro   rt   r>   
VALID_BOOLr1   )r   normr5   s      r   to_boolzStrConvert.to_boolz   s|    5zz!!'')):---4:***5iuiityyQ[QfGgGgiinnr   N)r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   )r   r   r   r,   r   r-   )r   r   r7   r   r8   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   ru   )__name__
__module____qualname____doc__staticmethodr   r   r)   r+   r6   rD   r^   rj   ro   __annotations__rt   sortedrx   rz   rb   r   r   r   r      s~        88" " " \"    \    \ 6 6 6 \6 ) ) ) \)    \& # # # \#J ! ! ! \! (B'A'AOAAAA$C$C$CLCCCC,677J   \  r   r   )r   )r~   
__future__r   rO   rM   	itertoolsr   pathlibr   typingr   r   r	   tox.config.loader.convertr
   tox.config.typesr   r   r   r   r   __all__rb   r   r   <module>r      s    N N " " " " " "  



             / / / / / / / / / / - - - - - - - - - - - - - - q q q q q q q qh r   