B
    nôb\±B  ã               @   s  d Z ddlmZ ddl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ZddlZddlmZ ddlmZmZmZmZmZmZ ej d¡Zej d¡Zdd	„ Zerªe
jne d
¡e
jƒZe
jZdd„ Z e ƒ Z!dd„ Z"e
j# $d¡rèdZ%ndZ%erøe%d Z%dd„ Z&dd„ Z'dZdd„Z(dd„ Z)d[dd„Z*d\dd„Z+d d!„ Z,g a-d"d#„ Z.e.e*dd$d%ƒ d]d'd(„Z/e(d)ƒZ0d*Z1d+d,d-d.d/d0d1d2d3œZ2g Z3d4d5„ Z4d6d7„ Z5d8d9„ Z6d:d;„ Z7d^d<d=„Z8e8dƒZ9d>Z:d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQgZ;dRZ<eròdSZ=ndTZ=dUdV„ Z>dWZ?dXdY„ Z@dS )_zß
Spyder base configuration management

This file only deals with non-GUI configuration features
(in other words, we won't import any PyQt object here, avoiding any
sip API incompatibility issue in spyder's non-gui modules)
é    )Úprint_functionN)Úencoding)Ú
is_unicodeÚ
TEXT_TYPESÚ	INT_TYPESÚPY3Úto_text_stringÚis_text_stringZ
SPYDER_DEVZSPYDER_SAFE_MODEc               C   s   t tj d¡ƒS )z½
    Return True if currently running under py.test.

    This function is used to do some adjustment for testing. The environment
    variable SPYDER_PYTEST is defined in conftest.py.
    ZSPYDER_PYTEST)ÚboolÚosÚenvironÚget© r   r   ú1lib/python3.7/site-packages/spyder/config/base.pyÚrunning_under_pytest,   s    r   zutf-8c              C   s&   t j dd¡} |  ¡ st| ƒ} t| ƒS )NZSPYDER_DEBUGÚ )r   r   r   Úisdigitr
   Úint)Z	debug_envr   r   r   Ú_get_debug_env<   s    r   c              G   sP   t rLt}tr>x"| D ]}|j t|ƒ d¡¡ qW td|d nt| d|iŽ dS )zOutput debug messages to stdoutzutf-8r   )Úfiler   N)ÚDEBUGÚSTDOUTr   ÚbufferÚwriteÚstrÚencodeÚprint)ÚmessageZssÚmr   r   r   Údebug_printC   s    
r   ÚlinuxÚspyderz.spyderz-py3c              C   s€   yt  t d¡¡} W n tk
r,   d} Y nX t | ¡r<| S x2dD ]*}t  tj |d¡¡} t | ¡rh| S d} qBW | s|t	dƒ‚dS )z$
    Return user home directory
    ú~r   )ÚHOMEZUSERPROFILEZTMPzgPlease set the environment variable HOME to your user/home directory path so Spyder can start properly.N)
r   Zto_unicode_from_fsÚospÚ
expanduserÚ	ExceptionÚisdirr   r   r   ÚRuntimeError)ÚpathZenv_varr   r   r   Úget_home_dirg   s    



r*   c              C   sB   t j d¡rd} ndtt ¡ ƒ } t tt 	¡ ƒd 
| ¡t¡}|S )zU
    Return the path to a temp clean configuration dir, for tests and safe mode.
    Úwinr   ú-zpytest-spyder{0!s})ÚsysÚplatformÚ
startswithr   ÚgetpassZgetuserr$   ÚjoinÚtempfileZ
gettempdirÚformatÚ	SUBFOLDER)Zcurrent_userÚconf_dirr   r   r   Úget_clean_conf_dir‡   s    r6   c             C   s´   t ƒ s
trtƒ }n\tj d¡r`tj dd¡}|s>t	 
tƒ d¡}t	 |¡sRt |¡ t	 
|t¡}nt	 
tƒ t¡}t	 |¡s˜t ƒ s‚trŽt |¡ n
t |¡ | dkr¤|S t	 
|| ¡S dS )zDReturn absolute path to the config file with the specified filename.r    ZXDG_CONFIG_HOMEr   z.configN)r   Ú	SAFE_MODEr6   r-   r.   r/   r   r   r   r$   r1   r*   r'   Úmakedirsr4   Úmkdir)Úfilenamer5   Zxdg_config_homer   r   r   Úget_conf_path–   s"    





r;   c             C   s   t  t  tj|  j¡¡S )z!Return module *modname* base path)r$   ÚabspathÚdirnamer-   ÚmodulesÚ__file__)Úmodnamer   r   r   Úget_module_path´   s    rA   ÚDATAPATHc             C   sx   t tj|  |dƒ}|r|S t| ƒ}t |tj¡}t |¡rVt t t |tj¡| ¡¡}|dk	rpt t ||¡¡}|S dS )z›Return module *modname* data path
    Note: relpath is ignored if module has an attribute named *attr_name*
    
    Handles py2exe/cx_Freeze distributionsr   N)	Úgetattrr-   r>   rA   r$   r1   ÚpardirÚisfiler<   )r@   ÚrelpathÚ	attr_nameZdatapathÚ	parentdirr   r   r   Úget_module_data_path¹   s    
rI   c             C   sZ   t | ƒ}t |tj¡}t |¡r<t t t |tj¡| ¡¡}|dk	rVt t ||¡¡}|S )aC  Return module *modname* source path
    If *basename* is specified, return *modname.basename* path where 
    *modname* is a package containing the module *basename*
    
    *basename* is a filename (not a module name), so it must include the
    file extension: .py or .pyw
    
    Handles py2exe/cx_Freeze distributionsN)rA   r$   r1   rD   rE   r<   )r@   ÚbasenameZsrcpathrH   r   r   r   Úget_module_source_pathÎ   s    	
rK   c               C   s   t  t  tdƒt j¡¡S )z@Return True if this is a py2exe/cx_Freeze distribution of Spyderr!   )r$   rE   r1   rA   rD   r   r   r   r   Úis_py2exe_or_cx_Freezeã   s    rL   c             C   sV   t  | ¡sd S t | ¡ x8t | ¡D ]*\}}}x|D ]}t t  ||¡¡ q4W q$W d S )N)r$   r'   ÚIMG_PATHÚappendr   Úwalkr1   )r)   ÚdirpathZdirnamesZ
_filenamesr=   r   r   r   Úadd_image_pathì   s    


rQ   Úimages)rF   únot_found.pngc             C   s\   x,t D ]$}t || ¡}t |¡rt |¡S qW |dk	rXt tdƒd¡}t t ||¡¡S dS )zReturn image absolute pathNr!   rR   )rM   r$   r1   rE   r<   rA   )ÚnameÚdefaultZimg_pathÚ	full_pathr   r   r   Úget_image_path÷   s    

rW   Ú
langconfigÚenZEnglishZDeutschu	   FranÃ§aisu   EspaÃ±olZMagyaru
   PortuguÃªsu   Ð ÑƒÑÑÐºÐ¸Ð¹u	   æ—¥æœ¬èªž)rY   ZdeÚfrZesZhuZpt_BRZruZjac                 st   t dddd‰ t ˆ ¡} ‡ fdd„| D ƒ}tg| }tt|ƒttƒ ƒ}x&|D ]}|tkrNd}t|ƒ dgS qNW |S )	a  
    List available translations for spyder based on the folders found in the
    locale folder. This function checks if LANGUAGE_CODES contain the same
    information that is found in the 'locale' folder to ensure that when a new
    language is added, LANGUAGE_CODES is updated.
    r!   ÚlocaleÚ
LOCALEPATH)rF   rG   c                s"   g | ]}t  t  ˆ |¡¡r|‘qS r   )r$   r'   r1   )Ú.0Úd)Úlocale_pathr   r   ú
<listcomp>!  s    z.get_available_translations.<locals>.<listcomp>z[Update LANGUAGE_CODES (inside config/base.py) if a new translation has been added to SpyderrY   )	rI   r   ÚlistdirÚDEFAULT_LANGUAGEÚlistÚsetÚDISABLED_LANGUAGESÚLANGUAGE_CODESr   )ra   ZlangsÚlangÚerrorr   )r_   r   Úget_available_translations  s    



ri   c              C   s‚   yt  ¡ d } W n tk
r(   t} Y nX tƒ r4t} t}| dk	r~tƒ }x6|D ].}| |kr`| }P qL|  |¡st| | ¡rL|}P qLW |S )a  
    If Spyder has a translation available for the locale language, it will
    return the version provided by Spyder adjusted for language subdifferences,
    otherwise it will return DEFAULT_LANGUAGE.

    Example:
    1.) Spyder provides ('en',  'de', 'fr', 'es' 'hu' and 'pt_BR'), if the
    locale is either 'en_US' or 'en' or 'en_UK', this function will return 'en'

    2.) Spyder provides ('en',  'de', 'fr', 'es' 'hu' and 'pt_BR'), if the
    locale is either 'pt' or 'pt_BR', this function will return 'pt_BR'
    r   N)r[   ZgetdefaultlocaleÚ
ValueErrorrb   r   ri   r/   )Zlocale_languageÚlanguageZspyder_languagesrg   r   r   r   Úget_interface_language2  s$    



rl   c          	   C   s$   t tdƒ}| | ¡ W dQ R X dS )z-Save language setting to language config fileÚwN)ÚopenÚ	LANG_FILEr   )ÚvalueÚfr   r   r   Úsave_lang_confZ  s    rr   c           	   C   sV   t  t¡r*ttdƒ} |  ¡ }W dQ R X ntƒ }t|ƒ | d¡tkrRt	}t|ƒ |S )zË
    Load language setting from language config file if it exists, otherwise
    try to use the local settings if Spyder provides a translation, or
    return the default if no translation provided.
    ÚrNÚ
)
r$   rE   ro   rn   Úreadrl   rr   Ústripre   rb   )rq   rg   r   r   r   Úload_lang_conf`  s    
rw   c                sª   |dkr| }dd„ }t |ddd}tƒ }tjdkrXy|tjd< W qb tk
rT   |S X n
|tjd	< d
dl}y&|j| |dd}|j‰ ‡ fdd„}|S  tk
r¤   |S X dS )z0Return translation callback for module *modname*Nc             S   s   t | ƒst| dƒS | S )z&Dumb function to not use translations.zutf-8)r   r   )Úxr   r   r   Útranslate_dumbz  s    
z'get_translation.<locals>.translate_dumbr[   r\   )rF   rG   ÚntZLANGZLANGUAGEr   zutf-8)Zcodesetc                s<   t st| ƒr|  d¡} ˆ | ƒ}t|ƒr.t r.|S t|dƒS d S )Nzutf-8)r   r   r   r	   r   )rx   Úy)Úlgettextr   r   Útranslate_gettext•  s    
z*get_translation.<locals>.translate_gettext)	rI   rw   r   rT   r   r&   ÚgettextZtranslationr|   )r@   r=   ry   r_   rk   r~   Z_transr}   r   )r|   r   Úget_translationu  s(    

r   FÚnanÚinfZinftyZlittle_endianZcolorbar_docZ	typecodesÚ__builtins__Ú__main__Ú__doc__ZNaNZInfZInfinityZsctypesZrcParamsZrcParamsDefaultZsctypeNAZtypeNAZFalse_ZTrue_é   z
Spyder.appzSpyder-Py2.appc               C   s   t jdkrttkrdS dS d S )NÚdarwinTF)r-   r.   ÚMAC_APP_NAMEr?   r   r   r   r   Úrunning_in_mac_app½  s    rˆ   )ÚhelpZ
onlinehelpr)   zpylint.resultsz
spyder.iniztemp.pyztemp.spydataztemplate.pyz
history.pyzhistory_internal.pyZ
workingdirz	.projectsz.spyprojectz.ropeprojectzmonitor.logzmonitor_debug.logzrope.logrX   zspyder.lockc              C   sl   t dtd xZtD ]R} t| ƒ}t |¡s2t |¡r>t |¡ nt 	|¡rt
 |¡ nqt d|td qW dS )zRemove all config filesz)*** Reset Spyder settings to defaults ***)r   z	removing:N)r   ÚSTDERRÚSAVED_CONFIG_FILESr;   r$   rE   Úislinkr   Úremover'   ÚshutilZrmtree)ÚfnameZ	cfg_fnamer   r   r   Úreset_config_filesÏ  s    

r   )N)NrB   )N)rS   )N)Ar„   Z
__future__r   Úcodecsr[   Úos.pathr)   r$   r   rŽ   r-   r0   r2   Zspyder.utilsr   Zspyder.py3compatr   r   r   r   r   r	   r   r   ZDEVr7   r   ÚstdoutÚ	getwriterr   ÚstderrrŠ   r   r   r   r.   r/   r4   r*   r6   r;   rA   rI   rK   rL   rM   rQ   rW   ro   rb   rf   re   ri   rl   rr   rw   r   Ú_Z	CHECK_ALLZEXCLUDED_NAMESZPICKLE_PROTOCOLr‡   rˆ   r‹   r   r   r   r   r   Ú<module>   s€    	 


	
(
-



