a
    vbf>                     @   s  d Z ddlmZmZmZmZ ddlmZmZ ddl	m
Z
 ddlmZmZmZmZmZmZ ddlmZ ddlmZ d	d
lmZmZmZmZmZmZmZmZmZ d	dlm Z m!Z! d	dl"m#Z# d	dl$m%Z% d	dl&m'Z' G dd deZ(G dd deZ)G dd deZ*G dd deeZ+e+ddZ,G dd deZ-G dd deZ.G dd deZ/G dd  d eZ0G d!d" d"eZ1G d#d$ d$eZ2G d%d& d&e2Z3G d'd( d(eZ4G d)d* d*eeZ5G d+d, d,eZ6G d-d. d.e5Z7G d/d0 d0e5Z8d1S )2a>  
                         +---------------+
                         | PackageRecord |
                         +--+---------+--+
+--------------------+      |         |      +--------------+
| PackageCacheRecord <------+         +------> PrefixRecord |
+--------------------+                       +--------------+


    )absolute_importdivisionprint_functionunicode_literals)basenamejoin   )Channel)FileModeLinkType
NoarchTypePackageTypePathTypePlatform)MetadataSignatureStatus	MatchSpec   )	BooleanFieldComposableFieldDictSafeMixinEntity	EnumFieldIntegerField	ListFieldNumberFieldStringField)dt_to_timestampisoparse)context)
isiterable)PathNotFoundErrorc                       s   e Zd Z fddZ  ZS )LinkTypeFieldc                    sT   t |tr@|dddd }|dkr2tj}n|dkr@tj}tt| 	|||S )N- _ZhardZsoft)

isinstancestrreplacelowerr   ZhardlinkZsoftlinksuperr"   boxselfinstanceinstance_typeval	__class__ 3lib/python3.9/site-packages/conda/models/records.pyr+   (   s    
zLinkTypeField.box__name__
__module____qualname__r+   __classcell__r3   r3   r1   r4   r"   '   s   r"   c                       s   e Zd Z fddZ  ZS )NoarchFieldc                    s   t t| ||t|S N)r*   r:   r+   r   coercer,   r1   r3   r4   r+   3   s    zNoarchField.boxr5   r3   r3   r1   r4   r:   2   s   r:   c                       sX   e Zd Z fddZedd Zedd Z fddZ fd	d
Z fddZ	  Z
S )TimestampFieldc                    s   t t| jdddd d S )Nr   F)defaultrequireddefault_in_dump)r*   r=   __init__r-   r1   r3   r4   rA   9   s    zTimestampField.__init__c                 C   s   | r| } | dkr| d } | S Nl   A i  r3   r0   r3   r3   r4   _make_seconds<   s
    zTimestampField._make_secondsc                 C   s   | r| dk r| d9 } | } | S rC   r3   rD   r3   r3   r4   _make_millisecondsD   s
    z!TimestampField._make_millisecondsc                    s   |  tt| |||S r;   )rE   r*   r=   r+   r,   r1   r3   r4   r+   L   s    zTimestampField.boxc                    s   t | tt| |||S r;   )intrF   r*   r=   dumpr,   r1   r3   r4   rH   Q   s    zTimestampField.dumpc                    s`   zt t| ||W S  tyZ   zttt|jW  Y S  ttfyT   Y Y dS 0 Y n0 d S )Nr   )	r*   r=   __get__AttributeErrorrG   r   r   date
ValueError)r-   r.   r/   r1   r3   r4   rI   V   s    zTimestampField.__get__)r6   r7   r8   rA   staticmethodrE   rF   r+   rH   rI   r9   r3   r3   r1   r4   r=   7   s   

r=   c                   @   s   e Zd Ze ZeeddZdS )LinkFr?   N)r6   r7   r8   r   sourcer"   r   typer3   r3   r3   r4   rN   `   s   rN   r$   )rP   c                       s0   e Zd Z fddZ fddZdd Z  ZS )_FeaturesFieldc                    s   t t| jtfi | d S r;   )r*   rR   rA   r'   )r-   kwargsr1   r3   r4   rA   j   s    z_FeaturesField.__init__c                    sL   t |tr|ddd}tdd dd |D D }tt| |||S )N ,c                 s   s   | ]}|r|V  qd S r;   r3   ).0fr3   r3   r4   	<genexpr>p       z%_FeaturesField.box.<locals>.<genexpr>c                 s   s   | ]}|  V  qd S r;   )strip)rV   Zffr3   r3   r4   rX   p   rY   )r&   r'   r(   splittupler*   rR   r+   r,   r1   r3   r4   r+   m   s    
z_FeaturesField.boxc                 C   s   t |rd|S |pdS d S )NrT   r3   )r    r   r,   r3   r3   r4   rH   s   s    
z_FeaturesField.dump)r6   r7   r8   rA   r+   rH   r9   r3   r3   r1   r4   rR   h   s   rR   c                       s2   e Zd Zd fdd	Zdd Z fddZ  ZS )	ChannelFieldr3   c                    s   t t| jtd|d d S NF)r?   aliases)r*   r]   rA   r	   r-   r_   r1   r3   r4   rA   |   s    zChannelField.__init__c                 C   s   |rt |S |j}t |S d S r;   )r'   channelr,   r3   r3   r4   rH      s    zChannelField.dumpc              	      sD   zt t| ||W S  ty>   |j}| ||t| Y S 0 d S r;   )r*   r]   rI   rJ   urlunboxr	   )r-   r.   r/   rb   r1   r3   r4   rI      s
    zChannelField.__get__)r3   )r6   r7   r8   rA   rH   rI   r9   r3   r3   r1   r4   r]   z   s   r]   c                       s(   e Zd Z fddZ fddZ  ZS )SubdirFieldc                    s   t t| jdd d S )NFrO   )r*   rd   rA   rB   r1   r3   r4   rA      s    zSubdirField.__init__c                    s   zt t| ||W S  t y   z
|j}W n tyD   d }Y n0 |rb| ||t|j Y S z|jj	|j
 }}W n ty   d\}}Y n0 |r|s| ||d Y S |rd|v rd|v rdnd}| ||d||f  Y S | ||tj Y S Y n0 d S )N)NNnoarchZx86Z64Z32z%s-%s)r*   rd   rI   rJ   rb   rc   r	   subdirplatformnamearchr   )r-   r.   r/   rb   rg   ri   r1   r3   r4   rI      s(    

zSubdirField.__get__r6   r7   r8   rA   rI   r9   r3   r3   r1   r4   rd      s   rd   c                       s*   e Zd Zd fdd	Z fddZ  ZS )FilenameFieldr3   c                    s   t t| jd|d d S r^   )r*   rk   rA   r`   r1   r3   r4   rA      s    zFilenameField.__init__c                    s   zt t| ||W S  ty   z|j}t|j}|s>t W n& tyf   d|j|j|j	f }Y n0 |spJ | 
||| Y S 0 d S )Nz%s-%s-%s)r*   rk   rI   rJ   rb   r	   Zpackage_filenamerh   versionbuildrc   )r-   r.   r/   rb   fnr1   r3   r4   rI      s    

zFilenameField.__get__)r3   rj   r3   r3   r1   r4   rk      s   rk   c                       s(   e Zd Z fddZ fddZ  ZS )PackageTypeFieldc                    s   t t| jtddd dd d S )NFTr?   nullabler>   r@   )r*   ro   rA   r   rB   r1   r3   r4   rA      s    zPackageTypeField.__init__c                    sX   t t| ||}|d u rT|j}|rTtjtjtjtj	i}|t
| }| |||}|S r;   )r*   ro   rI   re   r   Zgenericr   ZNOARCH_GENERICZpythonZNOARCH_PYTHONr<   rc   )r-   r.   r/   r0   Z
noarch_valZtype_mapr1   r3   r4   rI      s    zPackageTypeField.__get__rj   r3   r3   r1   r4   ro      s   ro   c                   @   sT   e Zd Ze ZedddddZeedddZe	dddddZ
eeZedd ZdS )PathDataFTNrp   r?   rq   c                 C   s   | j S r;   )_pathrB   r3   r3   r4   path   s    zPathData.path)r6   r7   r8   r   rt   Zprefix_placeholderr   r
   Z	file_moder   Zno_linkr   	path_typepropertyru   r3   r3   r3   r4   rr      s   rr   c                   @   s>   e Zd ZedddZedddZeedddZ	edddZ
dS )
PathDataV1FTrs   N)r6   r7   r8   r   sha256r   Zsize_in_bytesr   r'   Zinode_pathsZsha256_in_prefixr3   r3   r3   r4   rx      s   rx   c                   @   s   e Zd Ze ZeeZdS )	PathsDataN)r6   r7   r8   r   Zpaths_versionr   rr   pathsr3   r3   r3   r4   rz      s   rz   c                   @   s  e Zd Ze Ze ZeddZe Ze	ddZ
e ZeddZedddddZedddddZedddd	ZedddddZedddddZeedd
Zedd Zedd Zdd Zdd Zdd Zdd ZedddZeedddZ e!e"ddZ#e!e"ddZ$e%ddddZ&e%ddddZ'e(e)dddddZ*edddddZ+edddddZ,edddddZ-e. Z/edd Z0e1 Z2edd Z3edd
Z4edd
Z5d d! Z6d"d# Z7d$d% Z8ed&d' Z9d(d) Z:dS )*PackageRecord)build_string)r_   )schannel)filenameNFT)r>   r?   rq   r@   r?   rq   r@   rO   c                 C   s   | j jS r;   )ra   canonical_namerB   r3   r3   r4   r~     s    zPackageRecord.schannelc              	   C   sf   z| j W S  ty`   | jj| j| j| j| j| jg }| _ t	j
rL|| j t|| _ | j  Y S 0 d S r;   )_PackageRecord__pkeyrJ   ra   r   rf   rh   rl   build_numberrm   r   Zseparate_format_cacheappendrn   r\   )r-   r   r3   r3   r4   _pkey  s    

zPackageRecord._pkeyc                 C   s.   z| j W S  ty&   t| j| _ Y n0 | j S r;   )_hashrJ   hashr   rB   r3   r3   r4   __hash__  s
    zPackageRecord.__hash__c                 C   s   | j |j kS r;   )r   )r-   otherr3   r3   r4   __eq__"  s    zPackageRecord.__eq__c                 C   s,   d| j j| jrd| j nd| j| j| jf S )Nz%s%s::%s-%s-%s/r$   ra   r   rf   rh   rl   rm   rB   r3   r3   r4   dist_str%  s    zPackageRecord.dist_strc              	   C   s6   | j j| j| j| j j|  dd | j| j| jdS )N:)base_urlr   r}   ra   Z	dist_namerh   rg   rl   )	ra   r   r   rm   rh   r   r[   rf   rl   rB   r3   r3   r4   dist_fields_dump-  s    zPackageRecord.dist_fields_dumprs   r3   )r>   )r?   r>   r@   rp   c                 C   s   | j t v S r;   )package_typer   Zunmanageable_package_typesrB   r3   r3   r4   is_unmanageableK  s    zPackageRecord.is_unmanageablec                 C   s^   ddl m} dd || jD }| jp*dD ]$}||}|||j|vd||j< q,t| S )Nr   r   c                 S   s   i | ]}|j |qS r3   rh   )rV   msr3   r3   r4   
<dictcomp>T  rY   z2PackageRecord.combined_depends.<locals>.<dictcomp>r3   )Zoptional)
match_specr   mergedepends
constrainsrh   r\   values)r-   r   resultspecr   r3   r3   r4   combined_dependsQ  s    zPackageRecord.combined_dependsc                 C   s   d| j j| j| j| j| jf S )Nz%s/%s::%s==%s=%sr   rB   r3   r3   r4   __str__f  s    zPackageRecord.__str__c                 C   s   t | j| j| j| j| jdS )N)ra   rf   rh   rl   rm   )r   ra   rf   rh   rl   rm   rB   r3   r3   r4   to_match_specj  s    zPackageRecord.to_match_specc                 C   s   t | j| jdS )N)rh   rl   )r   rh   rl   rB   r3   r3   r4   to_simple_match_specs  s    z"PackageRecord.to_simple_match_specc                 C   s
   d| j  S )Nzglobal:r   rB   r3   r3   r4   namekeyy  s    zPackageRecord.namekeyc                 C   s   d| j j| j| j| j| jf S )Nz%s/%s::%s-%s-%s)ra   rh   rf   rl   rm   rB   r3   r3   r4   	record_id}  s    zPackageRecord.record_id);r6   r7   r8   r   rh   rl   rm   r   r   r]   ra   rd   rf   rk   rn   md5Zlegacy_bz2_md5Zlegacy_bz2_sizerb   ry   r   r   Zmetadata_signature_statusrw   r~   r   r   r   r   r   ri   r   rg   r   r'   r   r   rR   Ztrack_featuresZfeaturesr:   r   re   Zpreferred_envlicenseZlicense_familyro   r   r   r=   Z	timestampr   rK   sizer   r   r   r   r   r3   r3   r3   r4   r|      sf   









	
r|   c                       s(   e Zd Z fddZ fddZ  ZS )Md5Fieldc                    s   t t| jddd d S )NFTrs   )r*   r   rA   rB   r1   r3   r4   rA     s    zMd5Field.__init__c                    sl   zt t| ||W S  tyf } z:z| W W  Y d }~S  tyP   |Y n0 W Y d }~n
d }~0 0 d S r;   )r*   r   rI   rJ   _calculate_md5sumr!   )r-   r.   r/   er1   r3   r4   rI     s    zMd5Field.__get__rj   r3   r3   r1   r4   r     s   r   c                   @   sJ   e Zd Ze Ze Ze Zedd Z	edd Z
edd Zdd Zd	S )
PackageCacheRecordc                 C   s   ddl m} || jS )Nr   isfile)gateways.disk.readr   package_tarball_full_path)r-   r   r3   r3   r4   
is_fetched  s    zPackageCacheRecord.is_fetchedc                 C   s.   ddl m}m} | j}||o,|t|ddS )Nr   )isdirr   infoz
index.json)r   r   r   extracted_package_dirr   )r-   r   r   Zepdr3   r3   r4   is_extracted  s    zPackageCacheRecord.is_extractedc                 C   s
   t | jS r;   )r   r   rB   r3   r3   r4   tarball_basename  s    z#PackageCacheRecord.tarball_basenamec                 C   sT   t | dd }|r|S ddlm} || jrPddlm} || j}t| d| |S d S )NZ_memoized_md5r   r   r   )compute_md5sum)getattros.pathr   r   r   r   setattr)r-   Zmemoized_md5r   r   Zmd5sumr3   r3   r4   r     s    

z$PackageCacheRecord._calculate_md5sumN)r6   r7   r8   r   r   r   r   r   rw   r   r   r   r   r3   r3   r3   r4   r     s   


r   c                   @   s`   e Zd ZeddZeddZeedddZe	e
ddddZe	eddZeddZedddZdS )	PrefixRecordFrO   r3   )r>   r?   Tr   rs   N)r6   r7   r8   r   r   r   r   r'   filesr   rz   Z
paths_datarN   linkZrequested_specZauthr3   r3   r3   r4   r     s   


r   N)9__doc__Z
__future__r   r   r   r   r   r   r   ra   r	   Zenumsr
   r   r   r   r   r   r   r   r   Zauxlib.entityr   r   r   r   r   r   r   r   r   Z_vendor.boltons.timeutilsr   r   Zbase.contextr   Zcommon.compatr    
exceptionsr!   r"   r:   r=   rN   Z
EMPTY_LINKrR   r]   rd   rk   ro   rr   rx   rz   r|   r   r   r   r3   r3   r3   r4   <module>   s:   
 ,)
	 #