3
 [ð]]  ã               @   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-build-w1as9q70/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   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ƒ}| jd d …= |S )Nr   )Újoinr   )r   Úvalr   r   r   Úreset2   s    zHTMLStringO.resetc             C   s&   t |tƒr|jddƒ}| jj|ƒ d S )Nzutf-8Úreplace)Ú
isinstanceÚbytesÚdecoder   Úappend)r   Úxr   r   r   Ú_write7   s    
zHTMLStringO._writec             C   s   | j t|ƒƒ d S )N)r#   r   )r   r"   r   r   r   Úwrite<   s    zHTMLStringO.writec             C   s   | j tdj|ƒƒƒ 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               @   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 )N)r   ÚsysÚstdoutr*   r
   Ú_localÚstreamr   r   r   r   ÚpushF   s    zThreadedStream.pushc              C   s(   y
t j} W n tk
r   dS X | jƒ S )Nr   )r-   r.   ÚAttributeErrorr   )r.   r   r   r   ÚfetchL   s
    
zThreadedStream.fetchc             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Ú_)r-   r.   r0   Ú_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)r0   )r   ÚnameÚvaluer   r   r   Ú__setattr__`   s    zThreadedStream.__setattr__c             C   s
   t tjƒS )N)Údirr+   Ú
__stdout__)r   r   r   r   Ú__dir__c   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__)r;   r+   r<   r-   r.   r0   Úgetattr)r   r8   r.   r   r   r   Ú__getattribute__f   s    

zThreadedStream.__getattribute__c             C   s
   t tjƒS )N)Úreprr+   r<   )r   r   r   r   Ú__repr__o   s    zThreadedStream.__repr__N)r&   r'   r(   r)   Ústaticmethodr/   r1   r7   r:   r=   r@   rB   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 )N)Ú_storage)r   r   r   r   r   y   s    z_ConsoleLoader.__init__c             C   s:   || j t|ƒ< x&|jD ]}t|tƒr|| j t|ƒ< qW d S )N)rE   Ú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)rE   rF   ÚKeyError)r   rH   r   r   r   Úget_source_by_codeƒ   s    z!_ConsoleLoader.get_source_by_codeN)r&   r'   r(   r   rK   rM   r   r   r   r   rD   x   s   rD   c                s   ˆj ‰ ‡ ‡fdd„}|ˆ_ d S )Nc                s   ˆ | ||ƒ}ˆj j|| ƒ |S )N)ÚloaderrK   )rI   ÚfilenameÚsymbolrH   )ÚcompileÚconsoler   r   Úfunc�   s    z_wrap_compiler.<locals>.func)rQ   )rR   rS   r   )rQ   rR   r   Ú_wrap_compilerŠ   s    rT   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j| |ƒ t|ƒ| _t| jd< t| jd< tƒ  | jd< | _d| _	g | _
t| ƒ d S )Nr   ÚhelpÚ
__loader__F)rH   ÚInteractiveInterpreterr   ÚdictÚglobalsr   r	   rD   rN   ÚmoreÚbufferrT   )r   rZ   r5   r   r   r   r   –   s    


z_InteractiveConsole.__init__c             C   sŒ   |j ƒ d }tjƒ  | jrdnd}zNdj| j|g ƒ}tj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)Úrstripr*   r/   r[   r   r\   rH   rX   Ú	runsourcer!   r1   r   )r   rI   ÚpromptZsource_to_evalÚoutputr   r   r   r_       s    
z_InteractiveConsole.runsourcec             C   s6   yt || j| jƒ W n tk
r0   | jƒ  Y nX d S )N)ÚevalrZ   r5   Ú	ExceptionÚshowtraceback)r   rH   r   r   r   Úruncode²   s    z_InteractiveConsole.runcodec             C   s*   ddl m} |dd�}tjj|jƒ ƒ d S )Nr   )Úget_current_traceback)Úskip)Útbtoolsrf   r+   r,   r#   Úrender_summary)r   rf   Útbr   r   r   rd   ¸   s    
z!_InteractiveConsole.showtracebackNc             C   s*   ddl m} |dd�}tjj|jƒ ƒ d S )Nr   )rf   é   )rg   )rh   rf   r+   r,   r#   ri   )r   rO   rf   rj   r   r   r   Úshowsyntaxerror¾   s    
z#_InteractiveConsole.showsyntaxerrorc             C   s   t jj|ƒ d S )N)r+   r,   r$   )r   Údatar   r   r   r$   Ä   s    z_InteractiveConsole.write)N)	r&   r'   r(   r   r_   re   rd   rl   r$   r   r   r   r   rU   •   s   

rU   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)rU   Ú_ipy)r   rZ   r5   r   r   r   r   Ë   s
    zConsole.__init__c             C   s(   | j t_tj}z| j j|ƒS |t_X d S )N)ro   r-   r4   r+   r,   r_   )r   rH   Zold_sys_stdoutr   r   r   rb   Ò   s
    zConsole.eval)NN)r&   r'   r(   r)   r   rb   r   r   r   r   rn   È   s   
rn   )r)   rH   r+   Útypesr   Úlocalr   Úutilsr   rA   r   r   r	   r-   Úobjectr
   r*   r7   r3   rD   rT   rX   rU   rn   r   r   r   r   Ú<module>
   s"   *13