
    utg                     2   S SK r S SK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
JrJrJr   S SKr " S S5      r " S	 S
5      r\ R&                  S:X  d  \R(                  " 5       S:X  a  \O\r " S S\5      rg! \ a     S SKr NV! \ a    Sr  Naf = ff = f)    N)datetime)open   )DEFAULT_SHELLSSHELLS)ensure_parent_dir_existsget_flat_outputget_parent_process_namelocation_in_pathnormpathc                   >    \ rS rSrS r\S 5       rSS jrS	S jrSr	g)
WindowsInterface   c                     g N )selfkwargss     4/usr/lib/python3/dist-packages/userpath/interface.py__init__WindowsInterface.__init__   s        c                      [         R                  " [         R                  SS[         R                  5       n [         R                  " U S5      S   sS S S 5        $ ! , (       d  f       g = f)NEnvironmentr   PATH)winregOpenKeyHKEY_CURRENT_USERKEY_READQueryValueEx)keys    r   _get_new_pathWindowsInterface._get_new_path   sC    ^^F44mQX\_&&sF3A6 YXXs   A
A(c                     [        U5      R                  [        R                  5      nU R	                  5       nU H6  n[        X5      (       a  M  U(       a  [        SR                  X5      5      e  g   g)NzUnable to find `{}` in:
{}FT)r   splitospathsepr"   r   	Exceptionformat)r   locationcheck	locationsnew_paths        r   location_in_new_path%WindowsInterface.location_in_new_path   s`    X&,,RZZ8	%%'!H#H77#$A$H$H$\]]  " r   c           
      T   SS K nSS Kn[        U5      nU(       a  XR                  5       4OU R                  5       U4u  pgSR	                  U[
        R                  U5      n[        R                  " [        R                  SS[        R                  5       n	[        R                  " U	SS[        R                  U5        S S S 5        UR                  R                  R                  SSSSSSUR                   R#                  5       5        U R%                  XS	9$ ! , (       d  f       N`= f)
Nr   z{}{}{}r   r   i        i  r+   )ctypesctypes.wintypesr   r"   r)   r&   r'   r   r   r   	KEY_WRITE
SetValueExREG_EXPAND_SZwindlluser32SendMessageTimeoutWwintypesDWORDr.   )
r   r*   frontr+   r   r4   headtailr-   r!   s
             r   putWindowsInterface.put(   s    H%9>h 2 2 45TEWEWEY[cDd
??4T:^^F44mQHXHXY]`c61f.B.BHM Z
 	00OO!!#	
 (((?? ZYs   )D
D'r   NF)TF)
__name__
__module____qualname____firstlineno__r   staticmethodr"   r.   rA   __static_attributes__r   r   r   r   r      s&     7 7@r   r   c                   B    \ rS rSrSS jr\S 5       rS	S jrS
S jrSr	g)UnixInterfaceC   Nc                    U(       a  SnO(U(       a  [        [        5      nOU R                  5       /nU Vs/ s H8  oD(       d  M  [        R                  R                  U5      R                  5       PM:     nnU Vs/ s H  oD[        ;   d  M  UPM     nnU(       d  [        n[        5       n/ nU H,  nXE;  d  M
  UR                  U5        UR                  U5        M.     U Vs/ s H  n[        U   " U5      PM     snU l        U(       a*  [         Vs/ s H  n[        U   " U5      PM     snU l        g U R                  U l        g s  snf s  snf s  snf s  snf )NF)sortedr   detect_shellr&   pathbasenamelowerr   setaddappendshellsshells_to_verify)r   rV   
all_shellshomeshelldeduplicated_shellsselected_shellss          r   r   UnixInterface.__init__D   s   J++-.?EOve1"''""5)//1vO%+?VE%V?#F "eE/#''.&&u- 
 9HHuve}T*HU_. Q.t!4. Qeiepep P? I Qs#   
E1E<EE$EEc                 $   [        5       R                  5       nU[        ;   a  U$ S[        R                  ;   a  g[        R
                  R                  [        R                  R                  SS5      5      R                  5       nU[        ;   a  U$ g )NBASH_VERSIONbashSHELL )r
   rR   r   r&   environrP   rQ   get)clsrZ   s     r   rO   UnixInterface.detect_shell^   sq     ()//1F?L RZZ'   !<=CCEF?L r   c           
      <   [        U5      R                  [        R                  5      nU R                   Hd  nUR                  5        HM  n[        U5      nU H9  n[        X5      (       a  M  U(       a  [        SR                  XU5      5      e      g   MO     Mf     g)Nz-Unable to find `{}` in the output of `{}`:
{}FT)
r   r%   r&   r'   rW   show_path_commandsr	   r   r(   r)   )r   r*   r+   r,   rZ   show_path_commandr-   s          r   r.   "UnixInterface.location_in_new_patho   s    X&,,RZZ8	**E%*%=%=%?!*+<= )H+H?? "+ P W W$,!"#  $) !* &@ + r   c                 B  ^	 [        U5      nU=(       d    SnU R                   GH3  nUR                  XS9R                  5        GH  u  nm	 [	        U5        [
        R                  R                  U5      (       a%  [        USSS9 nUR                  5       nS S S 5        O/ n[        U	4S jW 5       5      (       a  Mz  UR                  SR                  UR                  U[        R                  " 5       R!                  S5      5      5        UR                  S	R                  T	5      5        [        US
SS9 nUR#                  U5        S S S 5        GM     GM6     U R'                  XS9$ ! , (       d  f       N= f! , (       d  f       GMG  = f! [$         a     GMX  f = f)Nuserpath)r>   rzutf-8)encodingc              3   .   >#    U  H
  nTU;   v   M     g 7fr   r   ).0linecontentss     r   	<genexpr>$UnixInterface.put.<locals>.<genexpr>   s     >8t+s   z
{} Created by `{}` on {}
z%Y-%m-%d %H:%M:%Sz{}
wr3   )r   rV   configitemsr   r&   rP   existsr   	readlinesanyrU   r)   comment_starterr   utcnowstrftime
writelinesr(   r.   )
r   r*   r>   app_namer+   rZ   fileflinesrr   s
            @r   rA   UnixInterface.put   sP   H%)z[[E"',,x,"E"K"K"Mh,T2ww~~d++!$g>!$%KKME ?> !#>>>> LL7>>!118X__=N=W=WXk=l
 LL!9:dC':aU+ ;:) #N !4 (((??) ?> ;:  sO   :FE+%F?A9F8E<
F+
E95F<
FFF
FF)rV   rW   )NFNrC   )TNF)
rD   rE   rF   rG   r   classmethodrO   r.   rA   rI   r   r   r   rK   rK   C   s'    q4   &@r   rK   ntWindowsc                       \ rS rSrSrg)	Interface   r   N)rD   rE   rF   rG   rI   r   r   r   r   r      s    r   r   )r&   platformr   ior   rV   r   r   utilsr   r	   r
   r   r   r   ImportError_winregr   rK   namesystem__default_interfacer   r   r   r   <module>r      s    	    * q q.@ .@b]@ ]@@ +-''T/X__=NR[=[&an 	# 	w    s)   A9 9B BBBBB