B
    }hb@                 @   s   U 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rpd dlZed	Zed
 ed< edZeed< 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)
ContextVar)CodeType)escape   )
debug_repr)dump)helperzwerkzeug.debug.console.streamHTMLStringO_streamzwerkzeug.debug.console.ipy_ipyc               @   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 )r	   z-A StringO version that HTML escapes on write.N)returnc             C   s
   g | _ d S )N)_buffer)self r   5lib/python3.7/site-packages/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d d = |S )Nr   )joinr   )r   valr   r   r   reset-   s    zHTMLStringO.reset)xr   c             C   s&   t |tr|dd}| j| d S )Nzutf-8replace)
isinstancebytesdecoder   append)r   r   r   r   r   _write2   s    
zHTMLStringO._writec             C   s   |  t| d S )N)r%   r   )r   r   r   r   r   write7   s    zHTMLStringO.writec             C   s   |  td| d S )Nr   )r%   r   r   )r   r   r   r   r   
writelines:   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   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tjt t_tt	  d S )N)
r!   sysstdoutr1   r/   castZTextIOr
   setr	   r   r   r   r   pushA   s    zThreadedStream.pushc              C   s*   yt  } W n tk
r    dS X |  S )Nr   )r
   getLookupErrorr   )streamr   r   r   fetchH   s
    zThreadedStream.fetch)objr   c             C   sN   yt  }W n tk
r$   t| S X | d k	rJ| t jd< |t|  d S )N_)r
   r7   r8   _displayhookr   localsr%   r   )r;   r9   r   r   r   displayhookQ   s    
zThreadedStream.displayhook)namevaluer   c             C   s   t d| d S )Nzread only attribute )AttributeError)r   r@   rA   r   r   r   __setattr__^   s    zThreadedStream.__setattr__c             C   s
   t tjS )N)dirr2   
__stdout__)r   r   r   r   __dir__a   s    zThreadedStream.__dir__)r@   r   c             C   s2   yt  }W n tk
r&   tj}Y nX t||S )N)r
   r7   r8   r2   rE   getattr)r   r@   r9   r   r   r   __getattribute__d   s
    zThreadedStream.__getattribute__c             C   s
   t tjS )N)reprr2   rE   )r   r   r   r   __repr__l   s    zThreadedStream.__repr__)r(   r)   r*   r+   staticmethodr6   r.   r:   objectr?   r/   AnyrC   ZListrF   rH   rJ   r   r   r   r   r1   >   s   r1   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   v   s    z_ConsoleLoader.__init__)codesourcer   c             C   s:   || j t|< x&|jD ]}t|tr|| j t|< qW d S )N)rO   id	co_constsr!   r   )r   rP   rQ   varr   r   r   registery   s    
z_ConsoleLoader.register)rP   r   c             C   s(   y| j t| S  tk
r"   d S X d S )N)rO   rR   KeyError)r   rP   r   r   r   get_source_by_code   s    z!_ConsoleLoader.get_source_by_code)
r(   r)   r*   r   r   r.   rU   r/   OptionalrW   r   r   r   r   rN   u   s   rN   c                   s   e Zd ZU ejeejf ed< 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 )_InteractiveConsoler>   N)globalsr>   r   c                sd   t  _||ttjd}t | j ttttj	t
 d fdd}|_d_g _d S )N)r   help
__loader__)rQ   filenamesymbolr   c                s&    | ||}|d k	r"j ||  |S )N)loaderrU   )rQ   r]   r^   rP   )original_compiler   r   r   compile   s    z-_InteractiveConsole.__init__.<locals>.compileF)rN   r_   r   r   superr   ra   r.   r/   rX   r   morebuffer)r   rZ   r>   ra   )	__class__)r`   r   r   r      s     z_InteractiveConsole.__init__)rQ   kwargsr   c                s   |   d}t  | jr dnd}zLd| j|g }t |ddr\d| _| j| nd| _| jd d = W d t	 }X | t
| | S )	N
z... z>>> r   z
<debugger>ZsingleTF)rstripr1   r6   rc   r   rd   rb   	runsourcer$   r:   r   )r   rQ   rf   promptZsource_to_evaloutput)re   r   r   ri      s    
z_InteractiveConsole.runsource)rP   r   c             C   s2   yt || j W n tk
r,   |   Y nX d S )N)execr>   	Exceptionshowtraceback)r   rP   r   r   r   runcode   s    z_InteractiveConsole.runcode)r   c             C   s@   ddl m} ttt d }||dd}tj|	  d S )Nr   )DebugTraceback)skip)
tbtoolsrp   r/   r4   BaseExceptionr2   exc_infor3   r%   render_traceback_html)r   rp   excter   r   r   rn      s    z!_InteractiveConsole.showtraceback)r]   r   c             C   s@   ddl m} ttt d }||dd}tj|	  d S )Nr   )rp      )rq   )
rr   rp   r/   r4   rs   r2   rt   r3   r%   ru   )r   r]   rp   rv   rw   r   r   r   showsyntaxerror   s    z#_InteractiveConsole.showsyntaxerror)datar   c             C   s   t j| d S )N)r2   r3   r&   )r   rz   r   r   r   r&      s    z_InteractiveConsole.write)N)r(   r)   r*   r/   Dictr.   rM   __annotations__r   ri   r   ro   rn   rX   ry   r&   __classcell__r   r   )re   r   rY      s   
.rY   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)rZ   r>   r   c             C   s(   |d kri }|d kri }t ||| _d S )N)rY   r   )r   rZ   r>   r   r   r   r      s
    zConsole.__init__)rP   r   c             C   s,   t | j  tj}z| j |S |t_X d S )N)r   r5   r2   r3   ri   )r   rP   Zold_sys_stdoutr   r   r   eval   s
    zConsole.eval)NN)r(   r)   r*   r+   r/   rX   r{   r.   rM   r   r   r   r   r   r   r~      s
    *r~   )rP   r2   typingr/   Zcontextvarsr   typesr   Z
markupsafer   rI   r   r   r   ZTYPE_CHECKINGZcodeopr
   r|   r   r	   r1   r?   r=   rN   ZInteractiveInterpreterrY   r~   r   r   r   r   <module>   s(    *3C