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mZ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+e e+G dd deZ,dd Z-dS )    )absolute_importdivisionprint_functionunicode_literals)
namedtuple)	getLoggerN   )Channel)PackageRecord)PackageInfo   )
CondaError)Entity
EntityTypeIntegerFieldStringField)CONDA_TARBALL_EXTENSIONDEFAULTS_CHANNEL_NAMEUNKNOWN_CHANNEL)context)ensure_text_type	text_typewith_metaclass)NULL)has_platformis_urljoin_urlDistDetails)nameversionbuild_stringbuild_number	dist_namec                   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.7/site-packages/conda/models/dist.pyr2      s&    








zDistType.__call__)__name__
__module____qualname__r2   __classcell__r8   r8   )r7   r9   r#      s   r#   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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 Z/edBdC Z0  Z1S )Hr'   TF)ZrequiredZnullable	immutable)r>   Nc	       	   
      s$   t t| j||||||||d d S )N)r,   r"   r   r   r    r!   base_urlplatform)r1   r'   __init__)	selfr,   r"   r   r   r    r!   r?   r@   )r7   r8   r9   rA   G   s    zDist.__init__c             C   s    t | j| j| j| j| j| jdS )N)r,   subdirr   r   buildr!   )r
   r,   r@   r   r   r    r!   )rB   r8   r8   r9   to_package_refR   s    zDist.to_package_refc             C   s   |   S )N)__str__)rB   r8   r8   r9   	full_name\   s    zDist.full_namec             C   s   | j S )N)r    )rB   r8   r8   r9   rD   `   s    z
Dist.buildc             C   s   | j S )N)r@   )rB   r8   r8   r9   rC   d   s    zDist.subdirc             C   s   | j pt| jfS )N)r,   r   r"   )rB   r8   r8   r9   pairh   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   )rB   partsr8   r8   r9   quadl   s    z	Dist.quadc             C   s   | j rd| j | jf S | jS )Nz%s::%s)r,   r"   )rB   r8   r8   r9   rF   r   s    zDist.__str__c             C   s   | j dS )N@)r"   endswith)rB   r8   r8   r9   is_feature_packageu   s    zDist.is_feature_packagec             C   s   t | jo| jS )N)boolr?   r@   )rB   r8   r8   r9   
is_channely   s    zDist.is_channel.tar.bz2c             C   s   | j r| jS | j| S d S )N)rP   r"   )rB   	extensionr8   r8   r9   to_filename}   s    zDist.to_filenamec             C   s   d | jd d S )N    )joinrM   )rB   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=rW   z%s::%s)Z
match_specrZ   rX   rM   r,   )rB   rZ   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rv|d t	t  }|tkr|}|st
}| |}| ||j|j|j|j|dS )NrN   rJ   r   )r,   r   r   r    r!   r"   z8(?:([^\s\[\]]+)::)?([^\s\[\]]+)(?:\[([a-zA-Z0-9_-]+)\])?)r   r   r   r/   rO   researchgroupsr   r&   r   parse_dist_namer   r   r    r!   )r3   stringr$   Z	REGEX_STRr,   Zoriginal_distZw_f_ddist_detailsr8   r8   r9   r*      s2    



zDist.from_stringc       
      C   s   | }yt | } | tr*| d tt  n| }d|krH|ddd }n|ddd }|dd}|d }|d }t|dkr|d nd	}d	td
d |r|dd nd}|rt|nd}	t||||	|S    t	d| Y nX d S )Nz::r   /rI   r   r   rW   rJ   c             S   s   |   S )N)isdigit)xr8   r8   r9   <lambda>       z&Dist.parse_dist_name.<locals>.<lambda>_0z*dist_name is not a valid conda package: %s)
r   rO   r   r&   rK   rX   filterintr   r   )
rb   Zoriginal_stringZno_tar_bz2_stringr"   rL   r   r   r    Zbuild_number_as_stringr!   r8   r8   r9   ra      s$    zDist.parse_dist_namec          
   C   s   t |st||ts.d|kr.td| | |}d|krr|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||dS )Nz::zurl '%s' is not a conda packager   r   re   )r,   r   r   r    r!   r"   r?   r@   )r   AssertionErrorrO   r   r   ra   rK   r   rC   splitr   r	   r   Zknown_subdirsr-   r   r   r   r    r!   r"   )r3   r0   rc   Zurl_no_tarballr@   r?   r,   r8   r8   r9   r/      s*    
zDist.from_urlc             C   s6   | j s
d S | jt }| jr*t| j | j|S t| j |S )N)r?   r"   r   r@   r   )rB   filenamer8   r8   r9   to_url   s
    
zDist.to_urlc             C   s   | j | jfS )N)r,   r"   )rB   r8   r8   r9   __key__   s    zDist.__key__c             C   s    t || jst|  | k S )N)r)   r7   rn   rr   )rB   otherr8   r8   r9   __lt__   s    zDist.__lt__c             C   s    t || jst|  | kS )N)r)   r7   rn   rr   )rB   rs   r8   r8   r9   __gt__   s    zDist.__gt__c             C   s    t || jst|  | kS )N)r)   r7   rn   rr   )rB   rs   r8   r8   r9   __le__   s    zDist.__le__c             C   s    t || jst|  | kS )N)r)   r7   rn   rr   )rB   rs   r8   r8   r9   __ge__  s    zDist.__ge__c             C   s   t |  S )N)hashrr   )rB   r8   r8   r9   __hash__  s    zDist.__hash__c             C   s   t || jo|  | kS )N)r)   r7   rr   )rB   rs   r8   r8   r9   __eq__	  s    zDist.__eq__c             C   s   |  | S )N)rz   )rB   rs   r8   r8   r9   __ne__  s    zDist.__ne__rd   c             C   s&   |dkst | jr| j| jgS | jgS )Nz::)rn   r,   r"   )rB   sepmaxsplitr8   r8   r9   ro     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 )NrI   r   z%s::%sr   r   )rn   r,   rM   )rB   r|   r}   r   r8   r8   r9   rK     s    $zDist.rsplitc             C   s   | j |S )N)r"   
startswith)rB   matchr8   r8   r9   r~     s    zDist.startswithc             C   s0   t |}|tr$|d tt  }||  kS )N)r   rO   r   r&   rF   )rB   itemr8   r8   r9   __contains__  s    
zDist.__contains__c             C   s   |   S )N)rU   )rB   r8   r8   r9   r+   $  s    zDist.fn)NNNNNNN)rS   )Nrd   )Nrd   )2r:   r;   r<   r(   Z_lazy_validater   r,   r"   r   r   r    r   r!   r?   r@   rA   rE   propertyrG   rD   rC   rH   rM   rF   rP   rR   rU   rY   r]   classmethodr   r*   staticmethodra   r/   rq   rr   rt   ru   rv   rw   ry   rz   r{   ro   rK   r~   r   r+   r=   r8   r8   )r7   r9   r'   7   sT   




 


%

r'   c             C   sX   |  tr| d tt  } d| kr6| dd\}} nt}| dd\}}}||||fS )Nz::r   rI   r   )rO   r   r&   ro   r   rK   )Zdist_strZchannel_strr   r   rD   r8   r8   r9   dist_str_to_quad)  s    
r   ).Z
__future__r   r   r   r   collectionsr   Zloggingr   r^   r,   r	   Zrecordsr
   Zpackage_infor   rJ   r   Z_vendor.auxlib.entityr   r   r   r   Zbase.constantsr   r   r   Zbase.contextr   Zcommon.compatr   r   r   Zcommon.constantsr   Z
common.urlr   r   r   r:   logr   ZIndexRecordr#   r'   r   r8   r8   r8   r9   <module>   s*   
 r