
    wBf<                    2   d Z ddlmZ ddlmZmZ ddlmZ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 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m Z m!Z! d
dl"m#Z#  G d de      Z$ G d de      Z% G d de      Z& G d dee      Z' e'd      Z( G d de      Z) G d de      Z* G d de      Z+ G d de      Z, G d  d!e      Z- G d" d#e      Z. G d$ d%e.      Z/ G d& d'e      Z0 G d( d)ee      Z1 G d* d+e      Z2 G d, d-e1      Z3 G d. d/e1      Z4y0)1a  Implements the data model for conda packages.

A PackageRecord is the record of a package present in a channel. A PackageCache is the record of a
downloaded and cached package. A PrefixRecord is the record of a package installed into a conda
environment.

Object inheritance:

.. autoapi-inheritance-diagram:: PackageRecord PackageCacheRecord PrefixRecord
   :top-classes: conda.models.records.PackageRecord
   :parts: 1
    )annotations)basenamejoin)dt_to_timestampisoparse   )	BooleanFieldComposableFieldDictSafeMixinEntity	EnumFieldIntegerField	ListFieldNumberFieldStringField)context)
isiterable)PathNotFoundError   )Channel)FileModeLinkType
NoarchTypePackageTypePathTypePlatform	MatchSpecc                       e Zd Z fdZ xZS )LinkTypeFieldc                    t        |t              r[|j                  dd      j                  dd      j                         }|dk(  rt        j
                  }n|dk(  rt        j                  }t        | !  |||      S )N- _hardsoft)	
isinstancestrreplacelowerr   hardlinksoftlinksuperboxselfinstanceinstance_typeval	__class__s       4lib/python3.12/site-packages/conda/models/records.pyr.   zLinkTypeField.box*   sj    c3++c2&..sB7==?Cf}''''w{8]C88    __name__
__module____qualname__r.   __classcell__r4   s   @r5   r    r    )   s    9 9r6   r    c                       e Zd Z fdZ xZS )NoarchFieldc                L    t         |   ||t        j                  |            S N)r-   r.   r   coercer/   s       r5   r.   zNoarchField.box5   s!    w{8]J4E4Ec4JKKr6   r7   r<   s   @r5   r>   r>   4   s    L Lr6   r>   c                  \     e Zd Z fdZed        Zed        Z fdZ fdZ fdZ	 xZ
S )TimestampFieldc                *    t         |   ddd       y )Nr   F)defaultrequireddefault_in_dumpr-   __init__r0   r4   s    r5   rI   zTimestampField.__init__:   s    UEJr6   c                "    | r| } | dkD  r| dz  } | S Nl   A i   r3   s    r5   _make_secondszTimestampField._make_seconds=   s&    C\! 
r6   c                "    | r| dk  r| dz  } | } | S rL   rM   rN   s    r5   _make_millisecondsz!TimestampField._make_millisecondsG   s     \!tC
r6   c                D    | j                  t        | 	  |||            S r@   )rO   r-   r.   r/   s       r5   r.   zTimestampField.boxO   s!    !!%'+hs"KLLr6   c           	     V    t        | j                  t        |   |||                  S r@   )intrQ   r-   dumpr/   s       r5   rU   zTimestampField.dumpR   s+    ##EGL=#$NO
 	
r6   c                    	 t         |   ||      S # t        $ rA 	 t        t	        t        |j                                    cY S # t        t        f$ r Y Y yw xY ww xY w)Nr   )r-   __get__AttributeErrorrT   r   r   date
ValueError)r0   r1   r2   r4   s      r5   rW   zTimestampField.__get__W   s]    	7?8];; 	?8HMM+BCDD"J/ 	s,    	A&AAAAAA)r8   r9   r:   rI   staticmethodrO   rQ   r.   rU   rW   r;   r<   s   @r5   rC   rC   9   sF    K    M

 r6   rC   c                  .    e Zd Z e       Z eed      Zy)LinkFrF   N)r8   r9   r:   r   sourcer    r   typerM   r6   r5   r]   r]   a   s    ]FE2Dr6   r]   r#   )r_   c                  .     e Zd Z fdZ fdZd Z xZS )_FeaturesFieldc                .    t        |   t        fi | y r@   )r-   rI   r(   )r0   kwargsr4   s     r5   rI   z_FeaturesField.__init__j   s    ''r6   c                    t        |t              r!|j                  dd      j                  d      }t	        d d |D        D              }t
        |   |||      S )N ,c              3  &   K   | ]	  }|s|  y wr@   rM   ).0fs     r5   	<genexpr>z%_FeaturesField.box.<locals>.<genexpr>p   s     ?!QA?s   c              3  <   K   | ]  }|j                           y wr@   )strip)ri   ffs     r5   rk   z%_FeaturesField.box.<locals>.<genexpr>p   s     9r
9s   )r'   r(   r)   splittupler-   r.   r/   s       r5   r.   z_FeaturesField.boxm   sQ    c3++c3'--c2C?9S9??w{8]C88r6   c                F    t        |      rdj                  |      S |xs dS )Nrf   rM   )r   r   r0   r1   r2   r3   s       r5   rU   z_FeaturesField.dumps   s!    c?88C= 9"r6   )r8   r9   r:   rI   r.   rU   r;   r<   s   @r5   rb   rb   i   s    (9r6   rb   c                  0     e Zd Zd fd	Zd Z fdZ xZS )ChannelFieldc                2    t         |   t        d|       y NF)rF   aliases)r-   rI   r   r0   rw   r4   s     r5   rI   zChannelField.__init__{   s    5'Br6   c                J    |rt        |      S |j                  }t        |      S r@   )r(   channelrr   s       r5   rU   zChannelField.dump~   s"    s8O""Cs8Or6   c                    	 t         |   ||      S # t        $ r+ |j                  }| j	                  ||t        |            cY S w xY wr@   )r-   rW   rX   urlunboxr   )r0   r1   r2   r|   r4   s       r5   rW   zChannelField.__get__   sK    	E7?8];; 	E,,C::hws|DD	Es    1AArM   )r8   r9   r:   rI   rU   rW   r;   r<   s   @r5   rt   rt   z   s    CE Er6   rt   c                  (     e Zd Z fdZ fdZ xZS )SubdirFieldc                &    t         |   d       y )NFr^   rH   rJ   s    r5   rI   zSubdirField.__init__   s    %(r6   c                
   	 t         |   ||      S # t        $ r 	 |j                  }n# t        $ r d }Y nw xY w|r(| j	                  ||t        |      j                        cY S 	 |j                  j                  |j                  }}n# t        $ r d\  }}Y nw xY w|r|s| j	                  ||d      cY S |r&d|v rd|v rdnd}| j	                  ||| d|       cY S | j	                  ||t        j                        cY S w xY w)N)NNnoarchx866432r"   )r-   rW   rX   r|   r}   r   subdirplatformnamearchr   )r0   r1   r2   r|   r   r   r4   s         r5   rW   zSubdirField.__get__   s   	K7?8];; 	Kll! zz(M73<;N;NOO,!)!2!2!7!7$! ,!+$,zz(M8DDD=#'4<4TDzz(MhZq;OPPzz(M7>>JJ'	KsZ    	D*D8D8+D&"B	D	BDBD6&D!DDr8   r9   r:   rI   rW   r;   r<   s   @r5   r   r      s    )K Kr6   r   c                  *     e Zd Zd fd	Z fdZ xZS )FilenameFieldc                (    t         |   d|       y rv   rH   rx   s     r5   rI   zFilenameField.__init__   s    %9r6   c                >   	 t         |   ||      S # t        $ r 	 |j                  }t	        |      j
                  }|s
t               n7# t        $ r+ |j                   d|j                   d|j                   }Y nw xY w|sJ | j                  |||      cY S w xY w)Nr"   )
r-   rW   rX   r|   r   package_filenamer   versionbuildr}   )r0   r1   r2   r|   fnr4   s        r5   rW   zFilenameField.__get__   s    	;7?8];; 		;LllS\22(** ! L a(8(8'98>>:JKLI2::hr::		;s2    	B-A
B1A?<B>A??BBr~   r   r<   s   @r5   r   r      s    :; ;r6   r   c                  (     e Zd Z fdZ fdZ xZS )PackageTypeFieldc                6    t         |   t        ddd d       y )NFTrF   nullablerE   rG   )r-   rI   r   rJ   s    r5   rI   zPackageTypeField.__init__   s$    ! 	 	
r6   c                   t         |   ||      }|w|j                  }|rit        j                  t
        j                  t        j                  t
        j                  i}|t        j                  |         }| j                  |||      }|S r@   )r-   rW   r   r   genericr   NOARCH_GENERICpythonNOARCH_PYTHONrA   r}   )r0   r1   r2   r3   
noarch_valtype_mapr4   s         r5   rW   zPackageTypeField.__get__   s{    goh6;!J&&(B(B%%{'@'@ z00<=jj=#>
r6   r   r<   s   @r5   r   r      s    
 r6   r   c                      e Zd Z e       Z edddd      Z eedd      Z e	dddd      Z
 ee      Zed        Zy)PathDataFTNr   rF   r   c                    | j                   S r@   )_pathr0   s    r5   pathzPathData.path   s     zzr6   )r8   r9   r:   r   r   prefix_placeholderr   r   	file_moder	   no_linkr   	path_typepropertyr   rM   r6   r5   r   r      s^    ME$tU (UTBItUG (#I r6   r   c                  ^    e Zd Z edd      Z edd      Z eedd      Z	 edd      Z
y)
PathDataV1FTr   N)r8   r9   r:   r   sha256r   size_in_bytesr   r(   inode_pathssha256_in_prefixrM   r6   r5   r   r      s5    %$7F %$?MC%$?K"EDAr6   r   c                  *    e Zd Z e       Z ee      Zy)	PathsDataN)r8   r9   r:   r   paths_versionr   r   pathsrM   r6   r5   r   r      s     NMhEr6   r   c                      e Zd ZU  e       Z e       Z ed      Z e       Z e	d      Z
 e       Z ed      Z edddd      Z edddd      Z eddd	      Z edddd      Z edddd      Zed
        Zed        Zd Zd Zd Zd Z edd      Z eedd      Z ee d      Z! ee d      Z" e#ddd      Z$ e#ddd      Z% e&e'dddd      Z( edddd      Z) edddd      Z* edddd      Z+ e,       Z-ed        Z. e/       Z0ed        Z1 ed      Z2 ed      Z3d Z4d Z5d Z6ed        Z7d Z8de9d<    fdZ: xZ;S ) PackageRecord)build_string)rw   )schannel)filenameNFT)rE   rF   r   rG   rF   r   rG   c                .    | j                   j                  S r@   )rz   canonical_namer   s    r5   r   zPackageRecord.schannel  s    ||***r6   c                r   	 | j                   S # t        $ r | j                  j                  | j                  | j
                  | j                  | j                  | j                  gx}| _         t        j                  r|j                  | j                         t        |      | _         | j                   cY S w xY wr@   )_PackageRecord__pkeyrX   rz   r   r   r   r   build_numberr   r   separate_format_cacheappendr   rp   )r0   r   s     r5   _pkeyzPackageRecord._pkey  s    	;; 	++		!!

$ FT[ ,,dgg&-DK;;	s    B%B65B6c                    	 | j                   S # t        $ r( t        | j                        | _         Y | j                   S w xY wr@   )_hashrX   hashr   r   s    r5   __hash__zPackageRecord.__hash__(  s:    	*:: 	*djj)DJzz	*s    #??c                4    | j                   |j                   k(  S r@   )r   )r0   others     r5   __eq__zPackageRecord.__eq__/  s    zzU[[((r6   c                    dj                  | j                  j                  | j                  rd| j                  z   nd| j                  | j
                  | j                        S )Nz{}{}::{}-{}-{}/r#   )formatrz   r   r   r   r   r   r   s    r5   dist_strzPackageRecord.dist_str2  sK    &&LL''#';;S4;;BIILLJJ
 	
r6   c           	        | j                   j                  | j                  | j                  | j                   j                  | j                         j                  d      d   | j                  | j                  | j                  dS )N:)base_urlr   r   rz   	dist_namer   r   r   )	rz   r   r   r   r   r   ro   r   r   r   s    r5   dist_fields_dumpzPackageRecord.dist_fields_dump;  sd    -- -- JJ||((..s3B7II||	
 		
r6   r   rM   )rE   )rF   rE   rG   r   c                B    | j                   t        j                         v S r@   )package_typer   unmanageable_package_typesr   s    r5   is_unmanageablezPackageRecord.is_unmanageable_  s      K$J$J$LLLr6   c                2   ddl m}  |j                  | j                        D ci c]  }|j                  | }}| j
                  xs dD ]-  } ||      } |||j                  |v      ||j                  <   / t        |j                               S c c}w )Nr   r   rM   )optional)
match_specr   mergedependsr   
constrainsrp   values)r0   r   msresultspecs        r5   combined_dependszPackageRecord.combined_dependse  s    )(7	(EF""''2+FFOO)r 	ND4B'bggV6KMF277O	N V]]_%%	 Gs   Br^   c           	         | j                   j                   d| j                   d| j                   d| j                   d| j
                   	S )Nr   ::z===)rz   r   r   r   r   r   r   s    r5   __str__zPackageRecord.__str__{  sE    ,,--.a}BtyykDLL>YZ[_[e[eZfggr6   c                    t        | j                  | j                  | j                  | j                  | j
                        S )N)rz   r   r   r   r   )r   rz   r   r   r   r   r   s    r5   to_match_speczPackageRecord.to_match_spec~  s2    LL;;LL**
 	
r6   c                D    t        | j                  | j                        S )N)r   r   )r   r   r   r   s    r5   to_simple_match_specz"PackageRecord.to_simple_match_spec  s    LL
 	
r6   c                     d| j                   z   S )Nzglobal:)r   r   s    r5   namekeyzPackageRecord.namekey  s    499$$r6   c           	         | j                   j                   d| j                   d| j                   d| j                   d| j                   	S )Nr   r   r"   )rz   r   r   r   r   r   s    r5   	record_idzPackageRecord.record_id  sE    
 ,,##$Adkk]"TYYKqaPTPZPZ|\\r6   zset[str]metadatac                B    t        |   |i | t               | _        y r@   )r-   rI   setr   )r0   argsrd   r4   s      r5   rI   zPackageRecord.__init__  s    $)&)r6   )<r8   r9   r:   r   r   r   r   r   r   rt   rz   r   r   r   r   md5legacy_bz2_md5legacy_bz2_sizer|   r   r   r   r   r   r   r   r   r   r   r   r   r   r(   r   r   rb   track_featuresfeaturesr>   r   r   preferred_envlicenselicense_familyr   r   r   rC   	timestampr   rY   sizer   r   r   r   r   __annotations__rI   r;   r<   s   @r5   r   r      s   =DmG 12E>L
 =1G]F	}	-B
utUC !utUN #EDRWXO
utUC utUF + +  $)


 5DEDAHR(G3+J#UBPUVNub%PHUT4QVF  tUM tUG !tUN $%LM M  I& &$ &D'Dh

 % %]  r6   r   c                  (     e Zd Z fdZ fdZ xZS )Md5Fieldc                (    t         |   dd       y )NFTr   rH   rJ   s    r5   rI   zMd5Field.__init__  s    %$7r6   c                    	 t         |   ||      S # t        $ r*}	 |j                         cY d }~S # t        $ r |w xY wd }~ww xY wr@   )r-   rW   rX   _calculate_md5sumr   )r0   r1   r2   er4   s       r5   rW   zMd5Field.__get__  sP    	7?8];; 	1133$ 	s!    	A2A>AAr   r<   s   @r5   r   r     s    8 r6   r   c                  l    e Zd Z e       Z e       Z e       Zed        Z	ed        Z
ed        Zd Zy)PackageCacheRecordc                2    ddl m}  || j                        S )Nr   isfile)gateways.disk.readr	  package_tarball_full_path)r0   r	  s     r5   
is_fetchedzPackageCacheRecord.is_fetched  s    /d4455r6   c                d    ddl m}m} | j                  } ||      xr  |t	        |dd            S )Nr   )isdirr	  infoz
index.json)r
  r  r	  extracted_package_dirr   )r0   r  r	  epds       r5   is_extractedzPackageCacheRecord.is_extracted  s-    6((SzEfT#v|%DEEr6   c                ,    t        | j                        S r@   )r   r  r   s    r5   tarball_basenamez#PackageCacheRecord.tarball_basename  s    6677r6   c                    t        | dd       }|r|S ddlm}  || j                        r(ddlm}  || j                  d      }t        | d|       |S y )N_memoized_md5r   r  r   )compute_sumr   )getattros.pathr	  r  r
  r  setattr)r0   memoized_md5r	  r  md5sums        r5   r  z$PackageCacheRecord._calculate_md5sum  sU    t_d;"$0018 !?!?GFD/62M 2r6   N)r8   r9   r:   r   r  r  r   r   r   r  r  r  r  rM   r6   r5   r  r    sZ     +'M
*C6 6
 F F 8 8r6   r  c                      e Zd Z ed      Z ed      Z eedd      Z e	e
ddd      Z e	ed      Z ed      Z edd      Zy)	PrefixRecordFr^   rM   )rE   rF   Tr   r   N)r8   r9   r:   r   r  r  r   r(   filesr
   r   
paths_datar]   linkrequested_specauthrM   r6   r5   r  r    sa     +U ;'7c26E ED%J 4%0D !%0N 5Dr6   r  N)5__doc__
__future__r   r  r   r   boltons.timeutilsr   r   auxlib.entityr	   r
   r   r   r   r   r   r   r   base.contextr   common.compatr   
exceptionsr   rz   r   enumsr   r   r   r   r   r   r   r   r    r>   rC   r]   
EMPTY_LINKrb   rt   r   r   r   r   r   r   r   r   r  r  rM   r6   r5   <module>r-     s   # " 7
 
 
 # & *  R R !9I 9L) L
%[ %P3=& 3
 _
Y "E? E&K+ K:;K ;&y 2v "B B   fM6 fR{ # #L6= 6r6   