3
g&                 @   sd  d Z ddlZddl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	 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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#m$Z$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+m,Z, erddl-m.Z. ej/e0Z1G dd dZ2ej3ee4 dddZ5G dd dZ6G dd de6Z7dS )z;Build Environment used for isolation during sdist building
    N)OrderedDict)	get_paths)TracebackType)TYPE_CHECKINGIterableIteratorListOptionalSetTupleType)where)Requirement)Version)__file__)open_spinner)get_platlibget_prefixed_libsget_purelib)get_environment)call_subprocess)TempDirectorytempdir_kinds)PackageFinderc               @   s   e Zd ZeddddZdS )_PrefixN)pathreturnc             C   s@   || _ d| _ttjdkrdnd||ddd | _t|| _d S )NFntposix_prefix)baseplatbase)varsscripts)r   setupr   osnamebin_dirr   lib_dirs)selfr    r)   U/var/www/tester-filtro-web/env/lib/python3.6/site-packages/pip/_internal/build_env.py__init__"   s    z_Prefix.__init__)__name__
__module____qualname__strr+   r)   r)   r)   r*   r   !   s   r   )r   c              c   s   t jtj j} | j s&t| V  dS tdd}tj	j
|j	d}i }tjdkrXd|d< tj|d	f|2}x*| jd
D ]}|j||j| jj  qvW W dQ R X tj	j
|dV  W dQ R X dS )zCreate a "standalone pip" zip file.

    The zip file's content is identical to the currently-running pip.
    It will be used to install requirements into the build environment.
    Nzstandalone-pip)kindz__env_pip__.zip      FZstrict_timestampsw*pip)r1   r2   )pathlibPathpip_locationresolveparentis_dirr/   r   r$   r   joinsysversion_infozipfileZipFilerglobwriterelative_toas_posix)sourceZtmp_dirZpip_zipkwargszfchildr)   r)   r*   _create_standalone_pip,   s    

&rI   c               @   s   e Zd ZdZddddZddddZeee  ee ee	 ddd	d
Z
ee eeeeef  ee f dddZdee eeddddZeedee eeddddZdS )BuildEnvironmentzACreates and manages an isolated environment to install build depsN)r   c                s   t tjdd t fdddD | _g | _g | _x6tt| jj	 D ] }| jj
|j | jj|j qFW dd t t fD }tjj jd	| _tjj| jstj| j ttjj| jd
d"}|jtjdj|| jd W d Q R X d S )NT)r0   globally_managedc             3   s&   | ]}|t tjj j|fV  qd S )N)r   r$   r   r<   ).0r%   )temp_dirr)   r*   	<genexpr>M   s   z,BuildEnvironment.__init__.<locals>.<genexpr>normaloverlayc             S   s   h | ]}t jj|qS r)   )r$   r   normcase)rL   siter)   r)   r*   	<setcomp>Z   s   z,BuildEnvironment.__init__.<locals>.<setcomp>rR   zsitecustomize.pyr3   a  
                import os, site, sys

                # First, drop system-sites related paths.
                original_sys_path = sys.path[:]
                known_paths = set()
                for path in {system_sites!r}:
                    site.addsitedir(path, known_paths=known_paths)
                system_paths = set(
                    os.path.normcase(path)
                    for path in sys.path[len(original_sys_path):]
                )
                original_sys_path = [
                    path for path in original_sys_path
                    if os.path.normcase(path) not in system_paths
                ]
                sys.path = original_sys_path

                # Second, add lib directories.
                # ensuring .pth file are processed.
                for path in {lib_dirs!r}:
                    assert not path in sys.path
                    site.addsitedir(path)
                )system_sitesr'   )rO   rP   )r   r   	BUILD_ENVr   	_prefixes	_bin_dirs	_lib_dirsreversedlistvaluesappendr&   extendr'   r   r   r$   r   r<   	_site_direxistsmkdiropenrB   textwrapdedentformat)r(   prefixrT   fpr)   )rM   r*   r+   I   s&    
zBuildEnvironment.__init__c             C   sn   dd dD | _ | jd d  }| j d }|r>|j|jtj | jg}tjjtjj	|dtjj	|d d S )	Nc             S   s   i | ]}t jj|d |qS )N)r$   environget)rL   r%   r)   r)   r*   
<dictcomp>   s   z.BuildEnvironment.__enter__.<locals>.<dictcomp>PATHPYTHONNOUSERSITE
PYTHONPATH1)rj   rk   rl   )rj   rk   rl   )
	_save_envrW   r]   splitr$   pathsepr^   rg   updater<   )r(   r   Zold_pathZ
pythonpathr)   r)   r*   	__enter__~   s    


zBuildEnvironment.__enter__)exc_typeexc_valexc_tbr   c             C   s>   x8| j j D ]*\}}|d kr,tjj|d  q|tj|< qW d S )N)rn   itemsr$   rg   pop)r(   rs   rt   ru   Zvarname	old_valuer)   r)   r*   __exit__   s    zBuildEnvironment.__exit__)reqsr   c       	      C   s   t  }t  }|rt| j}x||D ]t}t|}|j|j}|sH|j| q t|jt	rh|j d|j }n|j d|j }|j|j
kr |j||f q W ||fS )zReturn 2 sets:
        - conflicting requirements: set of (installed, wanted) reqs tuples
        - missing requirements: set of reqs
        z==z===)setr   rX   r   get_distributionr%   add
isinstanceversionr   	specifier)	r(   rz   missingconflictingenvZreq_strreqdistZinstalled_req_strr)   r)   r*   check_requirements   s     


z#BuildEnvironment.check_requirementsr   )finderrequirementsprefix_as_stringmessager   c             C   sr   | j | }|j std|_|s$d S tj <}tjdk rFtjj	t
}n|jt }| j||||| W d Q R X d S )NTr1      )r1   r   )rV   r#   AssertionError
contextlib	ExitStackr=   r>   r$   r   dirnamer8   enter_contextrI   _install_requirements)r(   r   r   r   r   re   ctxpip_runnabler)   r)   r*   install_requirements   s    


z%BuildEnvironment.install_requirements)r   r   r   re   r   r   c             C   sd  t j| dddd|jdg}tj tjkr0|jd xBdD ]:}t|j	|}|j
d	|jd
d djt|pfdhf q6W |j}|r|j
d|d g x.|dd  D ]}	|j
d|	g qW n
|jd x|jD ]}
|j
d|
g qW x|jD ]}|j
d|g qW |jr|jd |jr |jd |jd	 |j
| dt i}t|}t|||d W d Q R X d S )Ninstallz--ignore-installedz	--no-userz--prefixz--no-warn-script-locationz-v	no_binaryonly_binaryz--_-,z:none:z-ir      z--extra-index-urlz
--no-indexz--find-linksz--trusted-hostz--prez--prefer-binary_PIP_STANDALONE_CERT)spinnerextra_environ)r   r   )r=   
executabler   loggergetEffectiveLevelloggingDEBUGr\   getattrformat_controlr]   replacer<   sorted
index_urls
find_linkstrusted_hostsallow_all_prereleasesprefer_binaryr   r   r   )r   r   r   re   r   argsr   formatsr   Zextra_indexlinkhostr   r   r)   r)   r*   r      sD    	








z&BuildEnvironment._install_requirements)r,   r-   r.   __doc__r+   rr   r	   r   BaseExceptionr   ry   r   r/   r   r
   r   r   staticmethodr   r   r)   r)   r)   r*   rJ   F   s*   5
&rJ   c               @   sx   e Zd ZdZddddZddddZeee  ee ee	 ddd	d
Z
ddddZdee eeddddZdS )NoOpBuildEnvironmentz0A no-op drop-in replacement for BuildEnvironmentN)r   c             C   s   d S )Nr)   )r(   r)   r)   r*   r+     s    zNoOpBuildEnvironment.__init__c             C   s   d S )Nr)   )r(   r)   r)   r*   rr     s    zNoOpBuildEnvironment.__enter__)rs   rt   ru   r   c             C   s   d S )Nr)   )r(   rs   rt   ru   r)   r)   r*   ry     s    zNoOpBuildEnvironment.__exit__c             C   s   d S )Nr)   )r(   r)   r)   r*   cleanup  s    zNoOpBuildEnvironment.cleanupr   )r   r   r   r   r   c             C   s
   t  d S )N)NotImplementedError)r(   r   r   r   r   r)   r)   r*   r     s    z)NoOpBuildEnvironment.install_requirements)r,   r-   r.   r   r+   rr   r	   r   r   r   ry   r   r   r/   r   r)   r)   r)   r*   r   
  s   
r   )8r   r   r   r$   r6   r=   rb   r?   collectionsr   	sysconfigr   typesr   typingr   r   r   r   r	   r
   r   r   pip._vendor.certifir   "pip._vendor.packaging.requirementsr   pip._vendor.packaging.versionr   r5   r   r8   pip._internal.cli.spinnersr   pip._internal.locationsr   r   r   pip._internal.metadatar   pip._internal.utils.subprocessr   pip._internal.utils.temp_dirr   r   "pip._internal.index.package_finderr   	getLoggerr,   r   r   contextmanagerr/   rI   rJ   r   r)   r)   r)   r*   <module>   s:   (
 E