B
    `                 @   s   d 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mZmZ ddlmZ e ZG dd deZG d	d
 d
eZejZeje_G dd deZdd ZG dd dejZG dd deZG dd deZdS )z
    werkzeug.debug.console
    ~~~~~~~~~~~~~~~~~~~~~~

    Interactive console support.

    :copyright: (c) 2011 by the Werkzeug Team, see AUTHORS for more details.
    :license: BSD.
    N)CodeType)binary_typeexec_text_)
debug_reprdumphelper)escapec               @   sb   e Zd ZdZdd Zdd Zdd Zdd	 ZdddZdd Z	dd Z
dd Zdd Zdd ZdS )HTMLStringOz-A StringO version that HTML escapes on write.c             C   s
   g | _ d S )N)_buffer)self r   d/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/pyramid_debugtoolbar/console.py__init__   s    zHTMLStringO.__init__c             C   s   dS )NFr   )r   r   r   r   isatty   s    zHTMLStringO.isattyc             C   s   d S )Nr   )r   r   r   r   close    s    zHTMLStringO.closec             C   s   d S )Nr   )r   r   r   r   flush#   s    zHTMLStringO.flushr   c             C   s   d S )Nr   )r   nmoder   r   r   seek&   s    zHTMLStringO.seekc             C   s(   t | jdkrdS | jd }| jd= |S )Nr    )lenr   )r   retr   r   r   readline)   s
    
zHTMLStringO.readlinec             C   s   d | j}| jd d = |S )Nr   )joinr   )r   valr   r   r   reset0   s    zHTMLStringO.resetc             C   s&   t |trt|dd}| j| d S )Nzutf-8replace)
isinstancer   r   r   append)r   xr   r   r   _write5   s    
zHTMLStringO._writec             C   s   |  t| d S )N)r!   r	   )r   r    r   r   r   write:   s    zHTMLStringO.writec             C   s   |  td| d S )Nr   )r!   r	   r   )r   r    r   r   r   
writelines=   s    zHTMLStringO.writelinesN)r   )__name__
__module____qualname____doc__r   r   r   r   r   r   r   r!   r"   r#   r   r   r   r   r
      s   
r
   c               @   s`   e Zd ZdZdd ZeeZdd ZeeZdd ZeeZdd	 Zd
d Z	dd Z
dd ZdS )ThreadedStreamz@Thread-local wrapper for sys.stdout for the interactive console.c               C   s    t tjtst t_t t_d S )N)r   sysstdoutr(   r
   _localstreamr   r   r   r   pushD   s    zThreadedStream.pushc              C   s(   y
t j} W n tk
r   dS X |  S )Nr   )r+   r,   AttributeErrorr   )r,   r   r   r   fetchK   s
    
zThreadedStream.fetchc             C   sJ   y
t j}W n tk
r"   t| S X | d k	rF| t jjd< |t|  d S )N_)r+   r,   r.   _displayhook_current_ipylocalsr!   r   )objr,   r   r   r   displayhookT   s    

zThreadedStream.displayhookc             C   s   t d| d S )Nzread only attribute %s)r.   )r   namevaluer   r   r   __setattr__a   s    zThreadedStream.__setattr__c             C   s
   t tjS )N)dirr)   
__stdout__)r   r   r   r   __dir__d   s    zThreadedStream.__dir__c             C   sB   |dkrt tjS y
tj}W n tk
r6   tj}Y nX t||S )N__members__)r9   r)   r:   r+   r,   r.   getattr)r   r6   r,   r   r   r   __getattribute__g   s    

zThreadedStream.__getattribute__c             C   s
   t tjS )N)reprr)   r:   )r   r   r   r   __repr__p   s    zThreadedStream.__repr__N)r$   r%   r&   r'   r-   staticmethodr/   r5   r8   r;   r>   r@   r   r   r   r   r(   A   s   	r(   c               @   s$   e Zd Zdd Zdd Zdd ZdS )_ConsoleLoaderc             C   s
   i | _ d S )N)_storage)r   r   r   r   r   z   s    z_ConsoleLoader.__init__c             C   s:   || j t|< x&|jD ]}t|tr|| j t|< qW d S )N)rC   id	co_constsr   r   )r   codesourcevarr   r   r   register}   s    
z_ConsoleLoader.registerc             C   s(   y| j t| S  tk
r"   Y nX d S )N)rC   rD   KeyError)r   rF   r   r   r   get_source_by_code   s    z!_ConsoleLoader.get_source_by_codeN)r$   r%   r&   r   rI   rK   r   r   r   r   rB   y   s   rB   c                s   j   fdd}|_ d S )Nc                s    | ||}j ||  |S )N)loaderrI   )rG   filenamesymbolrF   )compileconsoler   r   func   s    z_wrap_compiler.<locals>.func)rO   )rP   rQ   r   )rO   rP   r   _wrap_compiler   s    rR   c               @   s>   e Zd Zdd Zdd Zdd Zdd Zdd
dZdd Zd	S )_InteractiveConsolec             C   sV   t j| | t|| _t| jd< t| jd< t  | jd< | _d| _	g | _
t|  d S )Nr   help
__loader__F)rF   InteractiveInterpreterr   dictglobalsr   r   rB   rL   morebufferrR   )r   rX   r3   r   r   r   r      s    


z_InteractiveConsole.__init__c             C   s   |  d }t  | jrdp d}zNd| j|g }tj| |ddr\d| _| j	| nd| _| jd d = W d t
 }X || | S )	N
z... z>>> r   z
<debugger>ZsingleTF)rstripr(   r-   rY   r   rZ   rF   rV   	runsourcer   r/   )r   rG   promptZsource_to_evaloutputr   r   r   r]      s    
z_InteractiveConsole.runsourcec             C   s6   yt || j| j W n tk
r0   |   Y nX d S )N)r   rX   r3   	Exceptionshowtraceback)r   rF   r   r   r   runcode   s    z_InteractiveConsole.runcodec             C   s*   ddl m} |dd}tj|  d S )Nr   )get_current_traceback   )skip)pyramid_debugtoolbar.tbtoolsrc   r)   r*   r!   render_summary)r   rc   tbr   r   r   ra      s    
z!_InteractiveConsole.showtracebackNc             C   s*   ddl m} |dd}tj|  d S )Nr   )rc      )re   )rf   rc   r)   r*   r!   rg   )r   rM   rc   rh   r   r   r   showsyntaxerror   s    
z#_InteractiveConsole.showsyntaxerrorc             C   s   t j| d S )N)r)   r*   r"   )r   datar   r   r   r"      s    z_InteractiveConsole.write)N)	r$   r%   r&   r   r]   rb   ra   rj   r"   r   r   r   r   rS      s   

rS   c               @   s"   e Zd ZdZdddZdd ZdS )ConsolezAn interactive console.Nc             C   s(   |d kri }|d kri }t ||| _d S )N)rS   _ipy)r   rX   r3   r   r   r   r      s
    zConsole.__init__c             C   s(   | j t_tj}z| j |S |t_X d S )N)rm   r+   r2   r)   r*   r]   )r   rF   Zold_sys_stdoutr   r   r   eval   s
    zConsole.eval)NN)r$   r%   r&   r'   r   rn   r   r   r   r   rl      s   
rl   c               @   s   e Zd ZdZdd ZdS )_ConsoleFramez]Helper class so that we can reuse the frame console code for the
    standalone console.
    c             C   s   t || _d| _d S )Nr   )rl   rP   rD   )r   	namespacer   r   r   r      s    
z_ConsoleFrame.__init__N)r$   r%   r&   r'   r   r   r   r   r   ro      s   ro   )r'   rF   r)   	threadingtypesr   Zpyramid_debugtoolbar.compatr   r   r   Zpyramid_debugtoolbar.reprr   r   r   Zpyramid_debugtoolbar.utilsr	   localr+   objectr
   r(   r5   r1   rB   rR   rV   rS   rl   ro   r   r   r   r   <module>
   s"   *43