o
    9e                     @  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.ipyr   _ipyc                   @  sv   e Zd ZdZd!ddZd"ddZd!d	d
Zd!ddZd#d$ddZd%ddZ	d%ddZ
d&ddZd&ddZd'ddZd S )(HTMLStringOz-A StringO version that HTML escapes on write.returnNonec                 C  s
   g | _ d S N)_bufferself r   6lib/python3.10/site-packages/werkzeug/debug/console.py__init__      
zHTMLStringO.__init__boolc                 C  s   dS )NFr   r   r   r   r   isatty      zHTMLStringO.isattyc                 C     d S r   r   r   r   r   r   close   r   zHTMLStringO.closec                 C  r   r   r   r   r   r   r   flush   r   zHTMLStringO.flushr   nintmodec                 C  r   r   r   )r   r   r   r   r   r   seek"   r   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xc                 C  s   | j | d S r   )r   appendr   r*   r   r   r   _write1      zHTMLStringO._writec                 C  s   |  t| d S r   )r-   r   r,   r   r   r   write4   s   zHTMLStringO.writet.Iterable[str]c                 C  s   |  td| d S r&   )r-   r   r'   r,   r   r   r   
writelines7   s   zHTMLStringO.writelinesNr   r   )r   r   )r   )r   r   r   r   r   r   r   r!   )r*   r!   r   r   )r*   r0   r   r   )__name__
__module____qualname____doc__r   r   r   r   r    r%   r)   r-   r/   r1   r   r   r   r   r      s    







r   c                   @  sb   e Zd ZdZedddZedddZedddZdddZdddZ	dddZ
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stdoutr8   tcastZTextIOr
   setr   r   r   r   r   push>   s   zThreadedStream.pushr!   c                  C  s(   z	t  } W |  S  ty   Y dS w r&   )r
   getLookupErrorr)   )streamr   r   r   fetchE   s   
zThreadedStream.fetchobjobjectc                 C  sT   zt  }W n ty   t|  Y S w | d ur(| t jd< |t|  d S d S )N_)r
   r@   rA   _displayhookr   localsr-   r   )rD   rB   r   r   r   displayhookN   s   zThreadedStream.displayhooknamevaluet.Anyc                 C  s   t d| )Nzread only attribute )AttributeError)r   rJ   rK   r   r   r   __setattr__[   s   zThreadedStream.__setattr__	list[str]c                 C  
   t tjS r   )dirr:   
__stdout__r   r   r   r   __dir__^   r   zThreadedStream.__dir__c                 C  s0   zt  }W n ty   tj}Y nw t||S r   )r
   r@   rA   r:   rR   getattr)r   rJ   rB   r   r   r   __getattribute__a   s   

zThreadedStream.__getattribute__c                 C  rP   r   )reprr:   rR   r   r   r   r   __repr__i   r   zThreadedStream.__repr__Nr2   r3   )rD   rE   r   r   )rJ   r!   rK   rL   r   r   )r   rO   )rJ   r!   r   rL   )r4   r5   r6   r7   staticmethodr?   rC   rI   rN   rS   rU   rW   r   r   r   r   r8   ;   s    


r8   c                   @  s*   e Zd ZdddZdd	d
ZdddZdS )_ConsoleLoaderr   r   c                 C  s
   i | _ d S r   )_storager   r   r   r   r   s   r   z_ConsoleLoader.__init__coder   sourcer!   c                 C  s6   || j t|< |jD ]}t|tr|| j t|< q
d S r   )rZ   id	co_constsr9   r   )r   r[   r\   varr   r   r   registerv   s   

z_ConsoleLoader.register
str | Nonec                 C  s&   z| j t| W S  ty   Y d S w r   )rZ   r]   KeyErrorr   r[   r   r   r   get_source_by_code}   s
   z!_ConsoleLoader.get_source_by_codeNr2   )r[   r   r\   r!   r   r   )r[   r   r   ra   )r4   r5   r6   r   r`   rd   r   r   r   r   rY   r   s    

rY   c                      s`   e Zd ZU ded< d fddZd fddZdddZdddZd d!ddZd"ddZ	  Z
S )#_InteractiveConsoledict[str, t.Any]rH   globalsr   r   c                   sZ   t  _i ||ttjd}t | j d fdd	}|_d
_g _d S )N)r   help
__loader__r\   r!   filenamesymbolr   CodeType | Nonec                   s&    | ||}|d urj ||  |S r   )loaderr`   )r\   rj   rk   r[   Zoriginal_compiler   r   r   compile   s   z-_InteractiveConsole.__init__.<locals>.compileF)r\   r!   rj   r!   rk   r!   r   rl   )	rY   rm   r   r	   superr   ro   morebuffer)r   rg   rH   ro   	__class__rn   r   r      s    
z_InteractiveConsole.__init__r\   r!   kwargsrL   c                   s   |   d}t  | jrdnd}z*d| j|g }t |ddr.d| _| j| n	d| _| jd d = W t	 }nt	 }w | t
| | S )	N
z... z>>> r"   z
<debugger>ZsingleTF)rstripr8   r?   rq   r'   rr   rp   	runsourcer+   rC   r   )r   r\   ru   promptZsource_to_evaloutputrs   r   r   rx      s   z_InteractiveConsole.runsourcer[   r   c                 C  s0   z	t || j W d S  ty   |   Y d S w r   )execrH   	Exceptionshowtracebackrc   r   r   r   runcode   s
   z_InteractiveConsole.runcodec                 C  s@   ddl m} ttt d }||dd}tj|	  d S )Nr   DebugTracebackskip
Ztbtoolsr   r<   r=   BaseExceptionr:   exc_infor;   r-   Zrender_traceback_html)r   r   excter   r   r   r}         z!_InteractiveConsole.showtracebackNrj   ra   c                 C  s@   ddl m} ttt d }||dd}tj|	  d S )Nr   r      r   r   )r   rj   r   r   r   r   r   r   showsyntaxerror   r   z#_InteractiveConsole.showsyntaxerrordatac                 C  s   t j| d S r   )r:   r;   r/   )r   r   r   r   r   r/      r.   z_InteractiveConsole.write)rg   rf   rH   rf   r   r   )r\   r!   ru   rL   r   r!   )r[   r   r   r   r2   r   )rj   ra   r   r   )r   r!   r   r   )r4   r5   r6   __annotations__r   rx   r~   r}   r   r/   __classcell__r   r   rs   r   re      s   
 

re   c                   @  s*   e Zd ZdZ		dddd	ZdddZdS )ConsolezAn interactive console.Nrg   dict[str, t.Any] | NonerH   r   r   c                 C  s(   |d u ri }|d u ri }t ||| _d S r   )re   r   )r   rg   rH   r   r   r   r      s
   zConsole.__init__r[   r!   c                 C  s0   t | j  tj}z
| j |W |t_S |t_w r   )r   r>   r:   r;   rx   )r   r[   Zold_sys_stdoutr   r   r   eval   s
   zConsole.eval)NN)rg   r   rH   r   r   r   )r[   r!   r   r!   )r4   r5   r6   r7   r   r   r   r   r   r   r      s    r   )Z
__future__r   r[   r:   typingr<   Zcontextvarsr   typesr   Z
markupsafer   rV   r   r   r	   r
   r   r   r   r8   rI   rG   rY   ZInteractiveInterpreterre   r   r   r   r   r   <module>   s&    (3C