
À«‘_p  ã               @   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 Gd d „  d e ƒ Z Gd d „  d e ƒ Z e j Z e j e _ Gd d „  d e ƒ Z d d „  Z Gd d „  d e j ƒ Z Gd 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               @   s‘   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-5gj8f0j9/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   s4   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   s5   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)Ú__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 „  ƒ 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   s0   y t  j }  Wn t k
 r% d SYn X|  j ƒ  S)Nr   )r-   r.   ÚAttributeErrorr   )r.   r   r   r   ÚfetchL   s
    	zThreadedStream.fetchc             C   s_   y t  j } Wn t k
 r+ t |  ƒ SYn X|  d  k	 r[ |  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   sQ   | d k r t  t j ƒ Sy t j } Wn t k
 rC t j } Yn Xt | | ƒ 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               @   s4   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   sM   | |  j  t | ƒ <x3 | j D]( } t | t ƒ r | |  j  t | ƒ <q Wd  S)N)rE   ÚidÚ	co_constsr   r   )r   ÚcodeÚsourceÚvarr   r   r   Úregister|   s    z_ConsoleLoader.registerc             C   s.   y |  j  t | ƒ SWn t k
 r) Yn Xd  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   sz   t  | ƒ } | j | ƒ | } t | d <t | d <t ƒ  | d <|  _ t j j |  | ƒ d |  _	 g  |  _
 t |  ƒ d  S)Nr   ÚhelpÚ
__loader__F)ÚdictÚupdater   r	   rD   rN   rH   ÚInteractiveInterpreterr   ÚmoreÚbufferrT   )r   Úglobalsr5   Z_localsr   r   r   r   –   s    

		z_InteractiveConsole.__init__c             C   s¾   | j  ƒ  d } t j ƒ  |  j r) d n d } zm d j |  j | g ƒ } t j j |  | d d ƒ r‚ d |  _ |  j j	 | ƒ n d |  _ |  j d  d  … =Wd  t j
 ƒ  } X| t | ƒ | S)	NÚ
z... z>>> r   z
<debugger>ZsingleTF)Úrstripr*   r/   r[   r   r\   rH   rZ   Ú	runsourcer!   r1   r   )r   rI   ÚpromptZsource_to_evalÚoutputr   r   r   r`   ¢   s    
			z_InteractiveConsole.runsourcec             C   s7   y t  | |  j ƒ Wn t k
 r2 |  j ƒ  Yn Xd  S)N)Úexecr5   Ú	ExceptionÚshowtraceback)r   rH   r   r   r   Úruncode´   s    z_InteractiveConsole.runcodec             C   s9   d d l  m } | d d ƒ } t j j | j ƒ  ƒ d  S)Nr   )Úget_current_tracebackÚskip)Útbtoolsrg   r+   r,   r#   Úrender_summary)r   rg   Útbr   r   r   re   º   s    z!_InteractiveConsole.showtracebackNc             C   s9   d d l  m } | d d ƒ } t j j | j ƒ  ƒ d  S)Nr   )rg   rh   é   )ri   rg   r+   r,   r#   rj   )r   rO   rg   rk   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)	r&   r'   r(   r   r`   rf   re   rm   r$   r   r   r   r   rU   •   s   rU   c               @   s4   e  Z d  Z d Z d 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   r]   r5   r   r   r   r   Í   s
    zConsole.__init__c             C   s:   |  j  t _ t j } z |  j  j | ƒ SWd  | t _ Xd  S)N)rp   r-   r4   r+   r,   r`   )r   rH   Zold_sys_stdoutr   r   r   ÚevalÔ   s
    	zConsole.eval)r&   r'   r(   r)   r   rq   r   r   r   r   ro   Ê   s   ro   )r)   rH   r+   Útypesr   Úlocalr   Úutilsr   rA   r   r   r	   r-   Úobjectr
   r*   r7   r3   rD   rT   rZ   rU   ro   r   r   r   r   Ú<module>
   s"   	*1	5