
    <Bh                        S r SSKJr  SSKrSSKrSSKrSSKJr  SSKJ	r	  SSK
Jr  SSKJr  SSKJr  SS	KJr  SS
KJrJrJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSK J!r!  SSK"J#r#  SSK$J%r%  SSK&J'r'J(r(J)r)  SSK*J+r+  SSK,J-r-J.r.  SSK/J0r0J1r1  SSK2J3r3J4r4J5r5  SSK6J7r7  SSK8J9r9J:r:  \(       a  SSKJ;r;  \" \<5      r=S r>S r?S/S jr@S  rAS! rBS" rCS# rDS$ rES% rFS& rGS' rHS( rIS) rJ\%" S*S+S,S-9S. 5       rKg)0z@Disk utility functions for reading and processing file contents.    )annotationsN)	b64encode)
namedtuple)ENOENT)partial)chain)	getLogger)isdirisfilejoin)Path)TYPE_CHECKING   )first)shlex_split_unicode)dals)PREFIX_PLACEHOLDER)	open_utf8)
deprecated)CondaUpgradeErrorCondaVerificationErrorPathNotFoundError)Channel)FileModePathType)PackageInfoPackageMetadata)PathData
PathDataV1	PathsData   )TemporaryDirectory)islinklexists)Literalc                L    [        S [        R                  " U 5      5       5      $ )Nc              3  8   #    U  H  oR                   v   M     g 7fN)name).0entrys     8lib/python3.13/site-packages/conda/gateways/disk/read.py	<genexpr><lambda>.<locals>.<genexpr>'   s     ?   )listosscandir)ds    r,   <lambda>r4   '   s    D?A??    c              #  (  #     [        U 5       nU H6  nUR                  5       nU(       a  UR                  S5      (       a  M2  Uv   M8     SSS5        g! , (       d  f       g= f! [         a  nUR                  [
        :X  a   SnAge SnAff = f7f)zGenerator function for lines in file.  Empty generator if path does not exist.

Args:
    path (str): path to file

Returns:
    iterator: each line in file, not starting with '#'

#N)r   strip
startswithOSErrorerrnor   )pathfhlinees       r,   yield_linesr@   *   sm     t_zz|ts33
	  __  77f	sW   BA& =AA& B
A#A& "B#A& &
B0B
B	B

BBc                   [        U 5      n U R                  5       (       d  [        U 5      e[        R                  " U5      nU R                  S5       n[        [        UR                  S5      S5       H  nUR                  U5        M     S S S 5        UR                  5       $ ! , (       d  f       UR                  5       $ = f)Nrbi    r5   )r   is_filer   hashlibnewopeniterr   readupdate	hexdigest)r<   algohasherr=   chunks        r,   compute_sumrN   B   s    :D<<>>%% [[F	4B'"''40#6EMM%  7 
  
 s   9B$$
Cc                    UR                   n[        U5      n[        U5      n[        U5      n[	        UUR
                  [        U R                  =(       d    U R                  5      U UR                  UUUS9$ )N)extracted_package_dirpackage_tarball_full_pathchannelrepodata_recordurlicondatapackage_metadata
paths_data)
rP   read_icondataread_package_metadataread_paths_jsonr   rQ   r   channel_namerR   rT   )recordpackage_cache_recordepdrU   rV   rW   s         r,   read_package_infor_   T   sq    

4
4CS!H,S1 %J!"6"P"P++=v~~> $$)	 	r5   c                    [        [        U SS5      5       n[        R                  " U5      sS S S 5        $ ! , (       d  f       g = f)Ninfo
index.jsonr   r   jsonloadextracted_package_directoryfis     r,   read_index_jsonri   f   s.    	43V\J	Kryy} 
L	K	K	   7
Ac                   SS K n[        5        nUR                  R                  XS5        [	        [        USS5      5       n[        R                  " U5      nS S S 5        S S S 5        W$ ! , (       d  f       N= f! , (       d  f       W$ = f)Nr   ra   rb   )conda_package_handling.apir"   apiextractr   r   rd   re   )rQ   conda_package_handlingtmpdirf	json_datas        r,   read_index_json_from_tarballrs   k   sp    %		""**+DfUtFFL9:a		!I ; 
  ;: 
	 s#   3A<A+A<+
A9	5A<<
Bc                    [        [        U SS5      5       n[        R                  " U5      sS S S 5        $ ! , (       d  f       g = f)Nra   zrepodata_record.jsonrc   rf   s     r,   read_repodata_jsonru   u   s6    	(&2HI
	yy}
 
 
rj   c                    [        U SS5      n[        U5      (       a?  [        US5       nUR                  5       nS S S 5        [	        W5      R                  S5      $ g ! , (       d  f       N)= f)Nra   zicon.pngrB   zutf-8)r   r   r   rH   r   decode)rg   icon_file_pathrq   datas       r,   rX   rX   |   sY    5vzJNn~t,668D -%%g..	 -,s   A
A,c                F  ^  U 4S jn[        U" 5       [        S9nU(       d  g [        U5       n[        R                  " UR                  5       5      nUR                  S5      S:w  a  [        [        S5      5      e S S S 5        [        S0 WD6nU$ ! , (       d  f       N= f)Nc               3  J   >#    [        T SS5      v   [        T SS5      v   g 7f)Nra   z	link.jsonzpackage_metadata.json)r   )rg   s   r,   _paths%read_package_metadata.<locals>._paths   s'     .DD.8OPPs    #)keypackage_metadata_versionr!   z
                The current version of conda is too old to install this package. (This version
                only supports link.json schema version 1.)  Please update conda to install
                this package.
                 )
r   r   r   rd   loadsrH   getr   r   r   )rg   r|   r<   rq   ry   rV   s   `     r,   rY   rY      s    Q v&Dt_::affh'Dxx23q8'  9  +2T2 _s   AB
B c                  ^ ^^^	 [        T S5      m[        TS5      n[        U5      (       ah  [        U5       n[        R                  " U5      nS S S 5        WR                  S5      S:w  a  [        [        S5      5      e[        SS US   5       S9nU$ [        [        TS	5      5      m[        T5      m	U UUU	4S
 jn[        U" 5       5      n[        SUS9nU$ ! , (       d  f       N= f)Nra   z
paths.jsonpaths_versionr!   z
            The current version of conda is too old to install this package. (This version
            only supports paths.json schema version 1.)  Please update conda to install
            this package.c              3  8   #    U  H  n[        S0 UD6v   M     g 7f)Nr   )r   )r*   rq   s     r,   r-   "read_paths_json.<locals>.<genexpr>   s     :Mq:??Mr/   paths)r   r   
has_prefixc               3  p  >#    [        TS5      n S S [        U 5      5       5        H  nSU0nUTR                  5       ;   a  TU   S   US'   TU   S   US'   UT;   a  S	US
'   [        [        TU5      5      (       a  [        R
                  US'   O[        R                  US'   [        S0 UD6v   M     g 7f)Nfilesc              3  6   #    U  H  o(       d  M  Uv   M     g 7fr(   r   )r*   lns     r,   r-   ;read_paths_json.<locals>.read_files_file.<locals>.<genexpr>   s      OrSUOs   
	c              3  @   #    U  H  oR                  5       v   M     g 7fr(   r8   )r*   r>   s     r,   r-   r      s     O7Ntjjll7Ns   _pathr   prefix_placeholderr!   	file_modeTno_link	path_typer   )r   r@   keysr#   r   softlinkhardlinkr   )
files_pathrq   	path_inforg   has_prefix_filesinfo_dirr   s      r,   read_files_file(read_paths_json.<locals>.read_files_file   s     h0JO{:7NO %aL	(--//6Fq6I!6LI23-=a-@-CIk*<+/Ii($:A>??-5->->Ik*-5->->Ik*+++s   B3B6r   )r   r   r   rd   re   r   r   r   r    read_has_prefixread_no_linktuple)
rg   paths_json_path
paths_jsonry   rW   r   r   r   r   r   s
   `      @@@r,   rZ   rZ      s    /8H8\2Oo':99Z(D (88O$)#  :DM:

< 3 +4,+GHx(	, 	," o'(

 S ('s   C
C(c                   ^ ^^ [        SS5      mUU 4S jmU4S j[        T 5      5       nUVs0 s H%  o"R                  UR                  UR                  4_M'     sn$ s  snf )zReads `has_prefix` file and return dict mapping filepaths to tuples(placeholder, FileMode).

A line in `has_prefix` contains one of:
  * filepath
  * placeholder mode filepath

Mode values are one of:
  * text
  * binary
ParseResult)placeholderfilemodefilepathc                  > [        S [        U SS95       5      n[        U5      S:X  a  T" [        [        R
                  US   5      $ [        U5      S:X  a  T" US   [	        US   5      US   5      $ [        ST 35      e)	Nc              3  B   #    U  H  oR                  S 5      v   M     g7f)z"'Nr   )r*   xs     r,   r-   6read_has_prefix.<locals>.parse_line.<locals>.<genexpr>   s     U.Tggenn.Ts   F)posixr!   r   r      z!Invalid has_prefix file at path: )r   r   lenr   r   textr   )r>   partsr   r<   s     r,   
parse_line#read_has_prefix.<locals>.parse_line   s|    U.A$e.TUUu:?18==%(KKZ1_uQx%();U1XFF(+LTF)STTr5   c              3  4   >#    U  H  nT" U5      v   M     g 7fr(   r   )r*   r>   r   s     r,   r-   "read_has_prefix.<locals>.<genexpr>   s     C1BJt$$1Bs   )r   r@   r   r   r   )r<   parsed_linesprr   r   s   `  @@r,   r   r      sV     ],STKU DT1BCLAMN2KK".."++66NNNs   ,Ac                x    [        [        [        [        U S5      5      [        [        U S5      5      5      5      $ )Nr   no_softlink)setr   r@   r   )r   s    r,   r   r      s5    Xy12X}56	
 r5   c                ,   ^  [        U 4S jU5       5      $ )Nc              3  `   >#    U  H#  n[        [        TU5      5      (       d  M  Uv   M%     g 7fr(   )r#   r   )r*   rq   rg   s     r,   r-   "read_soft_links.<locals>.<genexpr>   s"     REqVD1La,P%QEs   .	.)r   )rg   r   s   ` r,   read_soft_linksr      s    RERRRr5   z25.9z26.3zJUse 'conda.plugins.prefix_data_loaders.pypi.pkg_format.read_python_record')addendumc                     SSK Jn  U" XU5      $ )Nr   )read_python_record)+plugins.prefix_data_loaders.pypi.pkg_formatr   )prefix_pathanchor_filepython_versionr   s       r,   r   r      s     RkGGr5   )r<   zstr | os.PathLikerK   zLiteral['md5', 'sha256']returnstr)L__doc__
__future__r   rD   rd   r1   base64r   collectionsr   r;   r   	functoolsr   	itertoolsr   loggingr	   os.pathr
   r   r   pathlibr   typingr   auxlib.collectionr   auxlib.compatr   
auxlib.ishr   base.constantsr   common.compatr   deprecationsr   
exceptionsr   r   r   models.channelr   models.enumsr   r   models.package_infor   r   models.recordsr   r   r    creater"   linkr#   r$   r%   __name__loglistdirr@   rN   r_   ri   rs   ru   rX   rY   rZ   r   r   r   r   r   r5   r,   <module>r      s    G "   	  "     ' '    & 0  0 & & V V % . ? = = & !
?0
$$
 2-`O6S 

Y
H
Hr5   