Ñò
\©äJc           @   sš  d  Z  d d k Z d d k Z d d k Z d d k Z d d k Z d d k Z d d k Z d d k l	 Z	 l
 Z
 d d k l Z d d k l Z l Z l Z l Z d d k l Z l Z l Z l Z l Z d „  Z e i d ƒ Z d	 „  Z d
 „  Z e d „ Z d „  Z d „  Z  d „  Z! d „  Z" d „  Z# d e i$ f d „  ƒ  YZ% d a& d d „ Z' d e i$ f d „  ƒ  YZ( d a* d „  Z+ d e	 f d „  ƒ  YZ, d S(   s   External shell's monitoriÿÿÿÿN(   t   QThreadt   SIGNAL(   t   str2type(   t	   getargtxtt   getdoct	   getsourcet	   getobjdir(   t   get_typet   get_sizet	   get_colort   value_to_displayt   globalsfilterc         C   sÝ   t  |  d | d d t t | d ƒ ƒ d | d d | d d | d d | d ƒ}  h  } x| |  i ƒ  D]n \ } } t | d | d d | d d	 | d	 ƒ} h t | ƒ d
 6t | ƒ d 6t | ƒ d 6| d 6| | <qg W| S(   sI   
    Make a remote view of dictionary *data*
    -> globals explorer
    t   itermaxt   filterst   exclude_privatet   exclude_uppert   exclude_unsupportedt   excluded_namest   truncatet   minmaxt	   collvaluet   typet   sizet   colort   view(   R   t   tupleR   t	   iteritemsR
   R   R   R	   (   t   datat   settingst   remotet   keyt   valueR   (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyt   make_remote_view   s"    


 
t   lc         C   s'   |  i  t i d t | ƒ ƒ | ƒ d S(   s   Write *data* to socket *sock*R!   N(   t   sendt   structt   packt   len(   t   sockR   (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyt   write_packet'   s    c         C   s\   |  i  t ƒ } t i d | ƒ \ } d } x+ t | ƒ | j  o | |  i  | ƒ 7} q- W| S(   s   Read data from socket *sock*R!   t    (   t   recvt   SZR#   t   unpackR%   (   R&   t   datalent   dlenR   (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyt   read_packet+   s     c         C   sS   t  |  | ƒ t |  ƒ } | o+ y t i | ƒ SWqO t j
 o qO Xn | Sd S(   s   Communicate with monitorN(   R'   R.   t   picklet   loadst   EOFError(   R&   t   inputt
   pickle_tryt   output(    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyt   communicate4   s    	c         C   s<   t  |  d ƒ t  |  t i | t i ƒ ƒ t i t |  ƒ ƒ S(   s   Get globals() remote views   __make_remote_view__(globals())(   R'   R/   t   dumpst   HIGHEST_PROTOCOLR0   R.   (   R&   R   (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyt   monitor_get_remote_view@   s    c         C   s   t  |  | d t ƒS(   s    Get global variable *name* valueR3   (   R5   t   True(   R&   t   name(    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyt   monitor_get_globalF   s    c         C   sD   t  |  d ƒ t  |  | ƒ t  |  t i | t i ƒ ƒ t |  ƒ d S(   s+   Set global variable *name* value to *value*s   __set_global__()N(   R'   R/   R6   R7   R.   (   R&   R:   R   (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyt   monitor_set_globalJ   s    c         C   s(   t  |  d ƒ t  |  | ƒ t |  ƒ d S(   s   Del global variable *name*s   __del_global__()N(   R'   R.   (   R&   R:   (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyt   monitor_del_globalQ   s    c         C   s5   t  |  d ƒ t  |  | ƒ t  |  | ƒ t |  ƒ d S(   s.   Copy global variable *orig_name* to *new_name*s   __copy_global__()N(   R'   R.   (   R&   t	   orig_namet   new_name(    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyt   monitor_copy_globalW   s    t   Monitorc           B   sV   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   s   Monitor serverc         C   sÁ   t  i i |  ƒ |  i t ƒ t i t i ƒ |  _ |  i i | | f ƒ t	 |  i | ƒ h |  i
 d 6t d 6t d 6t d 6t d 6|  i d 6t d 6|  i d 6|  i d	 6|  i d
 6d  d 6|  _ d  S(   Nt   setlocalR   R   R   R   t   __make_remote_view__t   threadt   __set_global__t   __del_global__t   __copy_global__t   _(   t	   threadingt   Threadt   __init__t	   setDaemonR9   t   sockett   AF_INETt   requestt   connectR'   RB   R   R   R   R   R    RD   t	   setglobalt	   delglobalt
   copyglobalt   Nonet   locals(   t   selft   hostt   portt   shell_id(    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyRK   a   s     



c         C   s   | |  i  | <d S(   sf   
        Set local reference value
        Not used right now - could be useful in the future
        N(   RU   (   RV   R:   R   (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyRB   s   s    c         C   s   |  i  i d t i ƒ d S(   sA   
        Refresh Globals explorer in ExternalPythonShell
        t   xN(   RO   R"   RM   t   MSG_OOB(   RV   (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyt   refreshz   s    c         C   s%   t  i t |  i ƒ ƒ } t | | ƒ S(   s1   
        Return remote view of globals()
        (   R/   R0   R.   RO   R    (   RV   t   glbsR   (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyR    €   s    c         C   sE   d d k  l } t |  i ƒ } t i t |  i ƒ ƒ } | | | <d S(   s,   
        Set global reference value
        iÿÿÿÿ(   t   __dict__N(   t   __main__R^   R.   RO   R/   R0   (   RV   R]   R:   R   (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyRQ   ‡   s    c         C   s0   d d k  l } t |  i ƒ } | i | ƒ d S(   s&   
        Del global reference
        iÿÿÿÿ(   R^   N(   R_   R^   R.   RO   t   pop(   RV   R]   R:   (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyRR      s    c         C   s@   d d k  l } t |  i ƒ } t |  i ƒ } | | | | <d S(   s'   
        Copy global reference
        iÿÿÿÿ(   R^   N(   R_   R^   R.   RO   (   RV   R]   R>   R?   (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyRS   ˜   s    c         C   sË   d d k  l } x´ t o¬ yZ t |  i ƒ } t | | |  i ƒ } | |  i d <t i | t i	 ƒ } t
 |  i | ƒ Wq t j
 o? t i ƒ  } t i d | ƒ | i ƒ  } t
 |  i | ƒ q Xq Wd  S(   Niÿÿÿÿ(   R^   RH   t   file(   R_   R^   R9   R.   RO   t   evalRU   R/   R6   R7   R'   t   StandardErrort   StringIOt	   tracebackt	   print_exct   getvalue(   RV   R]   t   commandt   resultR4   t   outR   (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyt   run¡   s     (   t   __name__t
   __module__t   __doc__RK   RB   R\   R    RQ   RR   RS   Rk   (    (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyRA   _   s   									i N  c      
   C   s†   x t  ow z_ y5 t i t i t i t i ƒ } | i d |  f ƒ Wn" t i j
 o } |  d 7}  n XPWd | i ƒ  d } Xq W|  S(   s   Find and return a non used ports	   127.0.0.1i   N(	   R9   RM   RN   t   SOCK_STREAMt   IPPROTO_TCPt   bindt   errort   closeRT   (   RX   R&   t   _msg(    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyt   select_port³   s      
t   Serverc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s3   t  i i |  ƒ |  i t ƒ h  |  _ t ƒ  a d  S(   N(   RI   RJ   RK   RL   R9   t   shellsRu   t   SPYDER_PORT(   RV   (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyRK   Ç   s    	c         C   s   t  | ƒ } | |  i | <| S(   N(   t   NotificationThreadRw   (   RV   RY   t   shellt   nt(    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyt   registerÎ   s    c         C   s    t  i  t  i ƒ } | i t  i t  i d ƒ | i d t f ƒ x[ t oS | i d ƒ | i	 ƒ  \ } } t
 | ƒ } | |  i | i _ |  i | i ƒ  qA Wd  S(   Ni   s	   127.0.0.1i   (   RM   RN   t
   setsockoptt
   SOL_SOCKETt   SO_REUSEADDRRq   Rx   R9   t   listent   acceptR.   Rw   Rz   t   monitor_sockett   start(   RV   t   st   s2t   _addrRY   (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyRk   Ó   s     (   Rl   Rm   RK   R|   Rk   (    (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyRv   Æ   s   		c           C   s.   t  d j o t ƒ  a  t  i ƒ  n t  t f S(   s   Start server only one timeN(   t   SERVERRT   Rv   Rƒ   Rx   (    (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyt   start_serverá   s    	Ry   c           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   t  i |  | ƒ | |  _ d  S(   N(   R    RK   Rz   (   RV   Rz   (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyRK   ë   s    c         C   s_   xX t  oP y2 |  i i i d t i ƒ } |  i t d ƒ ƒ Wq t i j
 o Pq Xq Wd  S(   Ni   s	   refresh()(	   R9   Rz   R‚   R)   RM   R[   t   emitR   Rr   (   RV   t   _d(    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyRk   ï   s     (   Rl   Rm   RK   Rk   (    (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyRy   ê   s   	(-   Rn   RI   RM   Re   RD   Rd   R/   R#   t   PyQt4.QtCoreR    R   t   spyderlib.configR   t   spyderlib.utils.dochelpersR   R   R   R   t   spyderlib.widgets.dicteditorR   R   R	   R
   R   R    t   calcsizeR*   R'   R.   t   FalseR5   R8   R;   R<   R=   R@   RJ   RA   Rx   Ru   Rv   RT   R‡   Rˆ   Ry   (    (    (    sW   P:\graphics\Tools\Python26\lib\site-packages\spyderlib\widgets\externalshell\monitor.pyt   <module>   s.   0$"(									R		