U
    b+                     @   s"  d dl mZmZmZmZ d dlmZ d dlmZ d dl	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mZmZm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"m#Z#m$Z$ ee%Z&eddZ'eZ(G dd deZ)dd Z*dd Z+G dd dee)dZ,dd Z-dS )    )absolute_importdivisionprint_functionunicode_literals)
namedtuple)	getLoggerN   )Channel)PackageInfo)PackageRecord   )
CondaError)Entity
EntityTypeIntegerFieldStringField)CONDA_PACKAGE_EXTENSIONSDEFAULTS_CHANNEL_NAMEUNKNOWN_CHANNEL)context)ensure_text_type)NULL)has_platformis_urljoin_urlDistDetails)nameversionbuild_stringbuild_number	dist_namefmtc                       s   e Zd Z fddZ  ZS )DistTypec                    s   t |dkr|s|d }|tjkr,tj| S t|tr<|}nt|tr\tj|j|jjd}ndt	|drzt|j
trz|j
}nFt|trtj|jj|jjd}n$t|trt| }n
t|}|tj|< |S tt| j||S d S )Nr   r   )channel_overridedist)lenDist_cache_
isinstancer   from_stringfnchannelcanonical_namehasattrr$   r
   Zrepodata_recordr	   from_urlurlsuperr"   __call__)clsargskwargsvaluer$   	__class__ 0lib/python3.8/site-packages/conda/models/dist.pyr1      s(    








zDistType.__call__)__name__
__module____qualname__r1   __classcell__r8   r8   r6   r9   r"      s   r"   c                 C   s*   t D ] }| |r| d t|  } q| S N)r   endswithr%   )original_distextr8   r8   r9   strip_extension7   s    
rB   c                 C   s   t | }|| t|d  fS r>   )rB   r%   )r@   strippedr8   r8   r9   split_extension>   s    rD   c                       s  e Zd Zi ZdZe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ddZeddddZdD fdd	Z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dEddZdd Zdd  Zeefd!d"Z e!d#d$ Z"ed%d& Z#d'd( Z$d)d* Z%d+d, Z&d-d. Z'd/d0 Z(d1d2 Z)d3d4 Z*d5d6 Z+d7d8 Z,dFd:d;Z-dGd<d=Z.d>d? Z/d@dA Z0edBdC Z1  Z2S )Hr&   TF)ZrequiredZnullable	immutable)rE   N.tar.bz2c
           
         s&   t t| j|||||||||	d	 d S )N)	r+   r    r   r   r   r   base_urlplatformr!   )r0   r&   __init__)
selfr+   r    r   r   r   r   rG   rH   r!   r6   r8   r9   rI   S   s    zDist.__init__c                 C   s    t | j| j| j| j| j| jdS )N)r+   subdirr   r   buildr   )r   r+   rH   r   r   r   r   rJ   r8   r8   r9   to_package_ref_   s    zDist.to_package_refc                 C   s   |   S r>   )__str__rM   r8   r8   r9   	full_namei   s    zDist.full_namec                 C   s   | j S r>   )r   rM   r8   r8   r9   rL   m   s    z
Dist.buildc                 C   s   | j S r>   )rH   rM   r8   r8   r9   rK   q   s    zDist.subdirc                 C   s   | j pt| jfS r>   )r+   r   r    rM   r8   r8   r9   pairu   s    z	Dist.pairc                 C   s4   | j ddddg }|d |d |d | jp0tfS )N-r    r   r   )r    rsplitr+   r   )rJ   partsr8   r8   r9   quady   s    z	Dist.quadc                 C   s   | j rd| j | jf S | jS )N%s::%sr+   r    rM   r8   r8   r9   rO      s    zDist.__str__c                 C   s   | j dS )N@)r    r?   rM   r8   r8   r9   is_feature_package   s    zDist.is_feature_packagec                 C   s   t | jo| jS r>   )boolrG   rH   rM   r8   r8   r9   
is_channel   s    zDist.is_channelc                 C   s   | j r| jS | j| j S d S r>   )rZ   r    r!   )rJ   	extensionr8   r8   r9   to_filename   s    zDist.to_filenamec                 C   s   d | jd d S )N    )joinrV   rM   r8   r8   r9   to_matchspec   s    zDist.to_matchspecc                 C   s<   ddl m} d| jd d }|| jr6d| j|f n|S )Nr   )	MatchSpec=r`   rW   )Z
match_specrc   ra   rV   r+   )rJ   rc   baser8   r8   r9   to_match_spec   s    zDist.to_match_specc           	   	   C   s   t |}t|r"|tkr"| |S |dr@| d|ddd|dS d}t|| \}}}t|\}}|tkrr|}|szt	}| 
|}| ||j|j|j|j||dS )NrY   rS   r   )r+   r   r   r   r   r    z8(?:([^\s\[\]]+)::)?([^\s\[\]]+)(?:\[([a-zA-Z0-9_-]+)\])?)r+   r   r   r   r   r    r!   )strr   r   r.   r?   researchgroupsrD   r   parse_dist_namer   r   r   r   )	r2   stringr#   Z	REGEX_STRr+   r@   Zw_f_dr!   dist_detailsr8   r8   r9   r)      s6    


zDist.from_stringc                 C   s   | }zt | } t| \}}d|kr4|ddd }n|ddd }|dd}|d }|d }t|dkrt|d nd	}d	td
d |r|dd nd}	|	rt|	nd}
t||||
||W S    td| Y nX d S )N::r   /rR   r   r   r`   rS   c                 S   s   |   S r>   )isdigit)xr8   r8   r9   <lambda>       z&Dist.parse_dist_name.<locals>.<lambda>_0z*dist_name is not a valid conda package: %s)	r   rD   rT   r%   ra   filterintr   r   )rl   Zoriginal_stringZno_fmt_stringr!   r    rU   r   r   r   Zbuild_number_as_stringr   r8   r8   r9   rk      s(    zDist.parse_dist_namec                    s   t  st t fddtD s:d kr:td  |  }d kr~ ddd }tj}|	dd }t
t|}nF ddd }t|tj}|r|ddd n|}|rt|jnt}| ||j|j|j|j|j|||jd	S )	Nc                 3   s   | ]}  |V  qd S r>   )r?   ).0rA   r/   r8   r9   	<genexpr>   s     z Dist.from_url.<locals>.<genexpr>rn   zurl '%s' is not a conda packager   r   rp   )	r+   r   r   r   r   r    rG   rH   r!   )r   AssertionErroranyr   r   rk   rT   r   rK   splitrg   r	   r   Zknown_subdirsr,   r   r   r   r   r   r    r!   )r2   r/   rm   Zurl_no_tarballrH   rG   r+   r8   rz   r9   r.      s.    
zDist.from_urlc                 C   s8   | j s
d S | j| j }| jr,t| j | j|S t| j |S r>   )rG   r    r!   rH   r   )rJ   filenamer8   r8   r9   to_url   s    
zDist.to_urlc                 C   s   | j | jfS r>   rX   rM   r8   r8   r9   __key__   s    zDist.__key__c                 C   s    t || jst|  | k S r>   r(   r7   r|   r   rJ   otherr8   r8   r9   __lt__  s    zDist.__lt__c                 C   s    t || jst|  | kS r>   r   r   r8   r8   r9   __gt__  s    zDist.__gt__c                 C   s    t || jst|  | kS r>   r   r   r8   r8   r9   __le__	  s    zDist.__le__c                 C   s    t || jst|  | kS r>   r   r   r8   r8   r9   __ge__  s    zDist.__ge__c                 C   s   t |  | jfS r>   )hashr   r!   rM   r8   r8   r9   __hash__  s    zDist.__hash__c                 C   s   t || jo|  | kS r>   )r(   r7   r   r   r8   r8   r9   __eq__  s    zDist.__eq__c                 C   s   |  | S r>   )r   r   r8   r8   r9   __ne__  s    zDist.__ne__ro   c                 C   s&   |dkst | jr| j| jgS | jgS )Nrn   )r|   r+   r    )rJ   sepmaxsplitr8   r8   r9   r~     s    z
Dist.splitc                 C   sR   |dkst |dkst | jr2d| j| jd f n| jd }|| jd | jd fS )NrR   r   rW   r   r   )r|   r+   rV   )rJ   r   r   r   r8   r8   r9   rT   "  s    $zDist.rsplitc                 C   s   | j |S r>   )r    
startswith)rJ   matchr8   r8   r9   r   (  s    zDist.startswithc                 C   s   t t|}||  kS r>   )rB   r   rO   )rJ   itemr8   r8   r9   __contains__+  s    zDist.__contains__c                 C   s   |   S r>   )r^   rM   r8   r8   r9   r*   /  s    zDist.fn)NNNNNNNrF   )N)Nro   )Nro   )3r:   r;   r<   r'   Z_lazy_validater   r+   r    r   r!   r   r   r   r   rG   rH   rI   rN   propertyrP   rL   rK   rQ   rV   rO   rZ   r\   r^   rb   rf   classmethodr   r)   staticmethodrk   r.   r   r   r   r   r   r   r   r   r   r~   rT   r   r   r*   r=   r8   r8   r6   r9   r&   C   sr   





        








%



r&   )	metaclassc                 C   sD   t | } d| kr"| dd\}} nt}| dd\}}}||||fS )Nrn   r   rR   r   )rB   r~   r   rT   )Zdist_strZchannel_strr   r   rL   r8   r8   r9   dist_str_to_quad4  s    r   ).Z
__future__r   r   r   r   collectionsr   Zloggingr   rh   r+   r	   Zpackage_infor
   Zrecordsr   rS   r   Zauxlib.entityr   r   r   r   Zbase.constantsr   r   r   Zbase.contextr   Zcommon.compatr   Zcommon.constantsr   Z
common.urlr   r   r   r:   logr   ZIndexRecordr"   rB   rD   r&   r   r8   r8   r8   r9   <module>   s,   
 r