
    `gjE                    n    d Z ddlmZ ddlZddlZddlmZmZ dZdZ	dZ
 G d d	e      Zdd
ZddZddZy)zDHelpers for the temporary psutil-on-Android compatibility installer.    )annotationsN)PathPurePosixPathz~https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gzz(LINUX = sys.platform.startswith("linux")z5LINUX = sys.platform.startswith(("linux", "android"))c                      e Zd ZdZy)PsutilAndroidInstallErrorz9Raised when the pinned psutil sdist is missing or unsafe.N)__name__
__module____qualname____doc__     L/root/.hermes/venv/lib/python3.12/site-packages/hermes_cli/psutil_android.pyr   r      s    Cr   r   c                    t        |       }t        d |j                  D              }|j                         sd|v s|st	        d|       |S )Nc              3  *   K   | ]  }|d vs|  yw)) .Nr   ).0parts     r   	<genexpr>z*_normalize_member_parts.<locals>.<genexpr>   s     G4Y1F$Gs   	z..zUnsafe archive member path: )r   tuplepartsis_absoluter   )member_namepathr   s      r   _normalize_member_partsr      sR    %DG4::GGETU]%'*;/:
 	
 Lr   c           	        t        j                  | d      5 }|j                         D ]  }t        |j                        } |j
                  | }|j                         r|j                  dd       L|j                         st        d|j                         |j                  j                  dd       |j                  |      }|t        d|j                         |5  t        |d      5 }t        j                  ||       ddd       ddd       	 |j                  |j                  dz          	 ddd       y# 1 sw Y   =xY w# 1 sw Y   AxY w# t         $ r Y Bw xY w# 1 sw Y   yxY w)	z<Extract a tar.gz without allowing traversal or link members.zr:gzT)parentsexist_okz!Unsupported archive member type: NzCannot read archive member: wbi  )tarfileopen
getmembersr   namejoinpathisdirmkdirisfiler   parentextractfileshutilcopyfileobjchmodmodeOSError)archivedestinationtfmemberr   target	extracteddsts           r   _safe_extract_tar_gzr6   #   s`   	gv	& "mmo 	F+FKK8E)[))51F||~TD9==?/7}E  MMt<v.I /26;;-@   3D. 3#""9c23 3V[[5011	 *3 3 3 3
  5 s`   CE.&E3E	
EE.E9E.EEEE.	E+'E.*E++E..E7c                R   t        | |       t        d |j                         D        d       }|st        d      |d   }|dz  dz  }|j	                         st        d|j                  |            	 |j                  d	
      }t        |vrt        d      	 |j                  |j                  t        t              d	
       |S # t        $ r#}t        d|j                  |            |d}~ww xY w# t        $ r#}t        d|j                  |            |d}~ww xY w)z@Safely extract the pinned psutil sdist and patch it for Android.c              3  v   K   | ]1  }|j                         r|j                  j                  d       r| 3 yw)zpsutil-N)is_dirr#   
startswith)r   r   s     r   r   z/prepare_patched_psutil_sdist.<locals>.<genexpr>H   s2      	
{{}!5!5i!@ 	
s   79c                    | j                   S )N)r#   )r   s    r   <lambda>z.prepare_patched_psutil_sdist.<locals>.<lambda>L   s
     r   )keyz1psutil sdist did not contain a psutil-* directoryr   psutilz
_common.pyzpsutil sdist did not contain zutf-8)encodingzFailed to read Nz3psutil Android compatibility patch marker not foundzFailed to write )r6   sortediterdirr   is_filerelative_to	read_textr.   MARKER
write_textreplaceREPLACEMENT)r/   r0   	src_rootssrc_root	common_pycontentexcs          r   prepare_patched_psutil_sdistrN   C   s`   +.	
(002	
 #I '?
 	
 |H8#l2I'+I,A,A(,K+NO
 	
%%w%7
 W'A
 	
OOFK0 	 	
 O#  'i33H=@A
	  'y44X>AB
	s0   8C +C: 	C7C22C7:	D&D!!D&)r   strreturnztuple[str, ...])r/   r   r0   r   rP   None)r/   r   r0   r   rP   r   )r   
__future__r   r*   r    pathlibr   r   
PSUTIL_URLrE   rH   RuntimeErrorr   r   r6   rN   r   r   r   <module>rV      sH    J "   '
  
4ED D@)r   