B
    9aN                 @   s   d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm	Z	 d dl
mZ erhd dlmZmZmZmZ dd Zd	d
 Zdd ZdS )    )absolute_importN)pytomlsix)InstallationError)MYPY_CHECK_RUNNING)AnyTupleOptionalListc             C   s   t | totdd | D S )Nc             s   s   | ]}t |tjV  qd S )N)
isinstancer   string_types).0item r   8/tmp/pip-install-u9kq1d1e/pip/pip/_internal/pyproject.py	<genexpr>   s    z"_is_list_of_str.<locals>.<genexpr>)r   listall)objr   r   r   _is_list_of_str   s    
r   c             C   s2   t j| d}tjr.t|tjr.|t	 }|S )Nzpyproject.toml)
ospathjoinr   PY2r   	text_typeencodesysgetfilesystemencoding)setup_py_dirr   r   r   r   make_pyproject_path   s    r   c          	   C   sV  t j|}t j|}|rLtj|dd}t|}W dQ R X |d}nd}|rr|sr| dk	rl| sltdd} n<|rd|kr| dk	r| std	|d d} n| dkr|} | dk	st
| sdS |dkrd	d
gdd}|dk	st
d}	d|krt|	j	|dd|d }
t|
s(t|	j	|dd|d}g }|dkrLd}d	d
g}|
||fS )a  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
        )
    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__)requiresz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.)r   r   isfileioopenr   loadgetr   formatAssertionErrorr   )
use_pep517pyproject_tomlsetup_pyreq_namehas_pyproject	has_setupfpp_tomlbuild_systemerror_templater"   backendcheckr   r   r   load_pyproject_toml#   sV    






r8   )
__future__r   r&   r   r   pip._vendorr   r   pip._internal.exceptionsr   pip._internal.utils.typingr   typingr   r   r	   r
   r   r   r8   r   r   r   r   <module>   s   