ó
    Ñ]j\!  ã                  ó|  • % S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSK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Jr  SS	KJrJr  S
SKJr  S
SKJr  \(       a  SSKJrJr  S
SKJ r J!r!  \" 5       r"S\#S'   \" 5       \"\" \
RH                  5      '   \RJ                  " \&5      r'S\#S'    S&SSS.             S'S jjjr(SS.           S(S jjr)            S)S jr*        S*S jr+Sr,S\#S'   S+S jr-\S,S j5       r.S-S  jr/        S.S! jr0 " S" S#5      r1S/S$ jr2/ S%Qr3g)0zQAcquire Python information via subprocess interrogation with multi-level caching.é    )ÚannotationsN)ÚOrderedDict)Úcontextmanager)ÚPath)Úquote)ÚPopenÚTimeoutExpired)ÚTYPE_CHECKINGÚFinalé   )Ú	NoOpCache)Ú
PythonInfo)Ú	GeneratorÚMapping)ÚContentStoreÚPyInfoCachez)OrderedDict[Path, PythonInfo | Exception]Ú_CACHEzFinal[logging.Logger]Ú_LOGGERTF)Úraise_on_errorÚignore_cachec               ó²   • Uc  [         R                  OUn[        XX#US9n[        U[        5      (       a!  U(       a  Ue[
        R                  SU5        S nU$ )N©r   z%s)ÚosÚenvironÚ_get_from_cacheÚ
isinstanceÚ	Exceptionr   Úinfo)ÚclsÚcacheÚexeÚenvr   r   Úresults          Ú]/home/mande/repo/quber/.venv/lib/python3.13/site-packages/python_discovery/_cached_py_info.pyÚfrom_exer%   #   sN   € ð ™Œ"�*Š*¨€CÜ˜S¨ÀÑM€FÜ�&œ)×$Ñ$ÞØˆLÜ�‰�T˜6Ô"ØˆØ€Mó    r   c               ó¸   • [        U5      nU(       d  U[        ;   a
  [        U   nO[        XXRU5      nU=n[        U'   [        U[        5      (       a  X&l        U$ ©N)r   r   Ú_get_via_file_cacher   r   Ú
executable)r   r    r!   r"   r   Úexe_pathr#   Úpy_infos           r$   r   r   6   sV   € ô �C‹y€HÞ˜H¬Ó.Ü˜Ñ!‰ä% c°(ÀÓEˆØ$+Ð+ˆ”˜Ñ!Ü�&œ*×%Ñ%ØÔØ€Mr&   c                ób  • [        U5      n UR                  5       R                  n[	        [	        [
        5      R                  5       5      R                  S-  n [        R                  " UR                  5       5      R                  5       nUb  UO	[        5       n	S n
U	R                  U5      nUR                  5          UR                  5       (       a˜  UR!                  5       =nb…  UR#                  S5      UR#                  S5      píUR#                  S5      UR#                  S5      nnXÕ:X  a-  Xæ:X  a(  UU:X  a"  [%        U[&        5      (       a  [)        XU5      n
OUR+                  5         U
cm  [-        XU5      u  nn
Ub&  [.        R1                  SUU5        [-        XU5      u  nn
Ub  UsS S S 5        $ U
b$  UR3                  UUU
R5                  5       US.5        S S S 5        U
c  U S	3n[7        U5      $ U
$ ! [         a    Sn GNâf = f! [         a    S n GN�f = f! , (       d  f       NI= f)
Néÿÿÿÿú_py_info.pyÚpathÚst_mtimeÚcontentÚhashz5first subprocess attempt failed for %s (%s), retrying)r1   r0   r2   r3   z# failed to produce interpreter info)ÚstrÚstatr1   ÚOSErrorr   Ú__file__ÚresolveÚparentÚhashlibÚsha256Ú
read_bytesÚ	hexdigestr   r,   ÚlockedÚexistsÚreadÚgetr   ÚdictÚ_load_cached_py_infoÚremoveÚ_run_subprocessr   ÚdebugÚwriteÚto_dictÚRuntimeError)r   r    r0   r!   r"   Ú	path_textÚpath_modifiedÚpy_info_scriptÚpy_info_hashÚresolved_cacher,   Úpy_info_storeÚdataÚof_pathÚof_st_mtimeÚ
of_contentÚof_hashÚfailureÚmsgs                      r$   r)   r)   I   s	  € ô �D“	€IðØŸ	™	›×,Ñ,ˆô œ$œx›.×0Ñ0Ó2Ó3×:Ñ:¸]ÑJ€NðÜ#*§>¢>°.×2KÑ2KÓ2MÓ#N×#XÑ#XÓ#Zˆð $Ñ/‘U´Y³[€NØ!%€GØ"×*Ñ*¨4Ó0€MØ	×	Ñ	Õ	Ø×Ñ×!Ñ!¨}×/AÑ/AÓ/CÐ'C tÑ&PØ#'§8¡8¨FÓ#3°T·X±X¸jÓ5I�[Ø"&§(¡(¨9Ó"5°t·x±xÀÓ7G˜ˆJàÓ$ØÓ0Ø˜|Ó+Ü˜z¬4×0Ñ0ä.¨sÀ:ÓN‘à×$Ñ$Ô&Ø‰?Ü.¨s¸Ó=ÑˆG�WØÑ"Ü—‘ÐUÐWZÐ\cÔdÜ#2°3¸SÓ#AÑ �˜ØÑ"Ø÷' 
 Ñ	ð( Ñ"Ø×#Ñ#Ø -Ø%Ø&Ÿ™Ó0Ø(ñ	%ô ÷+ 
 ð6 �Ø�Ð8Ð9ˆÜ˜CÓ Ð Ø€NøôS ó Ø‹ðûô
 ó Ø‹ðú÷ 
 Õ	ús6   �G: Á2H Â?C-H Æ6'H Ç:H
È	H
ÈHÈHÈ 
H.c                ó  •  U R                  UR                  5       5      nUR
                  =nb/  [        U5      R                  5       (       d  UR	                  5         g U$ ! [        [        4 a    UR	                  5          g f = fr(   )Ú	from_dictÚcopyÚKeyErrorÚ	TypeErrorrD   Úsystem_executabler   r?   )r   rO   r2   r,   Úsys_exes        r$   rC   rC      sy   € ð
Ø—-‘- §¡£Ó/ˆð ×,Ñ,Ð,ˆÑ9Ä$ÀwÃ-×BVÑBV×BXÑBXØ×ÑÔØØ€Nøô ”iÐ ó Ø×ÑÔÙðús   ‚A! Á! BÂBé    z
Final[int]ÚCOOKIE_LENGTHc                 ó<   • [         R                  " [        S-  5      $ )Né   )ÚsecretsÚ	token_hexr_   © r&   r$   Ú
gen_cookiere   ’   s   € Ü×Òœ]¨aÑ/Ó0Ð0r&   c               #  ó$  #   • [        [        [        5      R                  5       5      R                  S-  n U R	                  5       (       a  U v •  g [
        R                  " [        =(       d    [        S5      nUc  Sn[        U5      e[        R                  " SS9u  p4 [        R                  " X15        [        R                  " U5        [        U5      v •  [        U5      R                  5         g ! [        U5      R                  5         f = f7f)Nr/   z6cannot locate _py_info.py for subprocess interrogationz.py)Úsuffix)r   r7   r8   r9   Úis_fileÚpkgutilÚget_dataÚ__package__Ú__name__ÚFileNotFoundErrorÚtempfileÚmkstempr   rG   ÚcloseÚunlink)rL   rP   rV   ÚfdÚtmps        r$   Ú_resolve_py_info_scriptrt   –   s¿   é € äœ$œx›.×0Ñ0Ó2Ó3×:Ñ:¸]ÑJ€NØ×Ñ×ÑØÓä×Ò¤× 7¬x¸ÓGˆØ‰<ØJˆCÜ# CÓ(Ð(Ü×"Ò"¨%Ñ0‰ˆð	Ü�HŠH�RÔÜ�HŠH�RŒLÜ�s“)ŠOä�‹I×ÑÕøŒD�‹I×ÑÕüs   ‚BDÂ9C2 ÃDÃ2DÄDc                óZ  • U nU R                  USSS2   5      nUS:”  a6  U SU =n(       a  [        R                  R                  U5        X[        -   S n U R                  USSS2   5      nUS:”  a6  X[        -   S =n(       a  [        R                  R                  U5        U SU n XXF4$ )z]Extract payload between reversed cookie markers, forwarding any surrounding output to stdout.Nr.   )ÚfindÚsysÚstdoutrG   r_   )ÚoutÚstart_cookieÚ
end_cookieÚraw_outÚ
out_startsÚ
pre_cookieÚout_endsÚpost_cookies           r$   Ú_extract_between_cookiesr�   ©   sµ   € à€GØ—‘˜,¡t¨ tÑ,Ó-€JØ�BƒØ˜[˜jÐ)Ð)ˆ:Õ)Ü�J‰J×Ñ˜ZÔ(Øœ}Ñ,Ð.Ð/ˆØ�x‰x˜
¡4 R 4Ñ(Ó)€HØ�"ƒ}Ø¬Ñ6Ð8Ð9Ð9ˆ;Õ9Ü�J‰J×Ñ˜[Ô)Ø�)�8ˆnˆØ˜Ð-Ð-r&   c                ó´  • [        5       n[        5       n[        UR                  SS5      5      n[        5        nU[	        U5      X4/n[        U5      nUR                  SS 5        SUS'   [        R                  S[        U5      5         [        US[        R                  [        R                  [        R                  USS	S
9nUR                  US9u  pšUR                  nS S S 5        WS:w  a5  U SU W	(       a  SU	< 3OS W
(       a  SU
< 3OS 3n[)        SU 35      S 4$ [+        W	X45      u  pžnn U R-                  U	5      nUUl        S U4$ ! [         a(    WR!                  5         UR                  5         Su  pšn N¡["         a#  nSUR$                  UR&                  pºn	 S nANÈS nAff = f! , (       d  f       NÖ= f! [0        R2                   a€  n[        R5                  SU[7        U5      US:”  a  SOSUS:”  a  SOS[7        U	5      U	(       a  U	S S OS5        U SU SW
(       a  SU
< 3OS 3n[)        U5      nUUl        US 4s S nA$ S nAff = f)NÚPY_DISCOVERY_TIMEOUTÚ15Ú__PYVENV_LAUNCHER__Ú1Ú
PYTHONUTF8z get interpreter info via cmd: %sTzutf-8Úbackslashreplace)Úuniversal_newlinesÚstdinÚstderrrx   r"   ÚencodingÚerrors)Útimeout)Ú z	timed outr.   r�   r   z with code z out: z err: zfailed to query ztsubprocess %s returned invalid JSON; raw stdout %d chars, start cookie %s, end cookie %s, parsed output %d chars: %rr.   ÚfoundÚmissingéÈ   z<empty>z" returned invalid JSON (exit code Ú)z
, stderr: )re   ÚfloatrA   rt   r4   rB   Úpopr   rF   ÚLogCmdr   Ú
subprocessÚPIPEÚcommunicateÚ
returncoder	   Úkillr6   ÚstrerrorÚerrnorI   r�   Ú	from_jsonr*   ÚjsonÚJSONDecodeErrorÚwarningÚlenÚ	__cause__)r   r!   r"   rz   r{   rŽ   rL   ÚcmdÚprocessry   ÚerrÚcodeÚos_errorrV   r|   r}   r   r#   ÚexcrU   s                       r$   rE   rE   ¹   sZ  € ô
 “<€LÜ“€JÜ�C—G‘GÐ2°DÓ9Ó:€GÜ	 Ô	" nØ”C˜Ó'¨ÐBˆÜ�3‹iˆØ�‰Ð% tÔ,ØˆˆLÑÜ�‰Ð8¼&À»+ÔFð	CÜØØ#'Ü —o‘oÜ!—‘Ü!—‘ØØ Ø)ñ	ˆGð ×*Ñ*°7Ð*Ð;‰HˆCØ×%Ñ%ˆD÷% 
#ð2 ˆqƒyØ��[  ¾3¨°©wÑ'7ÀBÐ&GÖ\_È&ÐQTÑPWÑHXÐegÐGhÐiˆÜÐ.¨s¨eÐ4Ó5°tÐ;Ð;Ü)AÀ#À|Ó)`Ñ&€C�*˜hðØ—‘˜sÓ#ˆØˆÔð  �ˆ<Ðøô9 ó 	1Ø�L‰LŒNØ×ÑÔ!Ø0‰NˆC’dÜó 	CØ ×!2Ñ!2°H·N±N�dˆC”dûð	Cú÷/ 
#Õ	"ûô@ ×Ñó Ü�‰ð)àÜ�‹LØ! B“‰G¨IØ "“}‰G¨)Ü�‹HÞˆC��‰I )ô		
ð �Ð7¸°v¸QÖWZÀÈCÉ7Ñ?SÐ`bÐ>cÐdˆÜ˜sÓ#ˆØˆÔØ˜ˆ}Õûðús\   ºAF2ÂAEÄ6G Å/F/ÆF2Æ	F/ÆF*Æ%F2Æ*F/Æ/F2Æ2
G ÇIÇA5IÉIÉIc                  ó,   • \ rS rSrSSS jjrSS jrSrg)	r–   éó   Nc                ó   • Xl         X l        g r(   ©r¤   r"   )Úselfr¤   r"   s      r$   Ú__init__ÚLogCmd.__init__ô   s   € ØŒØ�r&   c                óˆ   • SR                  S U R                   5       5      nU R                  b  U SU R                  < 3nU$ )NÚ c              3  óJ   #   • U  H  n[        [        U5      5      v •  M     g 7fr(   )r   r4   )Ú.0Úcs     r$   Ú	<genexpr>Ú"LogCmd.__repr__.<locals>.<genexpr>ù   s   é € Ð<²8¨aœE¤# a£&ŸM˜M²8ùs   ‚!#z env of )Újoinr¤   r"   )r®   Úcmd_reprs     r$   Ú__repr__ÚLogCmd.__repr__ø   s=   € Ø—8‘8Ñ<°4·8²8Ó<Ó<ˆØ�8‰8ÑØ"˜ 8¨D¯H©H©<Ð8ˆHØˆr&   r­   r(   )r¤   z	list[str]r"   úMapping[str, str] | NoneÚreturnÚNone©r½   r4   )rl   Ú
__module__Ú__qualname__Ú__firstlineno__r¯   rº   Ú__static_attributes__rd   r&   r$   r–   r–   ó   s   † ö÷r&   r–   c                óL   • U R                  5         [        R                  5         g r(   )Úpy_info_clearr   Úclear)r    s    r$   rÆ   rÆ   ÿ   s   € Ø	×ÑÔÜ
‡L�L…Nr&   )r–   rÆ   r%   r(   )r   útype[PythonInfo]r    úPyInfoCache | Noner!   r4   r"   r¼   r   Úboolr   rÉ   r½   úPythonInfo | None)r   rÇ   r    rÈ   r!   r4   r"   úMapping[str, str]r   rÉ   r½   úPythonInfo | Exception)r   rÇ   r    rÈ   r0   r   r!   r4   r"   rË   r½   rÌ   )r   rÇ   rO   r   r2   rB   r½   rÊ   r¿   )r½   zGenerator[Path])ry   r4   rz   r4   r{   r4   r½   ztuple[str, str, int, int])r   rÇ   r!   r4   r"   rË   r½   z*tuple[Exception | None, PythonInfo | None])r    r   r½   r¾   )4Ú__doc__Ú
__future__r   r:   rŸ   Úloggingr   ri   rb   r—   rw   rn   Úcollectionsr   Ú
contextlibr   Úpathlibr   Úshlexr   r   r	   Útypingr
   r   Ú_cacher   Ú_py_infor   Úcollections.abcr   r   r   r   r   Ú__annotations__r*   Ú	getLoggerrl   r   r%   r   r)   rC   r_   re   rt   r�   rE   r–   rÆ   Ú__all__rd   r&   r$   Ú<module>rÛ      sî  ðÚ Wå "ã Û Û Û 	Û Û Û Û 
Û Ý #Ý %Ý Ý ß ,ß 'å Ý  æß2ç1ñ 5@³M€Ð1Ó AÙ)›|€�tˆC�N‰NÓÑ Ø!(×!2Ò!2°8Ó!<€Ð	Ó <ð %)ð	ð  ØñØ	ðàðð 
ðð 
"ð	ð ðð ðð öð2 ñØ	ðàðð 
ðð 
ð	ð ðð õð&3Ø	ð3àð3ð ð3ð 
ð	3ð
 
ð3ð ô3ðlØ	ðàðð ðð ô	ð  €ˆzÓ ô1ð óó ðô$.ð 7Ø	ð7à	ð7ð 
ð7ð 0ô	7÷t	ñ 	ôò
�r&   