o
    [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r&d 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 d	ed
efddZded
efddZedg dZde	e dededed
e	e f
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   ~/home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/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_directoryc                 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_namec                 C   s  t j|}t j|}|s|st| d|r<t|dd}t| }W d   n1 s1w   Y  |d}nd}|rO|sO| durL| sLtdd} n,|rgd|v rg| durd| sdtd		|d d} n| du r{|pzt
jd
 pzt
jd } | dusJ | sdS |du rdgdd}|dusJ d|vrt|d|d }	t|	st|dd|	D ]}
zt|
 W q ty } z
t|d|
d|d}~ww |d}|dg }g }|du rd}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.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_specr   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>   s6    

