
    kVhi                      4   d dl Zd dlZd dlZd dlZd dlZd dl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mZ d dlmZ d dlmZmZ d dl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' ddl(m)Z)m*Z*  G d dejV                  jX                        Z- G d de      Z,y)    N)
CollectionDictIterableIteratorMappingOptionalSequencecast)Requirement)NormalizedNamecanonicalize_name)parse)InvalidWheelUnsupportedWheel)BaseDistributionBaseEntryPointDistributionVersionInfoPathWheel)normalize_path)TempDirectory)parse_wheelread_wheel_metadata_file   )BasePathget_dist_namec            	           e Zd ZdZdeej                  ef   dej                  ddfdZe	de
j                  ded	edd fd
       Zdedeej                     fdZdedee   fdZy)WheelDistributiona  An ``importlib.metadata.Distribution`` read from a wheel.

    Although ``importlib.metadata.PathDistribution`` accepts ``zipfile.Path``,
    its implementation is too "lazy" for pip's needs (we can't keep the ZipFile
    handle open for the entire lifetime of the distribution object).

    This implementation eagerly reads the entire metadata directory into the
    memory instead, and operates from that.
    filesinfo_locationreturnNc                      || _         || _        y N)_filesr    )selfr   r    s      W/home/dcms/DCMS/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_dists.py__init__zWheelDistribution.__init__/   s    
 *    zfnamelocationc           	         
 t        ||      \  
}
fd|j                         D        }|D ci c]  \  }}|t        ||       }}}t        j                  |
      }	 | ||	      S c c}}w )Nc              3      K   | ]B  }|j                   d       r,|t        j                  |j                  d d      d         f D yw)/r   N)
startswithpathlibPurePosixPathsplit).0r*   info_dirs     r&   	<genexpr>z1WheelDistribution.from_zipfile.<locals>.<genexpr>?   sK      
(1~. 7((C);B)?@A
s   AA)r   namelistr   r1   r2   )clsr)   r*   r+   _pathsfullpathrelpathr   r    r5   s             @r&   from_zipfilezWheelDistribution.from_zipfile7   s     ""d+!

 &+
!' -b(;;
 
  --hA5-((
s   A(pathc                     t        j                  t        |            | j                  v rt	        | j                        S t        |      r#   )r1   r2   strr$   iterFileNotFoundErrorr%   r>   s     r&   iterdirzWheelDistribution.iterdirK   s7      T+t{{:$$%%r(   filenamec                 
   	 | j                   t        j                  |         }	 |j	                  d      }|S # t        $ r Y y w xY w# t
        $ r2}| j                  j                  }d| d| d| d}t        |      d }~ww xY w)Nzutf-8zError decoding metadata for z: z in z file)	r$   r1   r2   KeyErrordecodeUnicodeDecodeErrorr    parentr   )r%   rE   datatextewheelerrors          r&   	read_textzWheelDistribution.read_textQ   s    	;;w44X>?D	*;;w'D
   		 " 	*&&--E25'A3d8*ERE"5))	*s&   "8 A 	AA	B-A==B)__name__
__module____qualname____doc__r   r1   r2   bytesr'   classmethodzipfileZipFiler@   r=   r   r   rD   r   rP    r(   r&   r   r   $   s    +w,,e34+ ,,+ 
	+ )OO) ) 	)
 
) )&&H &'2G2G)H &# (3- r(   r   c            	          e Zd Zdej                  j
                  dee   dee   ddfdZe	de
defd       Ze	d	ed
e
de
defd       Ze	dede
defd       Zedee
   fd       Zedee
   fd       Zedee
   fd       Zdee
   fdZedefd       Zedefd       ZdedefdZdee
   fdZdede
fdZde e!   fdZ"de#jH                  jJ                  fdZ&de e
   fdZ'de
defdZ(d!de)e
   de e*   fd Z+y)"Distributiondistr    installed_locationr!   Nc                 .    || _         || _        || _        y r#   )_dist_info_location_installed_location)r%   r\   r    r]   s       r&   r'   zDistribution.__init__`   s     
+#5 r(   	directoryc                     t        j                  |      }t        j                  j                  j                  |      } | |||j                        S r#   )r1   Path	importlibmetadatar[   atrJ   )r8   rb   r    r\   s       r&   from_directoryzDistribution.from_directoryj   sA    Y/!!..11-@4(<(<==r(   metadata_contentsrE   project_namec                    t        j                  t        dd      j                        }|dz  }|j	                  |       t
        j                  j                  j                  |j                        } | ||j                  d       S )Nrf   T)kindglobally_managedMETADATA)
r1   rd   r   r>   write_bytesre   rf   r[   rg   rJ   )r8   ri   rE   rj   temp_dirmetadata_pathr\   s          r&   from_metadata_file_contentsz(Distribution.from_metadata_file_contentsp   st     <<zDAFF
 !:-!!"34!!..11-2F2FG4--t44r(   rN   r*   c                    	 |j                         5 }t        j                  |||j                        }d d d         | |j                  t        j                  |j                              S # 1 sw Y   :xY w# t        j
                  $ r}t        |j                  |      |d }~wt        $ r}t        | d|       d }~ww xY w)Nz has an invalid wheel, )
as_zipfiler   r=   r+   rW   
BadZipFiler   r   r    r1   r2   )r8   rN   r*   r)   r\   rM   s         r&   
from_wheelzDistribution.from_wheel   s    	H!!# Pr(55b$OP 4++W-B-B5>>-RSSP P!! 	<u~~t4!; 	H"dV+B1##FGG	Hs9   A9 "A-A9 -A62A9 9CB##C/B??Cc                 Z    | j                   y t        | j                   j                        S r#   )r`   r@   rJ   r%   s    r&   r+   zDistribution.location   s(    &4&&--..r(   c                 F    | j                   y t        | j                         S r#   )r`   r@   rx   s    r&   r    zDistribution.info_location   s"    &4&&''r(   c                 X    | j                   y t        t        | j                               S r#   )ra   r   r@   rx   s    r&   r]   zDistribution.installed_location   s'    ##+c$":":;<<r(   c                     | j                   yt        j                  j                  | j                   j                        \  }}|dvry|j                  dd      d   S )zrTry to get the name from the metadata directory name.

        This is much faster than reading metadata.
        N)z
.dist-infoz	.egg-info-r   r   )r`   osr>   splitextr*   r3   )r%   stemsuffixs      r&   _get_dist_name_from_locationz)Distribution._get_dist_name_from_location   sY    
 &ww''(;(;(@(@Af44zz#q!!$$r(   c                 f    | j                         xs t        | j                        }t        |      S r#   )r   r   r_   r   )r%   r*   s     r&   canonical_namezDistribution.canonical_name   s)    002OmDJJ6O &&r(   c                 @    t        | j                  j                        S r#   )parse_versionr_   versionrx   s    r&   r   zDistribution.version   s    TZZ//00r(   r>   c                 N    | j                   j                  t        |            d uS r#   )r_   rP   r@   rC   s     r&   is_filezDistribution.is_file   s     zz##CI.d::r(   c              #      K   t        | j                  t        j                        sy | j                  j	                  d      j                         D ]  }|j                    y w)Nscripts)
isinstancer`   r1   rd   joinpathrD   r*   )r%   childs     r&   iter_distutils_script_namesz(Distribution.iter_distutils_script_names   sR      $--w||<((11)<DDF 	E**	s   A#A%c                 h    | j                   j                  t        |            }|t        |      |S r#   )r_   rP   r@   rB   )r%   r>   contents      r&   rP   zDistribution.read_text   s/    **&&s4y1?#D))r(   c                 .    | j                   j                  S r#   )r_   entry_pointsrx   s    r&   iter_entry_pointszDistribution.iter_entry_points   s    zz&&&r(   c                 r    t        t        j                  j                  | j                  j
                        S r#   )r
   emailmessageMessager_   rf   rx   s    r&   _metadata_implzDistribution._metadata_impl   s%     EMM))4::+>+>??r(   c                 :    | j                   j                  dg       S )NProvides-Extra)rf   get_allrx   s    r&   iter_provided_extrasz!Distribution.iter_provided_extras   s    }}$$%5r::r(   extrac                 `    t        fd| j                  j                  dg       D              S )Nc              3   L   K   | ]  }t        |      t              k(    y wr#   )r   )r4   provided_extrar   s     r&   r6   z1Distribution.is_extra_provided.<locals>.<genexpr>   s)      
 n-1B51II
s   !$r   )anyrf   r   )r%   r   s    `r&   is_extra_providedzDistribution.is_extra_provided   s/     
"&--"7"78H""M
 
 	
r(   extrasc              #   .  K   |D cg c]  }d|i }}| j                   j                  dg       D ][  }t        |      j                  s |s"j                  j	                  ddi      r Ct        fd|D              sX ] y c c}w w)Nr   zRequires-Dist c              3   T   K   | ]  }j                   j                  |       ! y wr#   )markerevaluate)r4   contextreqs     r&   r6   z1Distribution.iter_dependencies.<locals>.<genexpr>   s      JgSZZ((1Js   %()rf   r   r   r   r   r   )r%   r   rM   contexts
req_stringr   s        @r&   iter_dependencieszDistribution.iter_dependencies   s     DJ-Kqwl-K-K--//D 	Jj)C::	

 3 3WbM B	JJJ		 .Ls   BBA5B	B)rY   ),rQ   rR   rS   re   rf   r[   r   r   r'   rV   r@   r   rh   rU   rr   r   rv   propertyr+   r    r]   r   r   r   r   r   r   boolr   r   r   rP   r   r   r   r   r   r   r   r   r   r   r   r   rY   r(   r&   r[   r[   _   s   6  --6  )6 %X.	6
 
6 >s >/? > >
 5 5 5 	5
 
5 5  Tu TC T4D T T /(3- / /
 (x} ( (
 =HSM = =

%hsm 
% ' ' ' 1, 1 1;H ; ;Xc] h 3 '8N#; '@ 5 5 @;hsm ;
s 
t 
	
3 	+AV 	r(   r[   ).email.messager   importlib.metadatare   r}   r1   rW   typingr   r   r   r   r   r   r	   r
   "pip._vendor.packaging.requirementsr   pip._vendor.packaging.utilsr   r   pip._vendor.packaging.versionr   r   pip._internal.exceptionsr   r   pip._internal.metadata.baser   r   r   r   r   pip._internal.utils.miscr   pip._internal.utils.temp_dirr   pip._internal.utils.wheelr   r   _compatr   r   rf   r[   r   rY   r(   r&   <module>r      sq      	  	 	 	 ; I @ C  4 6 K ,8	**77 8vD# Dr(   