
    j/7                    |   d Z ddlmZ ddlZddlZddlZddlZ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 ddlmZ ddlmZ ddlmZmZmZmZmZ ddZdd	Zdd
ZddZddddZddZddZd dZd!dZ 	 	 	 	 	 	 	 	 	 	 d"dZ!	 	 	 	 	 	 	 	 	 	 	 	 d#dZ"ddd	 	 	 	 	 	 	 	 	 	 	 d$dZ#	 	 	 	 	 	 d%dZ$	 	 	 	 	 	 	 	 	 	 d&dZ%y)'zIStrict, offline provenance primitives for installed Golden Path runtimes.    )annotationsN)BytesParser)compat32)Path)AnyIterableMappingSequencecastc                R    t        j                  | dddd      j                         S )NFT),:)ensure_ascii	sort_keys
separators	allow_nan)jsondumpsencode)values    /home/cube/projects/richard/traning coach/.omo/evidence/task26/task26-clarification-root-final-st_01a013d9/tools/installed_wheel_provenance.py	canonicalr      s+    :: fh    c                   t        j                         }| j                  d      5 t        fdd      D ]  }|j	                  |        	 d d d        |j                         S # 1 sw Y   |j                         S xY w)Nrbc                 &     j                  d      S )Ni   )read)streams   r   <lambda>zsha256_file.<locals>.<lambda>!   s    &++k":r   r   )hashlibsha256openiterupdate	hexdigest)pathdigestchunkr   s      @r   sha256_filer)      sh    ^^F	4F:C@EMM%  A 
  
 s   &A&&A>c                ~    dj                  | j                         j                  dd      j                  d            S )N-_)joinlowerreplacesplit)names    r   _normalr2   &   s/    88DJJL((c288=>>r   c                P    | j                  d      t        fd|D              S )NTstrictc              3     K   | ]<  }|j                  d       k(  xs! j                  |j                  d              > ywTr4   N)resolveis_relative_to).0rootresolveds     r   	<genexpr>z_within.<locals>.<genexpr>,   sH     }w|osx4<<t<44j8O8OPTP\P\dhP\Pi8jjw|s   AA)r8   any)r&   rootsr<   s     @r   _withinr@   *   s%    ||4|(H}w|}}}r   Fprivatec                  | j                         }t        j                  |j                        rt	        | d      t        j
                  |j                        r0|j                  dk7  s!|j                  t        j                         k7  rt	        | d      |r0t        j                  |j                        dvrt	        | d      y y )N is a symlink   z is not an owned regular file>         permissions are not private)lstatstatS_ISLNKst_mode
ValueErrorS_ISREGst_nlinkst_uidosgeteuidS_IMODE)r&   labelrB   infos       r   _regularrV   /   s    ::<D||DLL!E7-011<<%!);t{{bjjl?ZE7"?@AA4<<-^CE7">?@@ Dwr   c                x   | j                         }t        j                  |j                        rt	        | d      t        j
                  |j                        r!|j                  t        j                         k7  rt	        | d      t        j                  |j                        dvrt	        | d      y )NrD   z is not an owned directory>   @    rH   )
rI   rJ   rK   rL   rM   S_ISDIRrP   rQ   rR   rS   )r&   rT   rU   s      r   _private_directoryr[   9   s    ::<D||DLL!E7-011<<%

)DE7"<=>>||DLL!7E7">?@@ 8r   c                    t        | dd       t        j                  | j                  d            }t	        |t
              rt        d |D              rt        d      t        t
        t        t        f   |      S )N
provenanceTrA   utf-8)encodingc              3  >   K   | ]  }t        |t                 y wN)
isinstancestr)r:   keys     r   r=   z$read_private_json.<locals>.<genexpr>F   s     )Tesjc.B*Bes   zprovenance is not an object)rV   r   loads	read_textrb   dictr>   rM   r   rc   r   )r&   r   s     r   read_private_jsonrh   C   s_    T<.JJt~~w~78EeT"c)Te)T&T677S#X&&r   c                |   | j                  d      \  }}}|dk7  s|r|st        | d      	 t        j                  |dt	        |       dz  z  z         }t	        |      t        j                         j                  k7  rt        | d      |j                         S # t
        $ r}t        | d      |d }~ww xY w)N=r!   z RECORD hash is invalid   )
	partitionrM   base64urlsafe_b64decodelen	Exceptionr    r!   digest_sizehex)r   rT   	algorithm	separatorencodedrawexcs          r   _decode_record_hashrx   K   s    $)OOC$8!Iy'HIWE7"9:;;E&&wW8I1J'JK 3x7>>#///E7"9:;;779	  EE7"9:;DEs   (B 	B;'B66B;c                   	 | j                  d      }t        t        j                  t	        j
                  |d                  }g }t               }|D ]  }t        |      dk7  rt        | d      |\  }	}
}t        |	      }|	r|j                         s|	|v rt        | d      |j                  |	       |	|k(  r'|
s|rt        | d      |j                  |	dd f       |
r|j                         st        | d	      |j                  |	t!        |
|      t#        |      f        ||vrt        | d
      |S # t        t        j                  f$ r}t        | d      |d }~ww xY w)Nr^    )newlinez RECORD is invalid   z RECORD row is invalidz RECORD path is invalidz RECORD self-row is invalidz RECORD hash or size is missingz RECORD self-row is missing)decodelistcsvreaderioStringIOUnicodeDecodeErrorErrorrM   setro   r   is_absoluteaddappend	isdecimalrx   int)datarecord_relativerT   decodedparsedrw   rowsseenrowrelativeencoded_hashraw_size	candidates                r   _record_rowsr   X   s}   @++g&cjjWb!ABC /1DUDs8q=w&<=>>+.(,N	9002h$6Fw&=>??&x E7*E!FGGKK2t,-8#5#5#7w&EFGGX2<GXWX   d"E7"=>??K- 		* @E7"456C?@s   AE E/E**E/c                   t        | | dd       	 t        j                  |       5 }|j                         }t	        |      t	        t        |            k7  st        d |D              rt        | d      | d}|j                  |      }t        |||      }|D 	ci c]  }	|	d   |	
 }
}	t        |      |D 	ch c]  }	|	d   	 c}	k7  rt        | d      |D ]  \  }}}||k(  r	 |j                  |      }t	        |      |k7  rt        | d
|       t        j                  |      j                         |k7  rt        | d|       |
j                  |      }||||fk7  st        | d|        t        j                  |      j                         cd d d        S c c}	w c c}	w # t        $ r}t        | d	|       |d }~ww xY w# 1 sw Y   y xY w# t        j                  $ r}t        | d      |d }~ww xY w)Nz wheelTrA   c              3  p   K   | ].  }|j                  d       xs dt        |      j                  v  0 yw)/z..N)
startswithr   parts)r:   r1   s     r   r=   z#_wheel_inventory.<locals>.<genexpr>   s7     3wqvimDOOC4H4dDTXY]T^TdTdLd4dqvs   46z wheel members are invalidz/RECORDr   z* wheel inventory differs from wheel RECORDz! wheel RECORD member is missing: z wheel RECORD size mismatch: z wheel RECORD hash mismatch: z, installed RECORD differs for wheel member: z wheel is invalid)rV   zipfileZipFilenamelistro   r   r>   rM   r   r   KeyErrorr    r!   r%   get
BadZipFile)wheeldist_info_nameinstalled_rowsrT   archivenamesr   wheel_recordr   r   installed_by_pathr   expected_hashexpected_sizepayloadrw   	installeds                    r   _wheel_inventoryr   u   s/    UugV$d3?__U#w$$&E5zSU_,3wqv3w0w E7*D!EFF!/ 08O"<<8LouED8F GQ G5z5c!f55 E7*T!UVV:>6-.e%ll84G w<=0$w.KH:%VWW>>'*446-G$w.KH:%VWW-11(;	=- HH$w.Z[cZd%eff ;? >>,/99;1 $# !H5   e$w.OPXz%Z[adde $#2  ?E7"3453>?s~   G  A8G F(-G=F-	"G,F2=A-G+3G	G  (
G2	G;GGGGG  G   H3HHc                   | j                         } |j                         }|j                         }t        | d       |j                         rt        || f      st	        d      g }t        |j                  d            D ]  }|j                         s|j                         s$|dz  }|j                         r|j                         rJ|j                         }t        t              j                  |      }	t        |	j                  dd            }
t        |	j                  dd            }t        |
      t        |      k(  s|j!                  |||
|f        t#        |      d	k7  rt	        d
|       |d   \  }}}}|st	        d|       |dz  }t%        || d       |j                         }|j'                  |      j)                         }t+        |||      }g }|D ]  \  }}}||z  }	 |j-                  d       t        || f      st	        | d      t%        || d       ||k(  r/t1        j2                  |      j5                         }t#        |      }nO|j7                         j8                  }||k7  rt	        | d|       t;        |      }||k7  rt	        | d|       |j!                  |||d        t=        ||j>                  ||      }g }|D ]t  }|rd|v sd|v rt	        d      ||z  }|j                         s|j                         st	        d|       |j!                  t        |j-                  d                   v ||t        |j-                  d            t1        j2                  |      j5                         |t        |j-                  d            t1        j2                  |      j5                         |j>                  t        |      t;        |      ||t1        j2                  tA        |            j5                         dS # t.        $ r}t	        | d|       |d}~ww xY w)zCRecompute one wheel's installed inventory from METADATA and RECORD.zinstalled venvz+site-packages is outside the installed venvz*.dist-infoMETADATA)policyNamerz   VersionrE   z/installed distribution cardinality is invalid: r   z/installed distribution version is unavailable: RECORDz RECORDTr4   z RECORD file is unavailable: Nz' RECORD path escapes the installed venvz RECORD filez RECORD size mismatch: z RECORD hash mismatch: )r&   r!   size.r   zimport package name is invalidz'installed package root is unavailable: )distribution_namedistribution_version	dist_infometadata_sha256package_rootsrecord_pathrecord_sha256wheel_filename
wheel_pathwheel_sha256wheel_record_sha256installed_inventoryinstalled_inventory_sha256)!absoluter[   is_dirr@   rM   sortedglob
is_symlinkis_file
read_bytesr   r   
parsebytesrc   r   r2   r   ro   rV   relative_toas_posixr   r8   OSErrorr    r!   r%   rJ   st_sizer)   r   r1   r   )venvsite_packagesr   r   import_packagesmatchesr   metadata_pathmetadatamessager1   versiondeclared_namerecordrecord_datar   r   	inventoryr   r   r   targetrw   actual_hashactual_sizer   r   packager;   s                                r   inspect_installed_distributionr      s0    ==?D!**,MNNEt-.!)HFGG24GM..}=>	!)9)9);!J.$$&-*B*B*D ++-X.99(C7;;vr*+gkk)R014=G$566NNIxw?@ ? 7|qJK\J]^__29!*/IxJK\J]^__!FV)*'23##%K((7@@BO_6GHD)+I26.-)	eNN$N' vw' 122YZ[[-.l;<&!..5??AKk*K ++-//Km+ $5#66MhZ!XYY%f-Km+ $5#66MhZ!XYY(k;WX' 37( +y~~t%6  "M"#.C7N=>>w&??DKKMFwiPQQST!:;< # + '**$*78">>(3==?&6>>>67 4>>@**%j#E*2(&-nnYy5I&J&T&T&V 7  	e 122OPXzZ[add	es   6P))	Q2QQ)search_path
executablec                <   | j                         } |j                  d      }| t        j                  dk(  rdndz  }|j	                         st        d      |xs t        t        j                        j                         }	 t        j                  j                  ||      }|st        d      t        |t        j                  n|      }g }	|D ]c  t        xs t        j                               j                         }
|
j	                         sC|	j                  |
j                  d             e 	 |	j                  |      }|	d	| D ]*  |k(  r	t!        fd|D              st        d        |j                  d      }t#        |d       t%        |j                               t%        |      t'        |      t)        t        j*                  d	d       t%        |      dS # t        $ r d}Y Xw xY w# t
        $ r}t        d
      |d	}~ww xY w)zDReject another import authority ahead of the declared site-packages.Tr4   ntzScripts/python.exez
bin/pythonz$installed interpreter is unavailableFz?running interpreter differs from declared installed interpreterNz=declared site-packages is absent from interpreter search pathc              3  D   K   | ]  }|z  j                           y wra   )exists)r:   r   entrys     r   r=   z.validate_import_environment.<locals>.<genexpr>  s     Ig'')s    z2import authority precedes declared site-packages: zinstalled interpreterr|   )declared_pathresolved_pathr!   r   r   )r   r8   rQ   r1   r   rM   r   sysr   r&   samefiler   tuplegetcwdr   indexr>   rV   rc   r)   r~   version_info)r   r   r   r   r   declared_pythonactualsameentriesresolved_entriesr   
site_indexrw   interpreterr   s                 @r   validate_import_environmentr      s    ==?D!)))6Mbggo2<XO!!#?@@0D0::<Fww8 Z[[ 3CHHEG#%-"))+.779	##I$5$5T$5$BC c%++M:
 "+:.M!IIIQRWQXYZZ	 /
 ")))6K[12_5578[)k*((!,-]+ +    cXY_bbcs*    G/ :H /G>=G>	H
HHc          	        t        d |D              }g }t        | j                               D ]  \  }}|j                         }t	        ||      st        d|       t        |d|        |j                  |t        |j                  d            t        |      |j                         j                  d        |S )Nc              3  @   K   | ]  }|j                  d         ywr7   )r8   )r:   r;   s     r   r=   z)loaded_module_receipts.<locals>.<genexpr>#  s     F$,,d,+s   z3loaded module is outside declared installed roots: zloaded module Tr4   )moduler&   r!   r   )r   r   itemsr   r@   rM   rV   r   rc   r8   r)   rJ   r   )modulesallowed_rootsr?   receiptsr1   raw_pathr&   s          r   loaded_module_receiptsr      s     FFFE(*H 1h  "tU#RSWRXYZZv./DLLL56%d+		++		
 2 Or   c                    t        | |d      }t        | ||dd      }t        | ||dd      }dt        | j                               t        |j	                  d	
            |||ddS )N)checkin_cligateway)r   r   r   zphysique-checkin-cli)r  )r   r   r   r   r   zhermes-agent)r  zinstalled-golden-runtime-v1Tr4   )profilehermes)schemar   r   r   distributions)r   r   rc   r   r8   )r   r   profile_wheelhermes_wheelr   r  r  s          r   collect_installed_runtimer	  5  s     .#2K
 -#0(G ,#($F 0DMMO$]22$2?@"%,? r   )r   objectreturnbytes)r&   r   r  rc   )r1   rc   r  rc   )r&   r   r?   zIterable[Path]r  bool)r&   r   rT   rc   rB   r  r  None)r&   r   rT   rc   r  r  )r&   r   r  zdict[str, Any])r   rc   rT   rc   r  rc   )r   r  r   rc   rT   rc   r  z!list[tuple[str, str, int | None]])
r   r   r   rc   r   z%Sequence[tuple[str, str, int | None]]rT   rc   r  rc   )r   r   r   r   r   r   r   rc   r   Sequence[str]r  dict[str, object])r   r   r   r   r   r  r   zSequence[str] | Noner   zPath | Noner  r  )r   zMapping[str, Path]r   zSequence[Path]r  zlist[dict[str, object]])
r   r   r   r   r  r   r  r   r  r  )&__doc__
__future__r   rm   r   r    r   r   rQ   rJ   r   r   email.parserr   email.policyr   pathlibr   typingr   r   r	   r
   r   r   r)   r2   r@   rV   r[   rh   rx   r   r   r   r   r   r	   r   r   <module>r     s   O "  
  	  	  
  $ !  9 9?~
 9> AA'
:"?"?"? :"? 	"?
 	"?JT
T T 	T
 T #T Tx )-",
, , #	,
 &, , ,^3A* 
    	 
    r   