B
    lz]+                 @   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+dd Z,dd Z-e e+G dd de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	text_typewith_metaclass)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.7/site-packages/conda/models/dist.pyr3      s&    








zDistType.__call__)__name__
__module____qualname__r3   __classcell__r9   r9   )r8   r:   r$      s   r$   c             C   s.   x(t D ] }| |r| d t|  } qW | S )N)r   endswithr'   )original_distextr9   r9   r:   strip_extension7   s    

rB   c             C   s   t | }|| t|d  fS )N)rB   r'   )r@   strippedr9   r9   r:   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#   )r2   r(   __init__)
selfr-   r"   r   r   r    r!   rG   rH   r#   )r8   r9   r:   rI   T   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   r9   r9   r:   to_package_ref`   s    zDist.to_package_refc             C   s   |   S )N)__str__)rJ   r9   r9   r:   	full_namej   s    zDist.full_namec             C   s   | j S )N)r    )rJ   r9   r9   r:   rL   n   s    z
Dist.buildc             C   s   | j S )N)rH   )rJ   r9   r9   r:   rK   r   s    zDist.subdirc             C   s   | j pt| jfS )N)r-   r   r"   )rJ   r9   r9   r:   pairv   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   partsr9   r9   r:   quadz   s    z	Dist.quadc             C   s   | j rd| j | jf S | jS )Nz%s::%s)r-   r"   )rJ   r9   r9   r:   rN      s    zDist.__str__c             C   s   | j dS )N@)r"   r?   )rJ   r9   r9   r:   is_feature_package   s    zDist.is_feature_packagec             C   s   t | jo| jS )N)boolrG   rH   )rJ   r9   r9   r:   
is_channel   s    zDist.is_channelc             C   s   | j r| jS | j| j S d S )N)rW   r"   r#   )rJ   	extensionr9   r9   r:   to_filename   s    zDist.to_filenamec             C   s   d | jd d S )N    )joinrU   )rJ   r9   r9   r:   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]   z%s::%s)Z
match_specr`   r^   rU   r-   )rJ   r`   baser9   r9   r:   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 )NrV   rR   r   )r-   r   r   r    r!   r"   z8(?:([^\s\[\]]+)::)?([^\s\[\]]+)(?:\[([a-zA-Z0-9_-]+)\])?)r-   r   r   r    r!   r"   r#   )r   r   r   r0   r?   researchgroupsrD   r   parse_dist_namer   r   r    r!   )	r4   stringr%   Z	REGEX_STRr-   r@   Zw_f_dr#   dist_detailsr9   r9   r:   r+      s2    


zDist.from_stringc             C   s   | }yt | } 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||||
||S    td| Y nX d S )Nz::r   /rQ   r   r   r]   rR   c             S   s   |   S )N)isdigit)xr9   r9   r:   <lambda>       z&Dist.parse_dist_name.<locals>.<lambda>_0z*dist_name is not a valid conda package: %s)	r   rD   rS   r'   r^   filterintr   r   )rh   Zoriginal_stringZno_fmt_stringr#   r"   rT   r   r   r    Zbuild_number_as_stringr!   r9   r9   r:   rg      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 )N)r?   ).0rA   )r1   r9   r:   	<genexpr>   s    z Dist.from_url.<locals>.<genexpr>z::zurl '%s' is not a conda packager   r   rk   )	r-   r   r   r    r!   r"   rG   rH   r#   )r   AssertionErroranyr   r   rg   rS   r   rK   splitr   r	   r   Zknown_subdirsr.   r   r   r   r    r!   r"   r#   )r4   r1   ri   Zurl_no_tarballrH   rG   r-   r9   )r1   r:   r0      s,    
zDist.from_urlc             C   s8   | j s
d S | j| j }| jr,t| j | j|S t| j |S )N)rG   r"   r#   rH   r   )rJ   filenamer9   r9   r:   to_url   s
    zDist.to_urlc             C   s   | j | jfS )N)r-   r"   )rJ   r9   r9   r:   __key__   s    zDist.__key__c             C   s    t || jst|  | k S )N)r*   r8   rv   r{   )rJ   otherr9   r9   r:   __lt__  s    zDist.__lt__c             C   s    t || jst|  | kS )N)r*   r8   rv   r{   )rJ   r|   r9   r9   r:   __gt__  s    zDist.__gt__c             C   s    t || jst|  | kS )N)r*   r8   rv   r{   )rJ   r|   r9   r9   r:   __le__
  s    zDist.__le__c             C   s    t || jst|  | kS )N)r*   r8   rv   r{   )rJ   r|   r9   r9   r:   __ge__  s    zDist.__ge__c             C   s   t |  | jfS )N)hashr{   r#   )rJ   r9   r9   r:   __hash__  s    zDist.__hash__c             C   s   t || jo|  | kS )N)r*   r8   r{   )rJ   r|   r9   r9   r:   __eq__  s    zDist.__eq__c             C   s   |  | S )N)r   )rJ   r|   r9   r9   r:   __ne__  s    zDist.__ne__rj   c             C   s&   |dkst | jr| j| jgS | jgS )Nz::)rv   r-   r"   )rJ   sepmaxsplitr9   r9   r:   rx     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 )NrQ   r   z%s::%sr   r   )rv   r-   rU   )rJ   r   r   r   r9   r9   r:   rS   #  s    $zDist.rsplitc             C   s   | j |S )N)r"   
startswith)rJ   matchr9   r9   r:   r   )  s    zDist.startswithc             C   s   t t|}||  kS )N)rB   r   rN   )rJ   itemr9   r9   r:   __contains__,  s    zDist.__contains__c             C   s   |   S )N)r[   )rJ   r9   r9   r:   r,   0  s    zDist.fn)NNNNNNNrF   )N)Nrj   )Nrj   )3r;   r<   r=   r)   Z_lazy_validater   r-   r"   r   r#   r   r    r   r!   rG   rH   rI   rM   propertyrO   rL   rK   rP   rU   rN   rW   rY   r[   r_   rc   classmethodr   r+   staticmethodrg   r0   rz   r{   r}   r~   r   r   r   r   r   rx   rS   r   r   r,   r>   r9   r9   )r8   r:   r(   C   sV   





 

%

r(   c             C   sD   t | } d| kr"| dd\}} nt}| dd\}}}||||fS )Nz::r   rQ   r   )rB   rx   r   rS   )Zdist_strZchannel_strr   r   rL   r9   r9   r:   dist_str_to_quad5  s    r   )0Z
__future__r   r   r   r   collectionsr   Zloggingr   rd   r-   r	   Zpackage_infor
   Zrecordsr   rR   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$   rB   rD   r(   r   r9   r9   r9   r:   <module>   s.   
 r