ó
‹²,]c           @   sº  d  Z  d d l j Z d d l m Z m Z d d l m Z m	 Z	 m
 Z
 d d l m Z d d l m Z m Z m Z m Z m Z m Z m Z m Z d d l Z d d l m Z d d l m Z d d	 l m Z m Z d d
 l m Z m  Z  d d l! m" Z" d d l# m$ Z$ m% Z% d d l& m' Z' d d l& m( Z) d d l* m+ Z+ d d l, m- Z- d d l. m/ Z/ m0 Z0 m1 Z1 m2 Z2 d d l3 m4 Z4 d d l5 m6 Z6 e ƒ  Z7 d Z8 d e f d „  ƒ  YZ9 d S(   sX   
Namespace browser widget

This is the main widget used in the Variable Explorer plugin
iÿÿÿÿN(   t   getsavefilenamet   getopenfilenames(   t   Qtt   Signalt   Slot(   t   QCursor(   t   QApplicationt   QHBoxLayoutt   QInputDialogt   QMenut   QMessageBoxt   QToolButtont   QVBoxLayoutt   QWidget(   t   iofunctions(   t   fix_reference_name(   t   get_supported_typest   REMOTE_SETTINGS(   t   _t   PICKLE_PROTOCOL(   t   CONF(   t   is_text_stringt   to_text_string(   t   encoding(   t   icon_manager(   t   getcwd_or_home(   t   is_module_installed(   t   add_actionst   create_actiont   create_toolbuttont   create_plugin_layout(   t    RemoteCollectionsEditorTableView(   t   ImportWizardg    €„.At   NamespaceBrowserc        	   B   sŽ  e  Z d  Z e e e ƒ Z e ƒ  Z e ƒ  Z d „  Z	 d  d  d  d  d  d  d  d  d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z  d „  Z! d „  Z" d „  Z# d „  Z$ d „  Z% e& e' ƒ e& e( ƒ d  d „ ƒ ƒ Z) e& ƒ  d „  ƒ Z* e& ƒ  d  d „ ƒ Z+ RS(!   s4   Namespace browser (global variables explorer widget)c         C   s¶   t  j |  | ƒ d  |  _ t |  _ d  |  _ d  |  _ d  |  _ d  |  _	 d  |  _
 d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ i  |  _ d  S(   N(   R   t   __init__t   Nonet   shellwidgett   Truet
   is_visiblet   setup_in_progresst	   check_allt   exclude_privatet   exclude_uppercaset   exclude_capitalizedt   exclude_unsupportedt   excluded_namest   minmaxt   dataframe_formatt   editort   exclude_private_actiont   exclude_uppercase_actiont   exclude_capitalized_actiont   exclude_unsupported_actiont   filenamet   var_properties(   t   selft   parent(    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyR"   8   s&    																	c	      )   C   s  |  j  d k	 s t ‚ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _	 | |  _
 |  j d k	 rÚ |  j j | ƒ |  j j | ƒ |  j j | ƒ |  j j | ƒ |  j j | ƒ |  j j | ƒ |  j ƒ  d St |  d d | d | d |  j d |  j d |  j d |  j d |  j d	 |  j d
 |  j d |  j d |  j d |  j d |  j d |  j d |  j  d |  j! d |  j" d |  j# d |  j$ ƒ|  _ |  j j% j& |  j% j' ƒ |  j j( j& |  j) ƒ |  j j* j& |  j* j' ƒ t+ ƒ  }	 |  j, | | | | ƒ }
 x |
 D] } |	 j- | ƒ qWt. |  d t/ d ƒ d t0 j1 d ƒ ƒ} | j2 t3 j4 ƒ t5 |  ƒ } |  j } |  j |  j |  j |  j d g } t6 d ƒ r¤| j7 | j8 ƒ n  t9 | | ƒ | j: | ƒ |	 j; ƒ  |	 j- | ƒ t< |	 |  j ƒ } |  j= | ƒ |  j% j& |  j> ƒ d S(   s¿   
        Setup the namespace browser with provided settings.

        Args:
            dataframe_format (string): default floating-point format for 
                DataFrame editor
        NR.   R/   t   get_value_funct   set_value_funct   new_value_funct   remove_values_funct   copy_value_funct   is_list_funct   get_len_funct   is_array_funct   is_image_funct   is_dict_funct   is_data_frame_funct   is_series_funct   get_array_shape_funct   get_array_ndim_funct	   plot_funct   imshow_funct   show_image_funct   textt   Optionst   icont   tooloptionst   numpy(?   R$   R#   t   AssertionErrorR(   R)   R*   R+   R,   R-   R.   R/   R0   t
   setup_menut   set_dataframe_formatR1   t
   setCheckedR2   R3   R4   t   refresh_tableR   t	   get_valuet	   set_valuet   remove_valuest
   copy_valuet   is_listt   get_lent   is_arrayt   is_imaget   is_dictt   is_data_framet	   is_seriest   get_array_shapet   get_array_ndimt   plott   imshowt
   show_imaget   sig_option_changedt   connectt   emitt   sig_files_droppedt   import_datat   sig_free_memoryR   t   setup_toolbart	   addWidgetR   R   t   imaRL   t   setPopupModeR   t   InstantPopupR	   R   t   appendt   minmax_actionR   t   setMenut
   addStretchR   t	   setLayoutt   option_changed(   R7   R(   R)   R*   R+   R,   R-   R.   R/   t   blayoutt   toolbart   widgett   options_buttont   menuR0   t   actionst   layout(    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyt   setupU   s€    								
																
c         C   s   | |  _  | j |  ƒ d S(   s.   Bind shellwidget instance to namespace browserN(   R$   t   set_namespacebrowser(   R7   R$   (    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyt   set_shellwidget¬   s    	c   	   	      s   t  ˆ  _ g  } t ˆ  d t d ƒ d t j d ƒ d ‡  f d †  ƒ} t ˆ  d t d ƒ d t j d ƒ d ‡  f d	 †  ƒˆ  _ ˆ  j j t ƒ t ˆ  d t d
 ƒ d t j d ƒ d ˆ  j	 ƒ} t ˆ  d t d ƒ d t j d ƒ d ˆ  j
 ƒ} | | ˆ  j | | g 7} t ˆ  t d ƒ d t d ƒ d ‡  f d †  ƒˆ  _ ˆ  j j | ƒ t ˆ  t d ƒ d t d ƒ d ‡  f d †  ƒˆ  _ ˆ  j j | ƒ t ˆ  t d ƒ d t d ƒ d ‡  f d †  ƒˆ  _ ˆ  j j | ƒ t ˆ  t d ƒ d t d ƒ d ‡  f d †  ƒˆ  _ ˆ  j j | ƒ t ˆ  _ | S(   s   Setup toolbarRJ   s   Import dataRL   t
   fileimportt	   triggeredc              s
   ˆ  j  ƒ  S(   N(   Rh   (    (   R7   (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyt   <lambda>º   t    s	   Save datat   filesavec              s   ˆ  j  ˆ  j ƒ S(   N(   t	   save_dataR5   (    (   R7   (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyR   ½   R‚   s   Save data as...t
   filesaveass   Remove all variablest
   editdeletes   Exclude private referencest   tips7   Exclude references which name starts with an underscoret   toggledc            s   ˆ  j  j d |  ƒ S(   NR)   (   Rd   Rf   (   t   state(   R7   (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyR   Î   s    s    Exclude all-uppercase referencess*   Exclude references which name is uppercasec            s   ˆ  j  j d |  ƒ S(   NR*   (   Rd   Rf   (   R‰   (   R7   (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyR   Õ   s    s   Exclude capitalized referencess@   Exclude references which name starts with an uppercase characterc            s   ˆ  j  j d |  ƒ S(   NR+   (   Rd   Rf   (   R‰   (   R7   (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyR   Ý   s    s   Exclude unsupported data typessZ   Exclude references to unsupported data types (i.e. which won't be handled/saved correctly)c            s   ˆ  j  j d |  ƒ S(   NR,   (   Rd   Rf   (   R‰   (   R7   (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyR   å   s    (   R%   R'   R   R   Rl   RL   t   save_buttont
   setEnabledt   FalseR„   t   reset_namespaceR   R1   RR   R2   R3   R4   (	   R7   R)   R*   R+   R,   Rv   t   load_buttont   save_as_buttont   reset_namespace_button(    (   R7   sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyRj   ±   sP    		
	c         C   s1   t  |  t | ƒ | ƒ |  j j ƒ  |  j ƒ  d S(   s   Option has changedN(   t   setattrR   R$   t   set_namespace_view_settingsRS   (   R7   t   optiont   value(    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyRt   í   s    c         C   s   d S(   s_   Notify the widget whether its container (the namespace browser
        plugin is visible or notN(    (   R7   t   enable(    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyt   visibility_changedó   s    c         C   s.   i  } x! t  D] } t |  | ƒ | | <q W| S(   s    Return dict editor view settings(   R   t   getattr(   R7   t   settingst   name(    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyt   get_view_settings  s    c         C   sN   |  j  rJ |  j ƒ  rJ |  j j ƒ  y |  j j ƒ  WqJ t k
 rF qJ Xn  d S(   s   Refresh variable tableN(   R&   t	   isVisibleR$   t   refresh_namespacebrowserR0   t   resizeRowToContentst	   TypeError(   R7   (    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyRS   
  s    c         C   s    | d k	 r |  j | ƒ n  d S(   s   Process remote viewN(   R#   t   set_data(   R7   t   remote_view(    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyt   process_remote_view  s    c         C   s   | d k	 r | |  _ n  d S(   s   Set properties of variablesN(   R#   R6   (   R7   t
   properties(    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyt   set_var_properties  s    c         C   s"   |  j  j | ƒ } d  |  j  _ | S(   N(   R$   RT   R#   t   _kernel_value(   R7   R™   R”   (    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyRT     s    c         C   sª   yc t  j | d t ƒg } t | ƒ t k  rC |  j j | | ƒ n t j |  t	 d ƒ t	 d ƒ ƒ Wn6 t
 k
 r› } t j |  t	 d ƒ d t | ƒ ƒ n X|  j ƒ  d S(   s   Set value for a variable.t   protocolt   Warnings}   The object you are trying to modify is too big to be sent back to the kernel. Therefore, your modifications won't take place.t   Errors   TypeError: %sN(   t   cloudpicklet   dumpsR   t   lent   MAX_SERIALIZED_LENGHTR$   RU   R
   t   warningR   Rž   t   criticalR   RS   (   R7   R™   R”   t   svaluet   e(    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyRU   &  s    c         C   s/   x | D] } |  j  j | ƒ q W|  j ƒ  d  S(   N(   R$   t   remove_valueRS   (   R7   t   namesR™   (    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyRV   ;  s    c         C   s!   |  j  j | | ƒ |  j ƒ  d  S(   N(   R$   RW   RS   (   R7   t	   orig_namet   new_name(    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyRW   @  s    c         C   s   |  j  | d S(   s,   Return True if variable is a list or a tupleRX   (   R6   (   R7   R™   (    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyRX   D  s    c         C   s   |  j  | d S(   s'   Return True if variable is a dictionaryR\   (   R6   (   R7   R™   (    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyR\   H  s    c         C   s   |  j  | d S(   s   Return sequence lengthRª   (   R6   (   R7   R™   (    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyRY   L  s    c         C   s   |  j  | d S(   s(   Return True if variable is a NumPy arrayRZ   (   R6   (   R7   R™   (    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyRZ   P  s    c         C   s   |  j  | d S(   s,   Return True if variable is a PIL.Image imageR[   (   R6   (   R7   R™   (    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyR[   T  s    c         C   s   |  j  | d S(   s&   Return True if variable is a DataFrameR]   (   R6   (   R7   R™   (    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyR]   X  s    c         C   s   |  j  | d S(   s#   Return True if variable is a SeriesR^   (   R6   (   R7   R™   (    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyR^   \  s    c         C   s   |  j  | d S(   s   Return array's shapet   array_shape(   R6   (   R7   R™   (    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyR_   `  s    c         C   s   |  j  | d S(   s   Return array's ndimt
   array_ndim(   R6   (   R7   R™   (    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyR`   d  s    c         C   sJ   |  j  } | j r/ | j d d | | f ƒ n | j d | | f ƒ d  S(   Nt   varexps   --%s %ss   %%varexp --%s %s(   R$   t   _readingt   dbg_exec_magict   execute(   R7   R™   t   funcnamet   sw(    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyRa   h  s    		c         C   s>   |  j  } | j r) | j d d | ƒ n | j d | ƒ d  S(   NR¶   s   --imshow %ss   %%varexp --imshow %s(   R$   R·   R¸   R¹   (   R7   R™   R»   (    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyRb   o  s    		c         C   s@   d | } |  j  } | j r/ | j j | ƒ n | j | ƒ d  S(   Ns	   %s.show()(   R$   R·   t   kernel_clientt   inputR¹   (   R7   R™   t   commandR»   (    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyRc   v  s
    
		c         C   s<   | |  j  j j ƒ  k r8 |  j  j | ƒ |  j  j ƒ  n  d S(   s	   Set data.N(   R0   t   modelt   get_dataRŸ   t   adjust_columns(   R7   t   data(    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyRŸ     s    c         C   s   |  j  j ƒ  d S(   s	   Collapse.N(   t   sig_collapseRf   (   R7   (    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyt   collapse…  s    c      	   C   sÙ  t  d ƒ } | d k rp |  j d k r3 t ƒ  } n t j |  j ƒ } t |  | | t j ƒ \ } } | sˆ d Sn t	 | ƒ rˆ | g } n  xJ| D]B} t
 | ƒ |  _ t j |  j ƒ d j ƒ  } | t j k rvt j t j B} t j |  | t  d ƒ | | ƒ } | t j k rd St t j j ƒ  ƒ }	 t j |  | t  d ƒ |	 d t ƒ \ }
 } | rot j t
 |
 ƒ } qvd Sn  t j | } t	 | ƒ r:d } y€ t j |  j ƒ \ } } t j |  j ƒ } t |  | d | d t | ƒ ƒ} | j ƒ  r| j ƒ  \ } } |  j | | ƒ n  Wq’t  k
 r6} t! | ƒ } q’XnX t" j# t$ t% j& ƒ ƒ t" j' ƒ  |  j( j) |  j | ƒ } d |  j( _* t" j+ ƒ  t" j' ƒ  | d k	 rÇt j, |  | t  d	 ƒ |  j | f ƒ n  |  j- ƒ  q Wd S(
   s   Import data from text file.s   Import dataNi   st   <b>Unsupported file extension '%s'</b><br><br>Would you like to import it anyway (by selecting a known file format)?s   Open file as:i    t   titlet   varnames6   <b>Unable to load '%s'</b><br><br>Error message:<br>%s(.   R   R#   R5   R   t   ospt   dirnameR   R   t   load_filtersR   R   t   splitextt   lowert
   load_funcsR
   t   Yest   Cancelt   questiont   listt   load_extensionst   keysR   t   getItemRŒ   R   t   readt   basenameR    R   t   exec_RÀ   RU   t	   Exceptiont   strR   t   setOverrideCursorR   R   t
   WaitCursort   processEventsR$   t	   load_datat   _kernel_replyt   restoreOverrideCursorR­   RS   (   R7   t	   filenamesRÅ   t   basedirt
   _selfilterR5   t   extt   buttonst   answert   formatst   itemt   okt	   load_funct   error_messageRJ   t	   _encodingt	   base_nameR0   t   var_namet	   clip_datat   error(    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyRh   ‰  sj    		
	

	c         C   s5   t  j d d ƒ } |  j j d | d t d t ƒ d  S(   Nt   ipython_consolet   show_reset_namespace_warningR¬   t   silentt   message(   R   t   getR$   R   R%   (   R7   R¬   (    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyR   Ð  s    c         C   sL  | d k rj |  j } | d k r- t ƒ  } n  t |  t d  ƒ | t j ƒ \ } } | rc | |  _ qj t Sn  t j	 t
 t j ƒ ƒ t j ƒ  |  j j |  j ƒ } d |  j _ t j ƒ  t j ƒ  | d k	 r/d | k rt d ƒ d j d | j d ƒ d ƒ } n t d ƒ | } t j |  t d  ƒ | ƒ n  |  j j |  j d k	 ƒ d S(	   s	   Save datas    Some objects could not be saved:s'   <b>Some objects could not be saved:</b>s   <br><br><code>{obj_list}</code>t   obj_lists   : i   sA   <b>Unable to save current workspace</b><br><br>Error message:<br>N(   R#   R5   R   R    R   R   t   save_filtersRŒ   R   RÙ   R   R   RÚ   RÛ   R$   t   save_namespaceRÝ   RÞ   t   formatt   splitR
   R­   RŠ   R‹   (   R7   R5   Rá   Ré   t   save_data_message(    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyR„   Ö  s4    	


		N(,   t   __name__t
   __module__t   __doc__R   RØ   t   objectRd   RÃ   Ri   R"   R#   R|   R~   Rj   Rt   R–   Rš   RS   R¡   R£   RT   RU   RV   RW   RX   R\   RY   RZ   R[   R]   R^   R_   R`   Ra   Rb   Rc   RŸ   RÄ   R   t   boolRÐ   Rh   R   R„   (    (    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyR!   2   sR   			T		<																												E(:   Rü   t   os.patht   pathRÇ   t   qtpy.compatR    R   t   qtpy.QtCoreR   R   R   t
   qtpy.QtGuiR   t   qtpy.QtWidgetsR   R   R   R	   R
   R   R   R   R¨   t   spyder_kernels.utils.iofuncsR   t   spyder_kernels.utils.miscR   t   spyder_kernels.utils.nsviewR   R   t   spyder.config.baseR   R   t   spyder.config.mainR   t   spyder.py3compatR   R   t   spyder.utilsR   R   Rl   t   spyder.utils.miscR   t   spyder.utils.programsR   t   spyder.utils.qthelpersR   R   R   R   t1   spyder.widgets.variableexplorer.collectionseditorR   t,   spyder.widgets.variableexplorer.importwizardR    t   SUPPORTED_TYPESR«   R!   (    (    (    sO   lib/python2.7/site-packages/spyder/widgets/variableexplorer/namespacebrowser.pyt   <module>   s,   :"	