3
ûâde/  ã               @   s¤   d dl 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 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ÚRequirement)ÚInstallationError)Ú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   ú6/tmp/pip-build-red6nood/pip/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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j|ƒ}t jj|ƒ}| r2| r2t|› d�ƒ‚|rdt|dd��}tj|ƒ}W dQ R X |jdƒ}nd}|rŽ| rŽ| dk	rˆ|  rˆtdƒ‚d} n>|rÀd|krÀ| dk	rº|  rºtd	j|d ƒƒ‚d} n| dkrÌ|} | dk	sØt	‚| sàdS |dkröd
dgddœ}|dk	�st	‚d}	d|k�r$t|	j|dd�ƒ‚|d }
t
|
ƒ�sHt|	j|dd�ƒ‚xJ|
D ]B}yt|ƒ W n. tk
�rŒ   t|	j|dj|ƒd�ƒ‚Y nX �qNW |jdƒ}|jdg ƒ}g }|dk�rÄd}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)ÚencodingNzbuild-systemzIDisabling PEP 517 processing is invalid: project does not have a setup.pyTzbuild-backendzbDisabling PEP 517 processing is invalid: project specifies a build backend of {} in pyproject.tomlzsetuptools>=40.8.0Úwheelz setuptools.build_meta:__legacy__)r   zbuild-backendzO{package} has a pyproject.toml file that does not comply with PEP 518: {reason}r   z]it has a 'build-system' table but not 'build-system.requires' which is mandatory in the table)ÚpackageÚreasonz1'build-system.requires' is not a list of strings.z='build-system.requires' contains an invalid requirement: {!r}zbackend-path)r   r   Úisfiler	   Úopenr   ÚloadÚgetÚformatÚAssertionErrorr   r   r   r   )r    r!   r"   r#   Zhas_pyprojectZ	has_setupÚfZpp_tomlZbuild_systemZerror_templater   Úrequirementr   r   r   r   r   r   Úload_pyproject_toml   st    








r0   )r   Úcollectionsr   Útypingr   r   r   Úpip._vendorr   Ú"pip._vendor.packaging.requirementsr   r   Zpip._internal.exceptionsr	   Úboolr   r   r   r   r0   r   r   r   r   Ú<module>   s   