U
    |e                     @  s   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	 G dd dedZ
G d	d
 d
e
edZG dd de
edZG dd de
edZdd
ddgZdS )    )annotations)ABCMeta)OrderedDict)Path)IS_WINc                   @  s   e Zd ZdZerdndZddddZedd	 Zed
d Z	edd Z
edd Zedd Zedd Zedd Zedd Zdd Zedd Zedd Zedd Zed d! Zd"d# Zd$S )%Describez`Given a host interpreter tell us information about what the created interpreter might look like.z.exe None)returnc                 C  s(   || _ || _d | _d | _d | _d | _d S N)interpreterdest_stdlib_stdlib_platformZ_system_stdlib
_conf_vars)selfr   r    r   >/tmp/pip-unpacked-wheel-tuxcr54r/virtualenv/create/describe.py__init__   s    zDescribe.__init__c                 C  s   | j S r   )
script_dirr   r   r   r   bin_dir   s    zDescribe.bin_dirc                 C  s   | j | jd S )Nscriptsr   r   Zinstall_pathr   r   r   r   r      s    zDescribe.script_dirc                 C  s   | j | jd S )Npurelibr   r   r   r   r   r      s    zDescribe.purelibc                 C  s   | j | jd S )Nplatlibr   r   r   r   r   r   #   s    zDescribe.platlibc                 C  s    t t| jd f| jd ff S r   )listr   r   r   keysr   r   r   r   libs'   s    zDescribe.libsc                 C  s(   | j d kr"t| jjd| jd| _ | j S )NstdlibZ
config_var)r   r   r   sysconfig_path_config_varsr   r   r   r   r   +   s    
zDescribe.stdlibc                 C  s(   | j d kr"t| jjd| jd| _ | j S )N
platstdlibr    )r   r   r   r!   r"   r   r   r   r   stdlib_platform1   s    
zDescribe.stdlib_platformc                 C  s   | j d kr| | j| _ | j S r   )r   _calc_config_varsr   r   r   r   r   r"   7   s    
zDescribe._config_varsc                   s     j j} fdd| D S )Nc                   s0   i | ](\}}||d k	r(|  jjr(n|qS r   )
startswithr   prefix).0kvr   tor   r   
<dictcomp>?   s      z.Describe._calc_config_vars.<locals>.<dictcomp>)r   Zsysconfig_varsitems)r   r,   Zsys_varsr   r+   r   r%   =   s    zDescribe._calc_config_varsc                 C  s   dS )z.Knows means it knows how the output will look.Tr   clsr   r   r   r   can_describeA   s    zDescribe.can_describec                 C  s   | j jd S )N)r   partsr   r   r   r   env_nameF   s    zDescribe.env_namec                 C  s   | j |   | j  S r   )r   exe_stemsuffixr   r   r   r   exeJ   s    zDescribe.exec                 C  s   t dS )zcExecutable name without suffix - there seems to be no standard way to get this without creating it.N)NotImplementedError)r0   r   r   r   r5   N   s    zDescribe.exe_stemc                 C  s   | j | | j  S r   )r   r6   )r   namer   r   r   scriptS   s    zDescribe.scriptN)__name__
__module____qualname____doc__r   r6   r   propertyr   r   r   r   r   r   r$   r"   r%   classmethodr1   r4   r7   r5   r:   r   r   r   r   r   
   s:   











r   )	metaclassc                      s    e Zd Ze fddZ  ZS )Python3Supportsc                   s   |j jdkot |S )N   )version_infomajorsuperr1   r/   	__class__r   r   r1   X   s    zPython3Supports.can_describer;   r<   r=   r@   r1   __classcell__r   r   rG   r   rB   W   s   rB   c                      s    e Zd Ze fddZ  ZS )PosixSupportsc                   s   |j dkot |S )NposixosrF   r1   r/   rG   r   r   r1   ^   s    zPosixSupports.can_describerI   r   r   rG   r   rK   ]   s   rK   c                      s    e Zd Ze fddZ  ZS )WindowsSupportsc                   s   |j dkot |S )NntrM   r/   rG   r   r   r1   d   s    zWindowsSupports.can_describerI   r   r   rG   r   rO   c   s   rO   N)
__future__r   abcr   collectionsr   pathlibr   Zvirtualenv.infor   r   rB   rK   rO   __all__r   r   r   r   <module>   s   M