U
    (Q^]                     @   s   d 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 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dS )z
    werkzeug.debug.console
    ~~~~~~~~~~~~~~~~~~~~~~

    Interactive console support.

    :copyright: 2007 Pallets
    :license: BSD-3-Clause
    N)CodeType   )Local)escape   )
debug_repr)dump)helperc                   @   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   </tmp/pip-install-bd4o36v9/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 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   c                 C   s   d S r   r   )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   reset2   s    zHTMLStringO.resetc                 C   s&   t |tr|dd}| j| d S )Nzutf-8replace)
isinstancebytesdecoder   appendr   xr   r   r   _write7   s    
zHTMLStringO._writec                 C   s   |  t| d S r   )r'   r   r%   r   r   r   write<   s    zHTMLStringO.writec                 C   s   |  td| d S 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                   @   sT   e Zd ZdZedd Zedd Zedd 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 r   )r!   sysstdoutr.   r
   _localstreamr   r   r   r   pushF   s    zThreadedStream.pushc                  C   s*   z
t j} W n tk
r    Y dS X |  S r   )r1   r2   AttributeErrorr   )r2   r   r   r   fetchL   s
    
zThreadedStream.fetchc                 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_)r1   r2   r4   _displayhook_current_ipylocalsr'   r   )objr2   r   r   r   displayhookT   s    
zThreadedStream.displayhookc                 C   s   t d| d S )Nzread only attribute %s)r4   )r   namevaluer   r   r   __setattr__`   s    zThreadedStream.__setattr__c                 C   s
   t tjS r   )dirr/   
__stdout__r   r   r   r   __dir__c   s    zThreadedStream.__dir__c                 C   sB   |dkrt tjS z
tj}W n tk
r6   tj}Y nX t||S )N__members__)r?   r/   r@   r1   r2   r4   getattr)r   r<   r2   r   r   r   __getattribute__f   s    

zThreadedStream.__getattribute__c                 C   s
   t tjS r   )reprr/   r@   r   r   r   r   __repr__o   s    zThreadedStream.__repr__N)r*   r+   r,   r-   staticmethodr3   r5   r;   r>   rA   rD   rF   r   r   r   r   r.   C   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 r   )_storager   r   r   r   r   y   s    z_ConsoleLoader.__init__c                 C   s6   || j t|< |jD ]}t|tr|| j t|< qd S r   )rI   id	co_constsr!   r   )r   codesourcevarr   r   r   register|   s    

z_ConsoleLoader.registerc                 C   s*   z| j t| W S  tk
r$   Y nX d S r   )rI   rJ   KeyErrorr   rL   r   r   r   get_source_by_code   s    z!_ConsoleLoader.get_source_by_codeN)r*   r+   r,   r   rO   rR   r   r   r   r   rH   x   s   rH   c                    s   j   fdd}|_ d S )Nc                    s    | ||}j ||  |S r   )loaderrO   )rM   filenamesymbolrL   compileconsoler   r   func   s    z_wrap_compiler.<locals>.func)rW   )rX   rY   r   rV   r   _wrap_compiler   s    rZ   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)rL   InteractiveInterpreterr   dictglobalsr   r	   rH   rS   morebufferrZ   r   r`   r9   r   r   r   r      s    


z_InteractiveConsole.__init__c                 C   s   |  d }t  | jrdnd}zNd| j|g }tj	| |ddr\d| _| j
| nd| _| jd d = W 5 t }X |t| | S )	N
z... z>>> r   z
<debugger>ZsingleTF)rstripr.   r3   ra   r5   r   rb   rL   r^   	runsourcer$   r   )r   rM   promptoutputZsource_to_evalr   r   r   rf      s"       
z_InteractiveConsole.runsourcec                 C   s6   zt || j| j W n tk
r0   |   Y nX d S r   )evalr`   r9   	ExceptionshowtracebackrQ   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Ztbtoolsrn   r/   r0   r'   Zrender_summary)r   rn   tbr   r   r   rk      s    
z!_InteractiveConsole.showtracebackNc                 C   s*   ddl m} |dd}tj|  d S )Nr   rm      ro   rq   )r   rT   rn   rr   r   r   r   showsyntaxerror   s    
z#_InteractiveConsole.showsyntaxerrorc                 C   s   t j| d S r   )r/   r0   r(   )r   datar   r   r   r(      s    z_InteractiveConsole.write)N)	r*   r+   r,   r   rf   rl   rk   rt   r(   r   r   r   r   r[      s   

r[   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 r   )r[   _ipyrc   r   r   r   r      s
    zConsole.__init__c                 C   s,   | j t_tj}z| j |W S |t_X d S r   )rw   r1   r8   r/   r0   rf   )r   rL   Zold_sys_stdoutr   r   r   ri      s
    zConsole.eval)NN)r*   r+   r,   r-   r   ri   r   r   r   r   rv      s   
rv   )r-   rL   r/   typesr   localr   utilsr   rE   r   r   r	   r1   objectr
   r.   r;   r7   rH   rZ   r^   r[   rv   r   r   r   r   <module>   s"   	*13