U
    /v¶hÉ  ã                   @  sê   U d dl mZ 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d
ƒZded< edƒZd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 )é    )ÚannotationsN)Ú
ContextVar)ÚCodeType)Úescapeé   )Ú
debug_repr)Údump)Úhelperzwerkzeug.debug.console.streamzContextVar[HTMLStringO]Ú_streamzwerkzeug.debug.console.ipyzContextVar[_InteractiveConsole]Ú_ipyc                   @  s¨   e Zd ZdZddœdd„Zddœdd„Zddœd	d
„Zddœdd„Zd ddddœdd„Zddœdd„Z	ddœdd„Z
dddœdd„Zdddœdd„Zdddœdd„ZdS )!ÚHTMLStringOz-A StringO version that HTML escapes on write.ÚNone©Úreturnc                 C  s
   g | _ d S ©N)Ú_buffer©Úself© r   ú:/tmp/pip-unpacked-wheel-c3xdgso7/werkzeug/debug/console.pyÚ__init__   s    zHTMLStringO.__init__Úboolc                 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   Úint)ÚnÚmoder   c                 C  s   d S r   r   )r   r   r   r   r   r   Úseek"   s    zHTMLStringO.seekÚstrc                 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   | j  |¡ d S r   )r   Úappend©r   r(   r   r   r   Ú_write1   s    zHTMLStringO._writec                 C  s   |   t|ƒ¡ d S r   )r+   r   r*   r   r   r   Úwrite4   s    zHTMLStringO.writezt.Iterable[str]c                 C  s   |   td |¡ƒ¡ d S r$   )r+   r   r%   r*   r   r   r   Ú
writelines7   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                   @  s†   e Zd ZdZeddœdd„ƒZeddœdd„ƒZed	dd
œdd„ƒZddddœdd„Zddœdd„Z	dddœdd„Z
ddœdd„ZdS )ÚThreadedStreamz@Thread-local wrapper for sys.stdout for the interactive console.r   r   c                   C  s.   t tjtƒst tjtƒ ¡t_t t	ƒ ¡ d S r   )
Ú
isinstanceÚsysÚstdoutr2   ÚtÚcastÚTextIOr
   Úsetr   r   r   r   r   Úpush>   s    zThreadedStream.pushr   c                  C  s,   zt  ¡ } W n tk
r"   Y dS X |  ¡ S r$   )r
   ÚgetÚLookupErrorr'   )Ústreamr   r   r   ÚfetchE   s
    zThreadedStream.fetchÚobject)Úobjr   c                 C  sR   zt  ¡ }W n tk
r(   t| ƒ Y S X | d k	rN| t ¡ jd< | t| ƒ¡ d S )NÚ_)r
   r;   r<   Ú_displayhookr   Úlocalsr+   r   )r@   r=   r   r   r   ÚdisplayhookN   s    zThreadedStream.displayhookút.Any)ÚnameÚvaluer   c                 C  s   t d|› �ƒ‚d S )Nzread only attribute )ÚAttributeError)r   rF   rG   r   r   r   Ú__setattr__[   s    zThreadedStream.__setattr__z	list[str]c                 C  s
   t tjƒS r   )Údirr4   Ú
__stdout__r   r   r   r   Ú__dir__^   s    zThreadedStream.__dir__)rF   r   c                 C  s2   zt  ¡ }W n tk
r&   tj}Y nX t||ƒS r   )r
   r;   r<   r4   rK   Úgetattr)r   rF   r=   r   r   r   Ú__getattribute__a   s
    zThreadedStream.__getattribute__c                 C  s
   t tjƒS r   )Úreprr4   rK   r   r   r   r   Ú__repr__i   s    zThreadedStream.__repr__N)r.   r/   r0   r1   Ústaticmethodr:   r>   rD   rI   rL   rN   rP   r   r   r   r   r2   ;   s   r2   c                   @  s<   e Zd Zddœdd„Zddddœdd	„Zdd
dœdd„ZdS )Ú_ConsoleLoaderr   r   c                 C  s
   i | _ d S r   )Ú_storager   r   r   r   r   s   s    z_ConsoleLoader.__init__r   r   )ÚcodeÚsourcer   c                 C  s6   || j t|ƒ< |jD ]}t|tƒr|| j t|ƒ< qd S r   )rS   ÚidÚ	co_constsr3   r   )r   rT   rU   Úvarr   r   r   Úregisterv   s    

z_ConsoleLoader.registerú
str | None©rT   r   c                 C  s,   z| j t|ƒ W S  tk
r&   Y d S X d S r   )rS   rV   ÚKeyError©r   rT   r   r   r   Úget_source_by_code}   s    z!_ConsoleLoader.get_source_by_codeN)r.   r/   r0   r   rY   r^   r   r   r   r   rR   r   s   rR   c                      s†   e Zd ZU ded< ddddœ‡ fdd„Zdddd	œ‡ fd
d„Zdddœdd„Zddœdd„Zddddœdd„Zdddœdd„Z	‡  Z
S )Ú_InteractiveConsolezdict[str, t.Any]rC   r   ©ÚglobalsrC   r   c                   s^   t ƒ ˆ_||ttˆjdœ–}tƒ  |¡ ˆj‰ dddddœ‡ ‡fdd„}|ˆ_dˆ_g ˆ_d S )N)r   ÚhelpÚ
__loader__r   zCodeType | None)rU   ÚfilenameÚsymbolr   c                   s&   ˆ | ||ƒ}|d k	r"ˆj  || ¡ |S r   )ÚloaderrY   )rU   rd   re   rT   ©Zoriginal_compiler   r   r   Úcompile“   s    z-_InteractiveConsole.__init__.<locals>.compileF)	rR   rf   r   r	   Úsuperr   rh   ÚmoreÚbuffer)r   ra   rC   rh   ©Ú	__class__rg   r   r   ‡   s    ûz_InteractiveConsole.__init__r   rE   )rU   Ú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)Úrstripr2   r:   rj   r>   r%   rk   ri   Ú	runsourcer)   r   )r   rU   rn   ÚpromptÚoutputZsource_to_evalrl   r   r   rq   Ÿ   s    
z_InteractiveConsole.runsourcer   r[   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} t tt ¡ d ¡}||dd�}tj | 	¡ ¡ d S )Nr   ©ÚDebugTraceback©Úskip©
Ztbtoolsry   r6   r7   ÚBaseExceptionr4   Úexc_infor5   r+   Zrender_traceback_html)r   ry   ÚexcÚter   r   r   rv   µ   s    z!_InteractiveConsole.showtracebackNrZ   )rd   r   c                 C  s@   ddl m} t tt ¡ d ¡}||dd�}tj | 	¡ ¡ d S )Nr   rx   é   rz   r|   )r   rd   ry   r   r€   r   r   r   Úshowsyntaxerror¼   s    z#_InteractiveConsole.showsyntaxerror)Údatar   c                 C  s   t j |¡ d S r   )r4   r5   r,   )r   rƒ   r   r   r   r,   Ã   s    z_InteractiveConsole.write)N)r.   r/   r0   Ú__annotations__r   rq   rw   rv   r‚   r,   Ú__classcell__r   r   rl   r   r_   „   s   
r_   c                   @  s4   e Zd ZdZdddddœdd„Zddd	œd
d„ZdS )ÚConsolezAn interactive console.Nzdict[str, t.Any] | Noner   r`   c                 C  s(   |d kri }|d kri }t ||ƒ| _d S r   )r_   r   )r   ra   rC   r   r   r   r   Ê   s
    zConsole.__init__r   r[   c                 C  s0   t  | j ¡ tj}z| j  |¡W ¢S |t_X d S r   )r   r9   r4   r5   rq   )r   rT   Zold_sys_stdoutr   r   r   ÚevalÕ   s
    zConsole.eval)NN)r.   r/   r0   r1   r   r‡   r   r   r   r   r†   Ç   s
     ýr†   )Ú
__future__r   rT   r4   Útypingr6   Zcontextvarsr   Útypesr   Z
markupsafer   rO   r   r   r	   r
   r„   r   r   r2   rD   rB   rR   ZInteractiveInterpreterr_   r†   r   r   r   r   Ú<module>   s&    (3C