
    yIf                        d dl mZ d dlZd dlmZ ddlmZmZmZ erd dl	m
Z
mZ d dlmZ d dlmZ  G d	 d
e          Zh dZh dZdZdS )    )annotationsN)TYPE_CHECKING   )ParsedRequirementReqFileLinesRequirementsFile)ArgumentParser	Namespace)Path)Finalc                       e Zd ZU dgZded<   d+ fd
Zd,dZd- fdZd. fdZe	d/d            Z
d0 fdZd1dZd2 fdZd3dZed4d            Zed5d!            Zd6 fd$Zd7d&Zd8d(Zed9d*            Z xZS ):
PythonDepshashzFinal[list[str]]_illegal_optionsrawstrrootr   returnNonec                    t                                          |dz  d           |                     |          | _        d | _        d | _        d S )Nztox.iniF)
constraint)super__init___normalize_raw_raw_unroll_req_parser_)selfr   r   	__class__s      S/var/www/piapp/venv/lib/python3.11/site-packages/tox/tox_env/python/pip/req_file.pyr   zPythonDeps.__init__   sO    	)e<<<'',,	;?59    parserr	   c                8    |                     dddd           d S )N	--no-deps
store_trueno_depsF)actiondestdefault)add_argument)r   r"   s     r    _extend_parserzPythonDeps._extend_parser   s&    K9V[\\\\\r!   base_optr
   optfilenamec                    t                                          |||           t          |dd          r	d|_        d S d S )Nr&   FT)r   _merge_option_linegetattrr&   )r   r,   r-   r.   r   s       r    r0   zPythonDeps._merge_option_line   sK    ""8S(;;;3	5)) 	$#H	$ 	$r!   	list[str]c                    t                                          |          }t          |dd          r|                    d           |S )Nr&   Fr$   )r   _option_to_argsr1   append)r   r-   resultr   s      r    r4   zPythonDeps._option_to_args!   sE    ((--3	5)) 	'MM+&&&r!   r   c                T    | j         t          | j        d          | _         | j         S )NF)pathr   )r   r   _pathr   s    r    _req_parserzPythonDeps._req_parser'   s+    $ 0djU S S SD  r!   urlc                ~    |                      |          r| j        S t                                          |          S N)_is_url_selfr   r   _get_file_content)r   r<   r   s     r    r@   zPythonDeps._get_file_content-   s9    S!! 	9ww((---r!   boolc                2    |t          | j                  k    S r>   )r   r9   )r   r<   s     r    r?   zPythonDeps._is_url_self2   s    c$*oo%%r!   contentr   c              #  "  K   t                                          |          D ]i\  }}|                    d          s/|                    d          r2|d                                         r|dd          d|dd           }n|}||fV  jd S )N-r-c   r    )r   _pre_process
startswithisalpha)r   rC   atline
found_liner   s        r    rI   zPythonDeps._pre_process5   s      ,,W55 	! 	!HBt$$ ")>)> "47??CTCT " $QqS	66DH66

!
j.    	! 	!r!   c                4    | j                                         S r>   )r   
splitlinesr:   s    r    lineszPythonDeps.lines=   s    y##%%%r!   c                   d                     |                     dd                              d                    } d |                                 D             }d                     |          }|                     d          r| dn|S )N z\
c                B    g | ]}t                               |          S  )r   _normalize_line).0rM   s     r    
<listcomp>z-PythonDeps._normalize_raw.<locals>.<listcomp>F   s&    ZZZJ66t<<ZZZr!   
)joinreplacesplitrP   endswith)r   rQ   adjusteds      r    r   zPythonDeps._normalize_raw@   s     ggckk$++11&99::ZZIYIYZZZ99U##"%,,v"6"6D(HDr!   rM   c                d    t           fdt          D             d           }| t          |          d          }| d|  t           fdt          D             d           }|Jt	          j        dd t          |          dz   d                    } d t          |                    d|   S )Nc              3    K   | ]{}                     |          rdt                    t          |          k    rDt          |                                                   st          |                   d k    w|V  |dS )=NrJ   lenisspace)rX   argrM   s     r    	<genexpr>z-PythonDeps._normalize_line.<locals>.<genexpr>M   s        ??3'' IIC((c#hh//11 )59#c((^s5J5J	  6K5J5J5J r!   rH   c              3     K   | ]B}                     |          t          |                                                   >|V  Cd S r>   rc   )rX   erM   s     r    rg   z-PythonDeps._normalize_line.<locals>.<genexpr>Z   sU      hh1$//!:L:LhQUVYZ[V\V\Q]QeQeQgQghQhhhhhhr!   z(?<!\\)(\s)z\\\1r   )nextONE_ARGrd   ONE_ARG_ESCAPEresub)rM   	arg_matchvaluesescape_matchescapeds   `    r    rW   zPythonDeps._normalize_lineJ   s       "   	
 	
	  #i..**+F**&**Dhhhhhhhjnoo#f^Wd3|;L;Lq;P;R;R6STTG.S.../;;';;Dr!   recurselist[ParsedRequirement]c                
   t                                          ||          }|D ]\}|j        t          | j                  k    r | j        D ]4}|j                            |          rd| d| d}t          |          5]|S )NzCannot use --z1 in deps list, it must be in requirements file. ())	r   _parse_requirements	from_filer   r8   r   optionsget
ValueError)r   r-   rs   requirementsreqillegal_optionmsgr   s          r    rw   zPythonDeps._parse_requirementsa   s     ww223@@ 	* 	*C}DI.."&"7 * *;??>22 *q.qqknqqqC$S//)** r!   tuple[list[str], list[str]]c                    | j         ft          | j                  }| j        s|rd}t	          |          d |                                D             }d | j        D             }||f| _         | j         S )Nzno dependenciesc                "    g | ]\  }}| d | S )rb   rV   )rX   keyvalues      r    rY   z%PythonDeps.unroll.<locals>.<listcomp>t   s*    %[%[%[:3&6&6u&6&6%[%[%[r!   c                ,    g | ]}t          |          S rV   )r   )rX   r}   s     r    rY   z%PythonDeps.unroll.<locals>.<listcomp>u   s    @@@s#c((@@@r!   )r   varsry   r|   r{   items)r   	opts_dictr   result_opts
result_reqs        r    unrollzPythonDeps.unrolln   s    <T\**I$ & &' oo%%[%[IZIZ%[%[%[K@@d.?@@@J&
2DL|r!   otherc                6    | xj         d|j         z   z  c_         | S )NrZ   )r   )r   r   s     r    __iadd__zPythonDeps.__iadd__y   s    		TEJ&&		r!   objectc                b    t          |t                    st          |           | ||          S r>   )
isinstancer   	TypeError)clsr   r   s      r    factoryzPythonDeps.factory}   s0    #s## 	!C.. s3~~r!   )r   r   r   r   r   r   )r"   r	   r   r   )r,   r
   r-   r
   r.   r   r   r   )r-   r
   r   r2   )r   r   )r<   r   r   r   )r<   r   r   rA   )rC   r   r   r   )r   r2   )r   r   r   r   )rM   r   r   r   )r-   r
   rs   rA   r   rt   )r   r   )r   r   r   r   )r   r   r   r   r   r   )__name__
__module____qualname__r   __annotations__r   r+   r0   r4   propertyr;   r@   r?   rI   rQ   staticmethodr   rW   rw   r   r   classmethodr   __classcell__)r   s   @r    r   r      s         +11111: : : : : :] ] ] ]$ $ $ $ $ $
      ! ! ! X!
. . . . . .
& & & &! ! ! ! ! !& & & & E E E \E    \,     	 	 	 	       [    r!   r   >   -i--index-url--no-binary--only-binary--use-feature--trusted-host--extra-index-urlrF   -e-frE   
--editable--constraint--find-links--requirement>   rF   r   r   rE   r   r   r   r   )rk   r   )
__future__r   rm   typingr   req.filer   r   r   argparser	   r
   pathlibr   r   r   rk   rl   __all__rV   r!   r    <module>r      s    " " " " " " 				             G G G G G G G G G G 22222222s s s s s! s s sl  "	 	 	r!   