
    Je                          d Z ddlZddlmZ ddlZddlZ	 ddlZddlm	Z	 ddl
mZmZmZ ddlmZ ddlmZ ddlmZ d	 Zd
 Zd Zd ZddZddZd Z G d de      Z G d de      Z G d de      Zd Zedk(  r e        yy# e$ r Y rw xY w)z!
Environment variable utilities.
    N)Path)QMessageBox)_running_in_cirunning_in_mac_app)CollectionsEditor)ima)run_shell_commandc                     t         j                  j                  }| j                         D ]K  \  }}t	        |t
              s||v s|j                  |      D cg c]  }|j                          c}| |<   M | S c c}w )zDict --> Dict of lists)ospathpathsepitems
isinstancestrsplitstrip)envdictsepkeyvalr   s        6/usr/lib/python3/dist-packages/spyder/utils/environ.pyenvdict2listdictr      si    
''//CMMO ESc3C3J58YYs^DTDJJLDGCLE N Es   A;c                     | j                         D ]B  \  }}t        |t              st        j                  j
                  j                  |      | |<   D | S )zDict of lists --> Dict)r   r   listr   r   r   join)listdictr   r   s      r   listdict2envdictr   (   sI    NN$ 6Sc4 GGOO005HSM6 O    c            	      X   	 t         j                  dk(  rwt        j                  t        j                  d      } t        j
                  |       d   }t        t        |      D cg c]  }t        j                  | |      dd  c}      }|S t         j                  j                  dd      }| dt        j                   d	}t               rd
t         j                  d
   i}ni }t        ||d      }|j                  d      \  }}	t!        |d      }	 |S c c}w # t"        $ r i cY S w xY w)z
    Get user environment variables from a subprocess.

    Returns
    -------
    env_var : dict
        Key-value pairs of environment variables.
    ntEnvironment   N   SHELL	/bin/bashz -l -c "z* -c 'import os; print(dict(os.environ))'" 
PYTHONHOMET)envtextg      ?)timeout)r   namewinregOpenKeyHKEY_CURRENT_USERQueryInfoKeydictrange	EnumValueenvirongetsys
executabler   r
   communicateeval	Exception)
r   
num_valueskenv_varshellcmdr(   procstdoutstderrs
             r   get_user_environment_variablesrB   0   s!   77d?..!9!9=IC,,S1!4J7<Z7HI!!!#q)"1-IG( N! JJNN7K8E' ~~&&PT  "##RZZ%=>$Sc=D!--c-:NFF64(G N' J   	s+   A!D # DD BD D D)(D)c                  ,    t               } t        |       S )z<Return current user environment variables with parsed values)rB   r   )env_dicts    r   get_user_envrE   T   s    -/HH%%r   c           
         t        |       }t        j                  dk(  rt               }t	        j
                  t        j                  d      }|D ]  }	 t	        j                  ||      \  }||<   ! t	        j
                  t        j                  ddt        j                        }|D ]!  }t	        j                  ||d||   ||          # 	 ddlm} ddlm}m}	m}
  |||	dd|
d       yt        j                  d	k(  rNt-               rDd
j/                  |j1                         D cg c]  \  }}d| d|  c}}      }t3        |       yt5        dt        j                        # t        $ r t        j                  ||<   Y 5w xY w# t$        $ r, t'        j(                  |t+        d      t+        d             Y yw xY wc c}}w )z]
    Set user environment variables via HKCU (Windows) or shell startup file
    (Unix).
    r!   r"   r   )SendMessageTimeout)HWND_BROADCASTWM_SETTINGCHANGESMTO_ABORTIFHUNGi  WarningzModule <b>pywin32 was not found</b>.<br>Please restart this Windows <i>session</i> (not the computer) for changes to take effect.posix
zexport =zNot implemented for platform %sN)r   r   r+   r0   r,   r-   r.   QueryValueExWindowsErrorREG_EXPAND_SZKEY_SET_VALUE
SetValueExwin32guirG   win32conrH   rI   rJ   r9   r   warningr   r   r   r   amend_user_shell_initNotImplementedError)r(   parentrD   typesr   r+   _xrG   rH   rI   rJ   r;   vr)   s                 r   set_user_envr]   Z   s   
  $H	ww$nnV55}E 	3D3"("5"5c4"@E$K	3
 nnV55}a#113 	IDc4E$K$H	I	34 4~/?,.>F 
G	yy8HI1GA3as+IJd#!"CRWWMM/   3$22d3  	) C D	 Js*   E%F %G 
%FF2F=<F=c                    t         j                  dk(  ryt        t         j                  d         }t         j                  j	                  dd      }d|v rg d}nd|v rd	d
g}nt        | d      |D ]  }||z  }|j                         s n j                         r|j                         nd}d}d}	|r|j                         r||v r|	|v rd}
ny| d| z   d|	 z   }
||v r1|	|v r-t        j                  | d|	 |
|t        j                        }n|j                         dz   |
z   }|j                  |j                         dz          y)z;Set user environment variable for pytests on Unix platformsr!   NHOMEr%   r&   bash)z.bash_profilez.bash_loginz.profilezshz	.zprofilez.zshrcz not supported. z# <<<< Spyder Environment <<<<z# >>>> Spyder Environment >>>>rM   z(.*))flagsz

)r   r+   r   r3   r4   r9   exists	read_textresubDOTALLrstrip
write_text)r)   restorer_   r%   
init_filesfile	init_filescriptm1m2new_text_scripts               r   rW   rW      sP   	ww$

6"#DJJNN7K0EA
	%!8,
5'122 4K	
 '0&6&6&8Y  "bF	)B	)B2<B&LHT9t#2$i/	V|f&&B4tB4(F"))L--/F*X5)D01r   c                 r    | j                         }| j                         D ]  \  }}t        |      ||<    |S )z
    Remove non-ascii entries from a dictionary of environments variables.

    The values will be converted to strings or bytes (on Python 2). If an
    exception is raised, an empty string will be used.
    )copyr   r   )env_varsnew_env_varsr   vars       r   	clean_envry      s?     ==?LNN$ %SHS% r   c                   6     e Zd ZdZd ed      df fd	Z xZS )RemoteEnvDialogz,Remote process environment variables dialog.NzEnvironment variablesTc                 B   t         |   |       	 | j                  t        |      ||t	        j
                  d             y # t        $ rQ}t        j                  |t        d      t        d      j                  |      t        j                         Y d }~y d }~ww xY w)Nr3   )titlereadonlyiconrK   zdAn error occurred while trying to show your environment variables. The error was<br><br><tt>{0}</tt>)super__init__setupr   r	   r   r9   r   rV   r   formatOk)selfr3   rY   r}   r~   e	__class__s         r   r   zRemoteEnvDialog.__init__   s     	JJ )!XXi(	    	) ! ""(&) 	s   1A 	BABB)__name__
__module____qualname____doc__r   r   __classcell__r   s   @r   r{   r{      s    6'+01D r   r{   c                       e Zd ZdZddZy)	EnvDialogzEnvironment variables DialogNc                 b    t         j                  | t        t        j                        |       y )NrY   )r{   r   r0   r   r3   )r   rY   s     r   r   zEnvDialog.__init__   s       tBJJ'7 Gr   N)r   r   r   r   r    r   r   r   r      s    &Hr   r   c                   .     e Zd ZdZd fd	Z fdZ xZS )UserEnvDialogz(User Environment Variables Viewer/Editorc                    t        d      }d}t        j                  dk(  rt        d      }d}t        |   t               |||       t        j                  dk(  r.|| }t        j                  |t        d      t        d             y y )NzUser environment variablesTr!   z.User environment variables in Windows registryFrK   a  If you accept changes, this will modify the current user environment variables directly <b>in Windows registry</b>. Use it with precautions, at your own risks.<br><br>Note that for changes to take effect, you will need to restart the parent process of this application (simply restart Spyder if you have executed it from a Windows shortcut, otherwise restart any application from which you may have executed it, like <i>Python(x,y) Home</i> for example))r   r   r+   r   r   rE   r   rV   )r   rY   r}   r~   r   s       r   r   zUserEnvDialog.__init__   s    ./77d?GHEHA77d?~) 	> 	? r   c                     t         j                  dk(  r$t        t        | j	                               |        t
        |           y)zReimplement Qt methodr!   r   N)r   r+   r]   r   	get_valuer   accept)r   r   s    r   r   zUserEnvDialog.accept   s/    77d?)$..*:;DIr   r   )r   r   r   r   r   r   r   r   s   @r   r   r      s    24 r   r   c                      ddl } ddlm}  |       }t               }|j	                           | j
                  |j                                y)z'Run Windows environment variable editorr   N)qapplication)r5   spyder.utils.qthelpersr   r   showexitexec)r5   r   r   dlgs       r   testr      s3    3A
/CHHJCHHSXXZr   __main__r   )rb   F) r   r   pathlibr   rf   r5   r,   r9   qtpy.QtWidgetsr   spyder.config.baser   r   r    spyder.widgets.collectionseditorr   spyder.utils.icon_managerr	   spyder.utils.programsr
   r   r   rB   rE   r]   rW   ry   r{   r   r   r   r   r   r   r   <module>r      s   
 
  	 
	
 ' D C > ) 3!H&$NN#2L' 0H H!O !H zF a  		s   B BB