U
    Ha	                     @   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-unpacked-wheel-ub1y1qyw/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 r   r   r   r   r   r   close   s    zHTMLStringO.closec                 C   s   d S r   r   r   r   r   r   flush   s    zHTMLStringO.flushr   )nmoder   c                 C   s   d S r   r   )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   _write0   s    
zHTMLStringO._writec                 C   s   |  t| d S r   )r)   r   r(   r   r   r   write5   s    zHTMLStringO.writec                 C   s   |  td| d S 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.Nr   c                   C   s*   t tjtsttjt t_t t_	d S r   )
r$   sysstdoutr5   r3   castTextIOr
   _localstreamr   r   r   r   push?   s    zThreadedStream.pushc                  C   s*   z
t j} W n tk
r    Y dS X |  S r   )r:   r;   AttributeErrorr!   )r;   r   r   r   fetchE   s
    
zThreadedStream.fetch)objr   c                 C   sN   z
t j}W n tk
r&   t|  Y S X | d k	rJ| t jjd< |t|  d S )N_)r:   r;   r=   _displayhook_current_ipylocalsr)   r   )r?   r;   r   r   r   displayhookM   s    
zThreadedStream.displayhook)namevaluer   c                 C   s   t d| d S )Nzread only attribute )r=   )r   rE   rF   r   r   r   __setattr__Y   s    zThreadedStream.__setattr__c                 C   s
   t tjS r   )dirr6   
__stdout__r   r   r   r   __dir__\   s    zThreadedStream.__dir__)rE   r   c                 C   s0   z
t j}W n tk
r$   tj}Y nX t||S r   )r:   r;   r=   r6   rI   getattr)r   rE   r;   r   r   r   __getattribute___   s
    
zThreadedStream.__getattribute__c                 C   s
   t tjS r   )reprr6   rI   r   r   r   r   __repr__f   s    zThreadedStream.__repr__)r,   r-   r.   r/   staticmethodr<   r2   r>   objectrD   r3   AnyrG   ListrJ   rL   rN   r   r   r   r   r5   <   s   r5   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 )_ConsoleLoaderNr   c                 C   s
   i | _ d S r   )_storager   r   r   r   r   p   s    z_ConsoleLoader.__init__)codesourcer   c                 C   s6   || j t|< |jD ]}t|tr|| j t|< qd S r   )rT   id	co_constsr$   r   )r   rU   rV   varr   r   r   registers   s    

z_ConsoleLoader.registerrU   r   c                 C   s,   z| j t| W S  tk
r&   Y d S X d S r   )rT   rW   KeyErrorr   rU   r   r   r   get_source_by_codez   s    z!_ConsoleLoader.get_source_by_code)
r,   r-   r.   r   r   r2   rZ   r3   Optionalr^   r   r   r   r   rS   o   s   rS   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 )_InteractiveConsolerC   NglobalsrC   r   c                    s^   t  _||ttjd}t | j ttttd fdd}|_d_	g _
d S )N)r   help
__loader__)rV   filenamesymbolr   c                    s    | ||}j ||  |S r   )loaderrZ   )rV   re   rf   rU   Zoriginal_compiler   r   r   compile   s    z-_InteractiveConsole.__init__.<locals>.compileF)rS   rg   r   r	   superr   ri   r2   r   morebuffer)r   rb   rC   ri   	__class__rh   r   r      s    z_InteractiveConsole.__init__)rV   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 5 t }X |t
| | S )	N
z... z>>> r   z
<debugger>ZsingleTF)rstripr5   r<   rk   r>   r   rl   rj   	runsourcer'   r   )r   rV   ro   promptoutputZsource_to_evalrm   r   r   rr      s    
z_InteractiveConsole.runsourcer[   c                 C   s2   zt || j W n tk
r,   |   Y nX d S r   )execrC   	Exceptionshowtracebackr]   r   r   r   runcode   s    z_InteractiveConsole.runcoder   c                 C   s*   ddl m} |dd}tj|  d S )Nr   get_current_tracebackskipZtbtoolsrz   r6   r7   r)   Zrender_summary)r   rz   tbr   r   r   rw      s    
z!_InteractiveConsole.showtraceback)re   r   c                 C   s*   ddl m} |dd}tj|  d S )Nr   ry      r{   r}   )r   re   rz   r~   r   r   r   showsyntaxerror   s    
z#_InteractiveConsole.showsyntaxerror)datar   c                 C   s   t j| d S r   )r6   r7   r*   )r   r   r   r   r   r*      s    z_InteractiveConsole.write)N)r,   r-   r.   r3   Dictr2   rQ   __annotations__r   rr   r   rx   rw   r_   r   r*   __classcell__r   r   rm   r   r`      s   
.r`   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.Nra   c                 C   s(   |d kri }|d kri }t ||| _d S r   )r`   _ipy)r   rb   rC   r   r   r   r      s
    zConsole.__init__r[   c                 C   s,   | j t_tj}z| j |W S |t_X d S r   )r   r:   rB   r6   r7   rr   )r   rU   Zold_sys_stdoutr   r   r   eval   s
    zConsole.eval)NN)r,   r-   r.   r/   r3   r_   r   r2   rQ   r   r   r   r   r   r   r      s     r   )rU   r6   typingr3   htmlr   typesr   localr   rM   r   r   r	   TYPE_CHECKINGZcodeopr:   r
   r5   rD   rA   rS   ZInteractiveInterpreterr`   r   r   r   r   r   <module>   s$   */>