U
    „~$hv  ã                   @   sØ   d dl Zd dlZd dlZd dlmZ d dlmZmZm	Z	 ej
dkrLd dlZnd dlmZ d dlmZ d dlmZmZmZ d dlmZ eed	œd
d„Zeedœdd„ZedddddgƒZe	e eeee	e dœdd„ZdS )é    N)Ú
namedtuple)ÚAnyÚListÚOptional)é   é   )Útomli)ÚInvalidRequirement)ÚInstallationErrorÚInvalidPyProjectBuildRequiresÚMissingPyProjectBuildRequires)Úget_requirement)ÚobjÚreturnc                 C   s   t | tƒotdd„ | D ƒƒS )Nc                 s   s   | ]}t |tƒV  qd S )N)Ú
isinstanceÚstr)Ú.0Úitem© r   ú;/tmp/pip-unpacked-wheel-g27rp152/pip/_internal/pyproject.pyÚ	<genexpr>   s     z"_is_list_of_str.<locals>.<genexpr>)r   ÚlistÚall)r   r   r   r   Ú_is_list_of_str   s    r   )Úunpacked_source_directoryr   c                 C   s   t j | d¡S )Nzpyproject.toml)ÚosÚpathÚjoin)r   r   r   r   Úmake_pyproject_path   s    r   ÚBuildSystemDetailsÚrequiresÚbackendÚcheckÚbackend_path)Ú
use_pep517Úpyproject_tomlÚsetup_pyÚreq_namer   c                 C   sÚ  t j |¡}t j |¡}|s.|s.t|› d�ƒ‚|rdt|dd��}t | ¡ ¡}W 5 Q R X | d¡}nd}|rŠ|sŠ| dk	r„| s„tdƒ‚d} nX|rºd|krº| dk	r´| s´td	 	|d ¡ƒ‚d} n(| dkrâ|pàt
j d
¡ pàt
j d¡ } | dk	sît‚| södS |dk�rdgddœ}|dk	�st‚d|k�r.t|d�‚|d }	t|	ƒ�sLt|dd�‚|	D ]L}
zt|
ƒ W n8 tk
�r˜ } zt|d|
›�d�|‚W 5 d}~X Y nX �qP| d¡}| dg ¡}g }|dk�rÌd}dg}t|	|||ƒS )aB  Load the pyproject.toml file.

    Parameters:
        use_pep517 - Has the user requested PEP 517 processing? None
                     means the user hasn't explicitly specified.
        pyproject_toml - Location of the project's pyproject.toml file
        setup_py - Location of the project's setup.py file
        req_name - The name of the requirement we're processing (for
                   error reporting)

    Returns:
        None if we should use the legacy code path, otherwise a tuple
        (
            requirements from pyproject.toml,
            name of PEP 517 backend,
            requirements we should check are installed after setting
                up the build environment
            directory paths to import the backend from (backend-path),
                relative to the project root.
        )
    zW does not appear to be a Python project: neither 'setup.py' nor 'pyproject.toml' found.zutf-8)Úencodingzbuild-systemNzIDisabling PEP 517 processing is invalid: project does not have a setup.pyTúbuild-backendzbDisabling PEP 517 processing is invalid: project specifies a build backend of {} in pyproject.tomlÚ
setuptoolsÚwheelzsetuptools>=40.8.0z setuptools.build_meta:__legacy__)r    r)   r    )ÚpackagezIt is not a list of strings.)r,   Úreasonz$It contains an invalid requirement: zbackend-path)r   r   Úisfiler
   ÚopenÚtomllibÚloadsÚreadÚgetÚformatÚ	importlibÚutilÚ	find_specÚAssertionErrorr   r   r   r   r	   r   )r$   r%   r&   r'   Úhas_pyprojectÚ	has_setupÚfÚpp_tomlÚbuild_systemr    ÚrequirementÚerrorr!   r#   r"   r   r   r   Úload_pyproject_toml#   s€    ÿÿþÿÿý

þ	


þþý

r@   )Úimportlib.utilr5   r   ÚsysÚcollectionsr   Útypingr   r   r   Úversion_infor0   Úpip._vendorr   Ú"pip._vendor.packaging.requirementsr	   Úpip._internal.exceptionsr
   r   r   Úpip._internal.utils.packagingr   Úboolr   r   r   r   r@   r   r   r   r   Ú<module>   s,   

 
ÿ   þ