
s/Uc           @   s  d  Z  d Z d Z d Z d Z d d l Z d d l Z d d l Z d d l Z d d l	 Z	 d d l
 Z
 d d l Z d d l Z d d l Z d e j f d     YZ d	 e f d
     YZ d e f d     YZ d e f d     YZ d e e j f d     YZ d   Z d d d d  Z d d d d  Z e a d d d d  Z d   Z e d k rd e	 j k rte   n  i  Z  xN d d d f D]= Z! d e! j"   e j# k re j# d e! j"   e  e! <n  qWe	 j d re e    n d d l a t j e    n  d S(    sC   Queues(Pipe)-based independent remote client-server Python Debuggers%   Mariano Reingart (reingart@gmail.com)s#   Copyright (C) 2011 Mariano Reingarts   LGPL 3.0s   1.01biNt   Qdbc           B   s  e  Z d  Z e e e  g d  Z d   Z d   Z d   Z d   Z	 d   Z
 d. d  Z d. d  Z d	   Z d. d
  Z d. d d  Z d. d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d d. d  Z d   Z d   Z d   Z d   Z e d  Z  d   Z! d   Z" d    Z# d!   Z$ d"   Z% d#   Z& d$   Z' d%   Z( d&   Z) d. d'  Z* d(   Z+ d)   Z, d*   Z- d+   Z. d,   Z/ d-   Z0 RS(/   s   Qdb Debugger Backendc         C   s   i  } t  j d k r" | | d <n  t j j |  |  d  |  _ d |  _ t |  _	 | |  _
 t |  _ t |  _ d |  _ d  |  _ | r |  t  _ |  t  _ |  t  _ n  | r g  |  j d  <n  | |  _ d |  _ i  |  _ d  S(   Ni   i   t   skipi   t    i    (   i   i   (   t   syst   version_infot   bdbt   Bdbt   __init__t   Nonet   framet   it   Falset   waitingt   pipet   _wait_for_mainpyfilet   _wait_for_breakpointt
   mainpyfilet   _linenot   stdint   stdoutt   stderrt   breakst   allow_interruptionst   burstt   params(   t   selfR   t   redirect_stdioR   R   t   kwargs(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR      s*    												c         C   s   |  j  j   } | j d  d k r( d  Si d d 6| j d  d 6d  d 6d  d 6} y= t |  | d  } | j | d | j d	 i     | d <Wn1 t k
 r } i d
 d 6t |  d 6| d <n X| j d  r |  j  j |  n  t	 S(   Nt   methodt   runs   1.1t   versiont   idt   resultt   errort   argsR   i    t   codet   message(
   R   t   recvt   getR   t   getattrt   __call__t	   Exceptiont   strt   sendt   True(   R   t   requestt   responseR   t   e(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   pull_actions9   s    
"c         C   s   x& |  j  r( |  j j   r( |  j   q W|  j r6 d  S| d k rO |  j |  S| d k rk |  j | |  S| d k r |  j | |  S| d k r |  j | |  S|  j	 S(   Nt   linet   callt   returnt	   exception(
   R   R   t   pollR0   t   quittingt   dispatch_linet   dispatch_callt   dispatch_returnt   dispatch_exceptiont   trace_dispatch(   R   R	   t   eventt   arg(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR;   Q   s    	c         C   s<   |  j  s |  j r d S|  j |  r8 |  j | d  n  d S(   sn   This method is called when there is the remote possibility
        that we ever need to stop in this function.N(   R   R   t	   stop_heret   interactionR   (   R   R	   t   argument_list(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt	   user_callb   s    c         C   s   |  j  rJ |  j | j j  j |  j  s: | j d k r> d Sd |  _  n  |  j rr |  j |  sf d Sd |  _ n  |  j	 |  d S(   s;   This function is called when we stop or break at this line.i    N(
   R   t   canonict   f_codet   co_filenamet
   startswithR   t   f_linenoR   t
   break_hereR?   (   R   R	   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt	   user_linej   s    	"	c         C   s   |  j  s |  j r d S| \ } } } d j t j | | |   } t j |  } t j | |  d } i d d 6| | j | | | f d 6d d 6} |  j	 j
 |  |  j | |  d S(   so   This function is called if an exception occurs,
        but only if we are to stop at or just below this level.NR   i    R4   R   R"   R   (   R   R   t   joint	   tracebackt   format_exceptiont
   extract_tbt   format_exception_onlyt   __name__R   R   R+   R?   (   R   R	   t   infot   extypet   exvaluet   tracet   msgt   title(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   user_exceptionw   s    

c         O   s%   z t  j j |  | | |  SWd  Xd  S(   N(   R   R   R   (   R   R#   t   interpR"   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR      s    c         O   s.   z& | |  _  t j j |  | | |  SWd  Xd  S(   N(   RV   R   R   t   runcall(   R   t   functionRV   R"   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyRW      s    	c         C   s   d d  l  } d d  l } | j j   | j j i d d 6| d 6t d 6| d 6 d |  _ |  j |  |  _ d |  _	 d	 | } |  j
 j i d
 d 6t f d 6 x |  j   d  k	 r q W|  j |  d  S(   Nit   __main__RN   t   __file__t   __builtins__t   impi   i    s!   imp.load_source("__main__", "%s")t   startupR   R"   (   RY   R\   t   __dict__t   cleart   updateR[   R   RB   R   t   _user_requested_quitR   R+   t   __version__R0   R   R   (   R   t   filenameRY   R\   t	   statement(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt
   _runscript   s    		
!c   
   	   C   s  | r | j  p i  |  _ | j | j } } | j } t j j |  } d | | f } | j d k r{ d | | j f } n  t	 |  _
 | |  _ z$x|  j
 r| r | d  | d d k r t j j |  r t j | |  j j |  j j  } n d } |  j d 8_ |  j d k  ri  }	 |  j j d	  r?|  j   |	 d	 <n  |  j j d
  rd|  j   |	 d
 <n  |  j j i d d 6d  d 6| |  j j | f d 6|	 d 6 n  |  j   q WWd  t |  _
 Xd  |  _ d  S(   Ns   %s:%st   ?s   %s: %s()i   is   <>R   i    t
   call_stackt   environmentR?   R   R   R"   R   (   t   f_localst   frame_localsRC   RF   RD   t   ost   patht   basenamet   co_nameR,   R   R	   t   existst	   linecachet   getlinet	   f_globalsR   R   R&   t   do_wheret   do_environmentR   R+   R   R0   R   (
   R   R	   RO   R#   t   linenoRc   Rm   R$   R1   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR?      s8    			0
i   c         C   sv   |  j    | s | rY d |  _ | sD t j   j } | j j } n  |  j |  |  _ n  | |  _	 t j
 |  j  d  S(   Ni   (   t   resetR   R   t	   _getframet   f_backRC   RD   RB   R   R   t   settraceR;   (   R   R   t   wait_breakpointR	   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   do_debug   s    
		c         C   sM   | d  k r t j   j } n  | j j |  _ d |  _ t j	 j
 |  |  d  S(   Ni    (   R   R   Rw   Rx   RC   RD   R   R   R   R   t	   set_trace(   R   R	   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR|      s
    	c         C   s   |  j    t |  _ d  S(   N(   t   set_continueR   R   (   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   do_continue   s    
c         C   s   |  j    t |  _ d  S(   N(   t   set_stepR   R   (   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   do_step   s    
c         C   s   |  j  |  j  t |  _ d  S(   N(   t
   set_returnR	   R   R   (   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt	   do_return   s    c         C   s   |  j  |  j  t |  _ d  S(   N(   t   set_nextR	   R   R   (   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   do_next   s    c         C   s   |  j    d  S(   N(   R   (   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt	   interrupt   s    c         C   s   |  j    t |  _ d  S(   N(   t   set_quitR   R   (   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   do_quit   s    
c         C   sD   t  |  } y | |  j _ | SWn t k
 r? } d G| GHt SXd  S(   Ns   *** Jump failed:(   t   intR	   RF   t
   ValueErrorR   (   R   Ru   R=   R/   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   do_jump  s    	c         C   s`  d  } | r3 t | t  r* | \ } } qe | } n2 |  j sX t d |  j j d  } n |  j d } | d  k r~ | d } n  |  j j j } |  j	 |  } g  } x t
 | | d  D] } t j | | |  j j  } | s | j | | d |	 d f  Pq | | k rd n d }
 |  j j | k r-d n d }	 | j | | |
 |	 | f  | |  _ q W| S(   Ni   i   i
   R   s   <EOF>
t   Bs   ->(   R   t
   isinstancet   tupleR   t   maxR	   RF   RC   RD   t   get_file_breakst   rangeRp   Rq   Rr   t   append(   R   R=   t   lastt   firstRc   t	   breaklistt   linesRu   R1   t   currentt
   breakpoint(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   do_list
  s0    		c         C   s   t  | d  j   S(   Nt   Ur(   t   opent   read(   R   Rc   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   do_read'  s    i    c         C   s   |  j  | t |  | |  S(   N(   t	   set_breakR   (   R   Rc   Ru   t	   temporaryt   cond(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   do_set_breakpoint*  s    c      	   C   sm   g  } |  j  ri xW t j j D]F } | r | j | j | j | j | j | j	 | j
 | j f  q q Wn  | S(   N(   R   R   t
   Breakpointt
   bpbynumberR   t   numbert   fileR1   R   t   enabledt   hitsR   (   R   R   t   bp(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   do_list_breakpoint-  s    	)c         C   s   |  j  | |  d  S(   N(   t   clear_break(   R   Rc   Ru   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   do_clear_breakpoint6  s    c         C   s   |  j  |  d  S(   N(   t   clear_all_file_breaks(   R   Rc   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   do_clear_file_breakpoints9  s    c         C   s%   |  j  |  } | r! d G| GHn  d  S(   Ns   *** DO_CLEAR failed(   t   clear_bpbynumber(   R   R=   t   err(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   do_clear<  s    c         C   s@   t  | |  j j |  j  } | r< t j t |  d  } n  | S(   Ni   (   t   evalR	   Rr   Rj   t   pydoct   cramt   repr(   R   R=   t   safet   ret(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   do_evalB  s
    c         B   sk   |  j  } |  j j } e | d d d  } e j } d  |  _ z |  j e _ | | | UWd  | e _ X|  j S(   Ns   
s   <stdin>t   single(   Rj   R	   Rr   t   compileR   t   displayhookR   t   displayhook_value(   R   R=   t   localst   globalsR#   t   save_displayhook(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   do_execI  s    			
c         C   sv   |  j  |  j d  \ } } g  } xN | D]F \ } } | j j } t j | |  } | j | | d d | f  q( W| S(   t   print_stack_traceR   N(   t	   get_stackR	   R   RC   RD   Rp   Rq   R   (   R   t   stackt   curindexR   R	   Ru   Rc   R1   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyRs   V  s     c         C   s   i i  d 6i  d 6} |  j  r xO |  j j   D]> \ } } t j t |  d  t t |   f | d | <q- WxU |  j  j j   D]> \ } } t j t |  d  t t |   f | d | <q Wn  | S(   s1   return current frame local and global environmentR   R   i   i   (   R	   Rj   t   itemsR   R   R   t   typeRr   (   R   t   envt   namet   value(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyRt   `  s    		-	0c         C   s,   y |  j  |  } Wn g  SXt |  Sd S(   s5   Return list of auto-completion options for expressionN(   R   t   dir(   R   t
   expressiont   obj(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   get_autocomplete_listm  s
    c   
      C   s  y |  j  |  } Wn# t k
 r8 } d d t |  f SXd } y | j } Wn t k
 r_ n Xd } d } d } y t j |  r n t j |  r | j	 } d } n t j
 |  r t | d  r | j j	 } n3 x0 t j D]% } t | d  r | j j	 } Pq q W| d k	 rGd } qGn' t |  rG| } | j j	 } d } n  Wn t k
 r[n X| rt t j t j |   } n  d }	 t |  ry t j |  }	 WqqXn  | | d d !|	 j   f Sd S(   s5   Return list of auto-completion options for expressionR   i    i   R   iN(   R   R)   R*   RN   t   AttributeErrorR   t   inspectt	   isbuiltint   ismethodt   im_funct   isclasst   hasattrR   t   objectt	   __bases__t   callableR(   t   applyt   formatargspect
   getargspect   getdoct   strip(
   R   R   R   R/   R   t   argspect	   drop_selft   ft   baset   doc(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   get_call_tipv  sT    		c         C   s   | |  _  d S(   s?   Set burst mode -multiple command count- (shut up notifications)N(   R   (   R   t   val(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt	   set_burst  s    c         C   s   |  j  j |  d S(   s   Set parameters for interactionN(   R   R`   (   R   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt
   set_params  s    c         C   s   t  |  |  _ d S(   sp   Custom displayhook for the do_exec which prevents
        assignment of the _ variable in the builtins.
        N(   R   R   (   R   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s&   t  j j |   t |  _ d  |  _ d  S(   N(   R   R   Rv   R   R   R   R	   (   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyRv     s    	c         C   s   | d  k r: t j   d } | d  k r: t d   q: n  |  j   xP | d  k	 r | j } | j } | j | j } } | j	 } t
 j | |  } qG W|  j |  d  S(   Ni   sA   A valid traceback must be passed if no exception is being handled(   R   R   t   exc_infoR   Rv   t   tb_framet   tb_nextRC   RF   RD   Rp   Rq   R?   (   R   t   tR	   R#   Ru   Rc   R1   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   post_mortem  s    
			c         C   sT   i d d 6d d 6|  j  d 6} |  j j |  |  j j   } |  j  d 7_  | d S(   s    Replacement for stdin.readline()t   readlineR   R"   R   i   R    (    (   R
   R   R+   R%   (   R   RS   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s
    c         C   s7   g  } x* | d d g k r2 | j  |  j    q	 W| S(   s!   Replacement for stdin.readlines()is   
(   R   R   (   R   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt	   readlines  s    c         C   s2   i d d 6| f d 6d d 6} |  j j |  d S(   s   Replacement for stdout.write()t   writeR   R"   R   N(   R   R   R+   (   R   t   textRS   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s   t  |  j |  d  S(   N(   t   mapR   (   R   t   l(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt
   writelines  s    c         C   s   d  S(   N(    (   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   flush  s    c         C   s   d S(   Ni    (    (   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   isatty  s    N(1   RN   t
   __module__t   __doc__R,   R   R   R0   R;   RA   RH   RU   R   R   RW   Re   R?   R{   R|   R~   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   Rs   Rt   R   R   R   R   R   Rv   R   R   R   R   R   R   R   (    (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR       sZ   						(
																	
				3									t	   QueuePipec           B   sD   e  Z d  Z d   Z d   Z d d d  Z d d  Z d   Z RS(   s-   Simulated pipe for threads (using two queues)c         C   s   | |  _  | |  _ | |  _ d  S(   N(   t   _QueuePipe__namet   in_queuet	   out_queue(   R   R   R   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    		c         C   s   |  j  j | d t d  S(   Nt   block(   R   t   putR,   (   R   t   data(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR+     s    c         C   s   |  j  j d t d |  } | S(   NR   t   timeout(   R   R&   R,   (   R   t   countR   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR%     s    c         C   s   |  j  j   S(   N(   R   t   empty(   R   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR5     s    c         C   s   d  S(   N(    (   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   close  s    N(	   RN   R   R   R   R+   R   R%   R5   R   (    (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s   		t   RPCErrorc           B   s   e  Z d  Z RS(   s!   Remote Error (not user exception)(   RN   R   R   (    (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s   t   Frontendc           B   sI  e  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" d  Z d" d  Z d" d  Z d" d  Z d   Z d" d  Z d" d  Z d   Z d   Z d" d  Z d   Z d d" d  Z d   Z d   Z d   Z d   Z d   Z d   Z  d   Z! d    Z" d!   Z# RS(#   s   Qdb generic Frontend interfacec         C   s=   d |  _  | |  _ g  |  _ t j   |  _ t j   |  _ d  S(   Ni   (   R
   R   t   notifiest	   threadingt   RLockt	   read_lockt
   write_lock(   R   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s
    			c         C   s3   |  j  j   z |  j j   SWd  |  j  j   Xd  S(   N(   R  t   acquireR   R%   t   release(   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR%     s    c         C   s6   |  j  j   z |  j j |  SWd  |  j  j   Xd  S(   N(   R  R  R   R+   R  (   R   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR+     s    c         C   s&   |  j  i d d 6d d 6d  d 6 d  S(   NR   R   R"   R   (    (   R+   R   (   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR]   #  s    c         G   s
   t   d  S(   N(   t   NotImplementedError(   R   Rc   Ru   R1   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR?   &  s    c         C   s
   t   d S(   s   Show a user_exceptionN(   R  (   R   RT   RP   RQ   RR   R-   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR4   )  s    c         C   s
   t   d S(   s   Console output (print)N(   R  (   R   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR   -  s    c         C   s
   t   d S(   s   Console input/rawinputN(   R  (   R   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR   1  s    c         C   sD   |  j  r@ |  j s! |  j   } n |  j j d  } |  j |  Sd S(   s&   Main method dispatcher (infinite loop)i    N(   R   R  R%   t   popt   process_message(   R   R-   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR   5  s
    		c         C   sR  | rNd  } | j d  r2 t t d d   n | j d  d k rl |  j | j d  | j d    n | j d  d k r |  j   n{ | j d  d k r |  j | d   nR | j d  d	 k r |  j | j d    n$ | j d  d
 k r	|  j   } n  | rJi d d 6| j d  d 6| d 6d  d 6} |  j	 |  n  t
 Sd  S(   NR!   R$   R   R?   R"   R   R]   R4   R   R   s   1.1R   R   R    (   R   R&   R   t   resR?   R]   R4   R   R   R+   R,   (   R   R-   R    R.   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR
  @  s(    %
c         G   s   i | d 6| d 6|  j  d 6} |  j |  |  j  d 7_  x |  j   } d | k s` | d rp |  j |  q= d | k r |  j |  q= t | d  t | d  k r d G| d G| d GHq= d | k r | d r t | d d   q= | d Sq= d	 S(
   s3   Actually call the remote method (inside the thread)R   R"   R   i   R    s,   DEBUGGER wrong packet received: expecting idR!   R$   N(   R
   R+   R%   R
  t   longR   (   R   R   R"   t   reqR  (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR2   X  s     c         C   s   |  j  d  d S(   s=   Execute the current line, stop at the first possible occasionR   N(   R2   (   R   R=   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR   o  s    c         C   s   |  j  d  d S(   s7   Execute the current line, do not stop at function callsR   N(   R2   (   R   R=   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR   s  s    c         C   s   |  j  d  d S(   s?   Continue execution, only stop when a breakpoint is encountered.R~   N(   R2   (   R   R=   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR~   w  s    c         C   s   |  j  d  d S(   s5   Continue execution until the current function returnsR   N(   R2   (   R   R=   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR   {  s    c         C   s   |  j  d |  } | GHd S(   s(   Set the next line that will be executed.R   N(   R2   (   R   R=   R  (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s   |  j  d  S(   s>   Print a stack trace, with the most recent frame at the bottom.Rs   (   R2   (   R   R=   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyRs     s    c         C   s   |  j  d  d S(   s>   Quit from the debugger. The program being executed is aborted.R   N(   R2   (   R   R=   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s   |  j  d |  S(   s#   Inspect the value of the expressionR   (   R2   (   R   t   expr(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s   |  j  d  S(   sA   List all the locals and globals variables (string representation)Rt   (   R2   (   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyRt     s    c         C   s   |  j  d |  S(   s%   List source code for the current fileR   (   R2   (   R   R=   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s   |  j  d |  S(   s   Read and send a local filenameR   (   R2   (   R   Rc   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    i    c         C   s   |  j  d | | | |  d S(   s'   Set a breakpoint at filename:breakpointR   N(   R2   (   R   Rc   Ru   R   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s   |  j  d | |  d S(   s*   Remove a breakpoint at filename:breakpointR   N(   R2   (   R   Rc   Ru   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s   |  j  d | t  d S(   s"   Remove all breakpoints at filenamet   do_clear_breakpointsN(   R2   Ru   (   R   Rc   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s   |  j  d  S(   s   List all breakpointsR   (   R2   (   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s   |  j  d |  S(   NR   (   R2   (   R   Rd   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s   |  j  d |  S(   NR   (   R2   (   R   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s   |  j  d |  S(   NR   (   R2   (   R   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s%   i d d 6d d 6} |  j  |  d S(   sE   Immediately stop at the first possible occasion (outside interaction)R   R   R"   N(    (   R+   (   R   R  (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s(   i d d 6| f d 6} |  j  |  d  S(   NR   R   R"   (   R+   (   R   R   R  (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s(   i d d 6| f d 6} |  j  |  d  S(   NR   R   R"   (   R+   (   R   R   R  (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    N($   RN   R   R   R   R%   R+   R]   R?   R4   R   R   R   R
  R2   R   R   R   R~   R   R   Rs   R   R   Rt   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     sB   																							t   Clic           B   s  e  Z d  Z d d d d d  Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 e j j Z e j Z e j Z e j Z e j Z e j Z e j Z d	   Z d
   Z d   Z d d  Z d d  Z  d   Z! e! Z" e Z# e Z$ e Z% e Z& d   Z' d   Z( RS(   s$   Qdb Front-end command line interfacet   tabc         C   s-   t  j j |  | | |  t j |  |  d  S(   N(   t   cmdt   CmdR   R   (   R   R   t   completekeyR   R   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s>   x7 y t  j |   Wq t k
 r6 d GH|  j   q Xq d  S(   Ns   Interupting...(   R   R   t   KeyboardInterruptR   (   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s(   d | | | f G| |  _  |  j   d  S(   Ns   > %s(%d)
-> %s(   Rc   t   cmdloop(   R   Rc   Ru   R1   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR?     s    	c         C   s$   d d GHd G| GH| GHd d GHd  S(   Nt   =iP   R)   t   -(    (   R   RT   RP   RQ   RR   R-   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR4     s    		c         C   s   | Gd  S(   N(    (   R   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s   t    S(   N(   t	   raw_input(   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s   | j  d  S(   Nt   h(   RE   (   R   t   stopR1   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   postcmd  s    c         C   s   t  j |  |  GHd S(   s#   Inspect the value of the expressionN(   R   R   (   R   R"   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s;   t  j |  | r! t | i  i   n d  } |  j |  d S(   s%   List source code for the current fileN(   R   R   R   R   t   print_lines(   R   R"   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    *c         C   s    t  j |   } |  j |  d S(   s>   Print a stack trace, with the most recent frame at the bottom.N(   R   Rs   R  (   R   R"   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyRs     s    c         C   sq   t  j |   } x[ | D]S } d d GH| j   GHd d GHx- | | j   D] \ } } d | | f GHqJ Wq Wd  S(   NR  iN   R  s
   %-12s = %s(   R   Rt   t
   capitalizeR   (   R   R"   R   t   keyR   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyRt      s    		c         C   s3   t  j |   } d GHx | D] } d | GHq WHd S(   s   List all breakpointss:   Num File                          Line Temp Enab Hits Conds   %-4d%-30s%4d %4s %4s %4d %sN(   R   R   (   R   R=   R   R   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR   	  s
    c         C   sT   | rF d | k r$ | j  d  } n |  j | f } t j |  |  n
 |  j   d S(   s'   Set a breakpoint at filename:breakpointt   :N(   t   splitRc   R   R   R   (   R   R=   R"   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR     s    c         C   s2   | d  d k r% |  j  | d  GHn	 d G| GHd S(   s   Default commandi   t   !s   *** Unknown command: N(   R   (   R   R1   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   default"  s    c         C   s<   x4 | D], \ } } } } } d | | | | | f Gq WHd  S(   Ns   %s:%4d%s%s	%s(    (   R   R   Rc   Ru   R   R   t   source(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR  )  s    N()   RN   R   R   R   R   R   R?   R4   R   R   R  R  R  t   do_helpt   do_hR   R   t   do_sR   t   do_nR~   t   do_cR   t   do_rR   t   do_jR   t   do_qR   R   Rs   Rt   R   R   t   do_bt   do_lt   do_pt   do_wt   do_eR#  R  (    (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR    s8   																		c          C   sN  d   }  d t  j k rX d d l m } m } |   \ } } | d |  d | f  } no d d l m } d d l m } |   |   } }	 t d	 | |	  }
 t d
 |	 |  } | d |  d | f  } | j	   d d  l
 } d t f d     Y} | |
  } | j d  x1 d GHt j |  | j d  d GH| j   q| j   d  S(   Nc         S   sA   d GHt  d |  d t  } d GHd } | j   d GHd GHt d  S(   Ns   creating debuggerR   R   s	   set traces   Mariano!s   hello world!s   good by!(   R    R   R|   t   saraza(   R   t   qdbt   my_var(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR   0  s    
s	   --processi(   t   Processt   Pipet   targetR"   (   t   Thread(   t   Queuet   parentt   childt   Testc           B   s   e  Z d    Z d   Z RS(   c         W   s   d G| GHd  S(   Ns   interaction!(    (   R   R"   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR?   K  s    c         W   s   d G| GHd  S(   NR4   (    (   R   R"   (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR4   N  s    (   RN   R   R?   R4   (    (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR<  J  s   	i   s
   running...i   R   (   R   t   argvt   multiprocessingR5  R6  R  R8  R9  R   t   startt   timeR   t   sleepR   R   RI   (   R   R5  R6  R   t
   child_connt   pR8  R9  t   parent_queuet   child_queuet
   front_connR@  R<  R3  (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   test/  s.    	
t	   localhostip  s   secret passwordc         C   su   |  | f } d d l  m } d G| GH| | d | } z, y t |  j   Wn t k
 ra n XWd | j   Xd S(   s%   Connect to a running debugger backendi(   t   Clients/   qdb debugger fronted: waiting for connection tot   authkeyN(   t   multiprocessing.connectionRI  R  R   t   EOFErrorR   (   t   hostt   portRJ  t   addressRI  t   conn(    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   connect^  s    	 c   	      C   sf  t  j d s! t  j d d k r6 d GHt  j d  n  t  j d } t j j |  sr d G| Gd GHt  j d  n  t  j d =t j j |  t  j d <d	 d
 l m } |  | f } | | d | } d G| GH| j	   } d G| j
 GHt | d t d t } y d G| GH| j |  d GHWn0 t k
 rDd Gt  j   d GH  n
   n X| j   | j   d S(   s+   Debug a script and accept a remote frontendi   s   --helps   -hs"   usage: pdb.py scriptfile [arg] ...i   s   Error:s   does not existi    i(   t   ListenerRJ  s/   qdb debugger backend: waiting for connection ats"   qdb debugger backend: connected toR   R   t   runnings   The program finisheds0   The program exited via sys.exit(). Exit status: N(   s   --helps   -h(   R   R=  t   exitRk   Rl   Ro   t   dirnameRK  RR  t   acceptt   last_acceptedR    R,   Re   t
   SystemExitR   R   (	   RM  RN  RJ  R   RR  RO  t   listenerRP  R3  (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   mainn  s8    !
			
c         C   s]   d d l  m } t sO |  | f } | | d | a t j   a t t  a n  t j   d S(   s.   Simplified interface to debug running programsi(   RR  RJ  N(   RK  RR  R3  RY  RV  RP  R    R|   (   RM  RN  RJ  RR  RO  (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyR|     s    c           C   sR   t  r t j d  d a  n  t r5 t j   d a n  t rN t j   d a n  d S(   s   Remove trace and quitN(   R3  R   Ry   R   RP  R   RY  (    (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   quit  s    	
	
RY   s   --testRM  RN  RJ  s   QDB_%si   ($   R   t
   __author__t   __copyright__t   __license__Rb   R   R   Rp   Rk   R   RJ   R  R   R  R   R    R   R   t   RuntimeErrorR   R   R  R  RG  RQ  RZ  R   R3  R|   R[  RN   R=  R   t   paramt   uppert   environ(    (    (    s;   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/qdb.pyt   <module>   sH    k	/*	
"