3
¥YðiX  ã               @   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-8om4l6ph/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