a
    hbòf{  ã                   @   s‚   d dl Z d dl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 d dlmZ e  e¡ZG d	d
„ d
eƒZdS )é    N)ÚIterableÚSetÚTuple)ÚBuildEnvironment)ÚAbstractDistribution)ÚInstallationError)ÚPackageFinder)ÚBaseDistribution)Úrunner_with_spinner_messagec                   @   s’   e Zd ZdZedœdd„Zeeddœdd„Zedd	œd
d„Z	e
e dœdd„Ze
e dœdd„Zedd	œdd„Zeeeeef  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  ¡ S ©N)ÚreqÚget_dist)Úself© r   ú^/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/pip/_internal/distributions/sdist.pyÚget_metadata_distribution   s    z,SourceDistribution.get_metadata_distributionN)ÚfinderÚbuild_isolationr   c                 C   sF   | j  ¡  | j jo|}|r8|  |¡ | j  ¡  |  |¡ | j  ¡  d S r   )r   Úload_pyproject_tomlÚ
use_pep517Ú_prepare_build_backendÚisolated_editable_sanity_checkÚ_install_build_reqsÚprepare_metadata)r   r   r   Úshould_isolater   r   r   Úprepare_distribution_metadata   s    



z0SourceDistribution.prepare_distribution_metadata)r   r   c              	   C   sŒ   | j j}|d usJ ‚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   Úpyproject_requiresr   Ú	build_envÚinstall_requirementsÚcheck_requirementsÚrequirements_to_checkÚ_raise_conflictsÚloggerÚwarningÚjoinÚmapÚreprÚsorted)r   r   r!   ÚconflictingÚmissingr   r   r   r   1   s(    
ÿÿþýz)SourceDistribution._prepare_build_backendc              	   C   sˆ   | j j�l tdƒ}| j j}|d us&J ‚| |¡�& | ¡ W  d   ƒ W  d   ƒ S 1 s\0    Y  W d   ƒ n1 sz0    Y  d S )Nz#Getting requirements to build wheel)r   r"   r
   Úpep517_backendÚsubprocess_runnerÚget_requires_for_build_wheel©r   ÚrunnerÚbackendr   r   r   Ú_get_build_requires_wheelK   s    
z,SourceDistribution._get_build_requires_wheelc              	   C   sˆ   | j j�l tdƒ}| j j}|d us&J ‚| |¡�& | ¡ W  d   ƒ W  d   ƒ S 1 s\0    Y  W d   ƒ n1 sz0    Y  d S )Nz&Getting requirements to build editable)r   r"   r
   r/   r0   Úget_requires_for_build_editabler2   r   r   r   Ú_get_build_requires_editableS   s    
ÿz/SourceDistribution._get_build_requires_editablec                 C   sh   | j jr$| j jr$| j  ¡ r$|  ¡ }n|  ¡ }| j j |¡\}}|rN|  d|¡ | j jj	||ddd� d S )Nzthe backend dependenciesÚnormalzbackend dependenciesr   )
r   ÚeditableÚpermit_editable_wheelsÚsupports_pyproject_editabler7   r5   r"   r$   r&   r#   )r   r   Ú
build_reqsr-   r.   r   r   r   r   ]   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}.z, c                 s   s    | ]\}}|› d |› �V  qdS )z is incompatible with Nr   )Ú.0Ú	installedÚwantedr   r   r   Ú	<genexpr>z   s   ÿz6SourceDistribution._raise_conflicts.<locals>.<genexpr>)Úrequirementr=   Údescription)Úformatr   r)   r,   r   )r   r=   r>   Úformat_stringÚerror_messager   r   r   r&   p   s    ÿ
þýz#SourceDistribution._raise_conflicts)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r   r   Úboolr   r   r   Ústrr5   r7   r   r   r   r&   r   r   r   r   r      s   þ
þr   )ÚloggingÚtypingr   r   r   Úpip._internal.build_envr   Ú pip._internal.distributions.baser   Úpip._internal.exceptionsr   Ú"pip._internal.index.package_finderr   Úpip._internal.metadatar	   Úpip._internal.utils.subprocessr
   Ú	getLoggerrH   r'   r   r   r   r   r   Ú<module>   s   
