U
    „~$h_  ã                   @   sŽ   d dl Z d dlmZmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ erpd dlmZ e  e¡ZG d	d
„ d
e
ƒZdS )é    N)ÚTYPE_CHECKINGÚIterableÚOptionalÚSetÚTuple)ÚBuildEnvironment)ÚAbstractDistribution)ÚInstallationError)ÚBaseDistribution)Úrunner_with_spinner_message)ÚPackageFinderc                   @   s¾   e Zd ZdZeee dœdd„ƒZedœdd„Z	de
e
dd	œd
d„Zdddœdd„Zee dœdd„Zee dœdd„Zdddœdd„Zeeeeef  ddœdd„Zee ddœdd„ZdS )ÚSourceDistributionz½Represents a source distribution.

    The preparation step for these needs metadata for the packages to be
    generated, either using PEP 517 or using the legacy `setup.py egg_info`.
    )Úreturnc                 C   s   | j jst‚| j jjS )z/Identify this requirement uniquely by its link.)ÚreqÚlinkÚAssertionErrorÚurl_without_fragment©Úself© r   úE/tmp/pip-unpacked-wheel-g27rp152/pip/_internal/distributions/sdist.pyÚbuild_tracker_id   s    z#SourceDistribution.build_tracker_idc                 C   s
   | j  ¡ S )N)r   Úget_distr   r   r   r   Úget_metadata_distribution   s    z,SourceDistribution.get_metadata_distributionr   N)ÚfinderÚbuild_isolationÚcheck_build_depsr   c           	      C   sš   | j  ¡  | j jo|}|r8|  |¡ | j  ¡  |  |¡ | j joB|}|rŒ| j j}|d k	s\t‚| j j 	|¡\}}|r~|  
d|¡ |rŒ|  |¡ | j  ¡  d S )Núthe backend dependencies)r   Úload_pyproject_tomlÚ
use_pep517Ú_prepare_build_backendZisolated_editable_sanity_checkÚ_install_build_reqsÚpyproject_requiresr   Ú	build_envÚcheck_requirementsÚ_raise_conflictsÚ_raise_missing_reqsÚprepare_metadata)	r   r   r   r   Úshould_isolateZshould_check_depsr"   ÚconflictingÚmissingr   r   r   Úprepare_distribution_metadata    s$    



ÿ
z0SourceDistribution.prepare_distribution_metadata)r   r   c              	   C   sŒ   | j j}|d k	st‚tƒ | j _| j jj||ddd� | j j | j j¡\}}|rZ|  d|¡ |rˆt	 
d| j ¡ t	 
dd ttt|ƒƒ¡¡ d S )NÚoverlayzbuild dependencies©Úkindz"PEP 517/518 supported requirementsz4Missing build requirements in pyproject.toml for %s.z`The project does not specify a build backend, and pip cannot fall back to setuptools without %s.z and )r   r"   r   r   r#   Úinstall_requirementsr$   Úrequirements_to_checkr%   ÚloggerÚwarningÚjoinÚmapÚreprÚsorted)r   r   r"   r)   r*   r   r   r   r    G   s.    
   ÿÿþýz)SourceDistribution._prepare_build_backendc                 C   sf   | j j�T tdƒ}| j j}|d k	s&t‚| |¡�" | ¡ W  5 Q R £ W  5 Q R £ S Q R X W 5 Q R X d S )Nz#Getting requirements to build wheel)r   r#   r   Úpep517_backendr   Úsubprocess_runnerÚget_requires_for_build_wheel©r   ÚrunnerÚbackendr   r   r   Ú_get_build_requires_wheela   s    
z,SourceDistribution._get_build_requires_wheelc                 C   sf   | j j�T tdƒ}| j j}|d k	s&t‚| |¡�" | ¡ W  5 Q R £ W  5 Q R £ S Q R X W 5 Q R X d S )Nz&Getting requirements to build editable)r   r#   r   r7   r   r8   Zget_requires_for_build_editabler:   r   r   r   Ú_get_build_requires_editablei   s    
ÿz/SourceDistribution._get_build_requires_editablec                 C   sf   | j jr"| j jr"| j jr"|  ¡ }n|  ¡ }| j j |¡\}}|rL|  d|¡ | j jj	||ddd� d S )Nr   Únormalzbackend dependenciesr-   )
r   ÚeditableZpermit_editable_wheelsZsupports_pyproject_editabler>   r=   r#   r$   r%   r/   )r   r   Z
build_reqsr)   r*   r   r   r   r!   s   s"    ÿþý
   ÿz&SourceDistribution._install_build_reqs)Úconflicting_withÚconflicting_reqsr   c                 C   s6   d}|j | j|d dd„ t|ƒD ƒ¡d�}t|ƒ‚d S )NzZSome build dependencies for {requirement} conflict with {conflicting_with}: {description}.ú, c                 s   s    | ]\}}|› d |› �V  qdS )z is incompatible with Nr   )Ú.0Ú	installedÚwantedr   r   r   Ú	<genexpr>�   s   ÿz6SourceDistribution._raise_conflicts.<locals>.<genexpr>)ÚrequirementrA   Údescription)Úformatr   r3   r6   r	   )r   rA   rB   Úformat_stringÚerror_messager   r   r   r%   †   s    ÿ
þýz#SourceDistribution._raise_conflicts)r*   r   c                 C   s0   d}|j | jd ttt|ƒƒ¡d�}t|ƒ‚d S )NzASome build dependencies for {requirement} are missing: {missing}.rC   )rH   r*   )rJ   r   r3   r4   r5   r6   r	   )r   r*   rK   rL   r   r   r   r&   —   s    ÿ ÿz&SourceDistribution._raise_missing_reqs)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   Ústrr   r
   r   Úboolr+   r    r   r=   r>   r!   r   r   r%   r&   r   r   r   r   r      s$   û'
 þr   )ÚloggingÚtypingr   r   r   r   r   Úpip._internal.build_envr   Ú pip._internal.distributions.baser   Úpip._internal.exceptionsr	   Zpip._internal.metadatar
   Úpip._internal.utils.subprocessr   Ú"pip._internal.index.package_finderr   Ú	getLoggerrM   r1   r   r   r   r   r   Ú<module>   s   
