3
eX                 @   s   d dl Z d dlZd dl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 dd	l
mZ ejrnd dlZe	 ZG d
d dZG dd dZejZeje_G dd dZG dd de jZG dd dZdS )    N)escape)CodeType   )Local   )
debug_repr)dump)helperc               @   s   e Zd ZdZddddZedddZdddd	Zddd
dZde	e	ddddZ
edddZedddZeddddZeddddZeje ddddZdS )HTMLStringOz-A StringO version that HTML escapes on write.N)returnc             C   s
   g | _ d S )N)_buffer)self r   :/tmp/pip-build-3irwxpxt/Werkzeug/werkzeug/debug/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   )nmoder   c             C   s   d S )Nr   )r   r   r   r   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}| jd d = |S )Nr   )joinr   )r   valr   r   r   reset+   s    zHTMLStringO.reset)xr   c             C   s&   t |tr|jdd}| jj| d S )Nzutf-8replace)
isinstancebytesdecoder   append)r   r   r   r   r   _write0   s    
zHTMLStringO._writec             C   s   | j t| d S )N)r$   r   )r   r   r   r   r   write5   s    zHTMLStringO.writec             C   s   | j tdj| d S )Nr   )r$   r   r   )r   r   r   r   r   
writelines8   s    zHTMLStringO.writelines)r   )__name__
__module____qualname____doc__r   boolr   r   r   intr   strr   r   r$   r%   tIterabler&   r   r   r   r   r
      s   r
   c               @   s   e Zd ZdZeddddZeedddZeeddd	d
Z	ee
jddddZe
je dddZee
jdddZedddZdS )ThreadedStreamz@Thread-local wrapper for sys.stdout for the interactive console.N)r   c               C   s*   t tjtstjtjt t_t t_	d S )N)
r    sysstdoutr0   r.   castZTextIOr
   _localstreamr   r   r   r   push?   s    zThreadedStream.pushc              C   s(   y
t j} W n tk
r   dS X | j S )Nr   )r4   r5   AttributeErrorr   )r5   r   r   r   fetchE   s
    
zThreadedStream.fetch)objr   c             C   sJ   y
t j}W n tk
r"   t| S X | d k	rF| t jjd< |jt|  d S )N_)r4   r5   r7   _displayhook_current_ipylocalsr$   r   )r9   r5   r   r   r   displayhookM   s    

zThreadedStream.displayhook)namevaluer   c             C   s   t d| d S )Nzread only attribute )r7   )r   r?   r@   r   r   r   __setattr__Y   s    zThreadedStream.__setattr__c             C   s
   t tjS )N)dirr1   
__stdout__)r   r   r   r   __dir__\   s    zThreadedStream.__dir__)r?   r   c             C   s0   y
t j}W n tk
r$   tj}Y nX t||S )N)r4   r5   r7   r1   rC   getattr)r   r?   r5   r   r   r   __getattribute___   s
    
zThreadedStream.__getattribute__c             C   s
   t tjS )N)reprr1   rC   )r   r   r   r   __repr__f   s    zThreadedStream.__repr__)r'   r(   r)   r*   staticmethodr6   r-   r8   objectr>   r.   AnyrA   ListrD   rF   rH   r   r   r   r   r0   <   s   r0   c               @   sB   e Zd ZddddZeeddddZeeje dd	d
Z	dS )_ConsoleLoaderN)r   c             C   s
   i | _ d S )N)_storage)r   r   r   r   r   p   s    z_ConsoleLoader.__init__)codesourcer   c             C   s:   || j t|< x&|jD ]}t|tr|| j t|< qW d S )N)rN   id	co_constsr    r   )r   rO   rP   varr   r   r   registers   s    
z_ConsoleLoader.register)rO   r   c             C   s(   y| j t| S  tk
r"   d S X d S )N)rN   rQ   KeyError)r   rO   r   r   r   get_source_by_codez   s    z!_ConsoleLoader.get_source_by_code)
r'   r(   r)   r   r   r-   rT   r.   OptionalrV   r   r   r   r   rM   o   s   rM   c                   s   e Zd ZU ejeejf ejeejf ejeejf dd fddZeejed fddZ	e
ddd	d
ZddddZdeje ddddZeddddZ  ZS )_InteractiveConsoleN)globalsr=   r   c                sd   t  _||ttjd}t j| j ttttj	t
 d fdd}|_d_g _d S )N)r   help
__loader__)rP   filenamesymbolr   c                s&    | ||}|d k	r"j j||  |S )N)loaderrT   )rP   r\   r]   rO   )original_compiler   r   r   compile   s    z-_InteractiveConsole.__init__.<locals>.compileF)rM   r^   r   r	   superr   r`   r-   r.   rW   r   morebuffer)r   rY   r=   r`   )	__class__)r_   r   r   r      s     z_InteractiveConsole.__init__)rP   kwargsr   c                s   |j   d}tj  | jr dnd}zLdj| j|g }t j|ddr\d| _| jj| nd| _| jd d = W d tj	 }X |t
| | S )	N
z... z>>> r   z
<debugger>ZsingleTF)rstripr0   r6   rb   r   rc   ra   	runsourcer#   r8   r   )r   rP   re   promptZsource_to_evaloutput)rd   r   r   rh      s    
z_InteractiveConsole.runsource)rO   r   c             C   s2   yt || j W n tk
r,   | j  Y nX d S )N)execr=   	Exceptionshowtraceback)r   rO   r   r   r   runcode   s    z_InteractiveConsole.runcode)r   c             C   s*   ddl m} |dd}tjj|j  d S )Nr   )get_current_traceback)skip)tbtoolsro   r1   r2   r$   render_summary)r   ro   tbr   r   r   rm      s    
z!_InteractiveConsole.showtraceback)r\   r   c             C   s*   ddl m} |dd}tjj|j  d S )Nr   )ro      )rp   )rq   ro   r1   r2   r$   rr   )r   r\   ro   rs   r   r   r   showsyntaxerror   s    
z#_InteractiveConsole.showsyntaxerror)datar   c             C   s   t jj| d S )N)r1   r2   r%   )r   rv   r   r   r   r%      s    z_InteractiveConsole.write)N)r'   r(   r)   r.   Dictr-   rK   r=   r   rh   r   rn   rm   rW   ru   r%   __classcell__r   r   )rd   r   rX      s   
.rX   c               @   sX   e Zd ZdZd	ejejeejf  ejejeejf  ddddZ	eedddZ
dS )
ConsolezAn interactive console.N)rY   r=   r   c             C   s(   |d kri }|d kri }t ||| _d S )N)rX   _ipy)r   rY   r=   r   r   r   r      s
    zConsole.__init__)rO   r   c             C   s(   | j t_tj}z| j j|S |t_X d S )N)rz   r4   r<   r1   r2   rh   )r   rO   Zold_sys_stdoutr   r   r   eval   s
    zConsole.eval)NN)r'   r(   r)   r*   r.   rW   rw   r-   rK   r   r{   r   r   r   r   ry      s
    *ry   )rO   r1   typingr.   htmlr   typesr   localr   rG   r   r   r	   ZTYPE_CHECKINGZcodeopr4   r
   r0   r>   r;   rM   ZInteractiveInterpreterrX   ry   r   r   r   r   <module>   s$   */A