
0c@_                 @   s   d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l m Z d  d l m Z m	 Z	 d  d l
 m Z m Z d  d l m Z d  d l m Z e r d  d l m Z m Z m Z d	 d
   Z d d   Z e d d d d d g  Z d d   Z d S)    )absolute_importN)
namedtuple)sixtoml)InvalidRequirementRequirement)InstallationError)MYPY_CHECK_RUNNING)Any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   6/tmp/pip-build-jynh7p1z/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   sI   t  j j |  d  } t j rE t | t j  rE | j t j	    } | S)Nzpyproject.toml)
ospathjoinr   PY2r   	text_typeencodesysgetfilesystemencoding)Zunpacked_source_directoryr   r   r   r   make_pyproject_path   s    r    BuildSystemDetailsrequiresbackendcheckbackend_pathc             C   sg  t  j j |  } t  j j |  } | rj t j | d d  } t j |  } Wd QRX| j d  } n d } | r | r |  d k	 r |  r t d   d }  nY | 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
 d g d d i } | d k	 sPt
  d }	 d	 | k rt |	 j	 d | d d    | d	 }
 t |
  st |	 j	 d | d d    xX |
 D]P } y t |  Wqt k
 r
t |	 j	 d | d d j	 |     YqXqW| j d  } | j d g   } g  } | d k rT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.
        )
    encodingzutf-8Nz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.tomlr"   zsetuptools>=40.8.0wheelz setuptools.build_meta:__legacy__zO{package} has a pyproject.toml file that does not comply with PEP 518: {reason}packagereasonz]it has a 'build-system' table but not 'build-system.requires' which is mandatory in the tablez1'build-system.requires' is not a list of strings.z='build-system.requires' contains an invalid requirement: {!r}zbackend-path)r   r   isfileioopenr   loadgetr   formatAssertionErrorr   r   r   r!   )Z
use_pep517Zpyproject_tomlsetup_pyZreq_nameZhas_pyprojectZ	has_setupfZpp_tomlZbuild_systemZerror_templater"   requirementr#   r%   r$   r   r   r   load_pyproject_toml*   sj    			

	r4   )
__future__r   r+   r   r   collectionsr   Zpip._vendorr   r   "pip._vendor.packaging.requirementsr   r   Zpip._internal.exceptionsr   Zpip._internal.utils.typingr	   Ztypingr
   r   r   r   r    r!   r4   r   r   r   r   <module>   s   