B
    He7                 @   sf  U d dl Z d dlmZmZmZ d dlmZ d dlmZm	Z	m
Z
mZmZmZmZmZ ddlmZ ddlmZmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddl m!Z! ddl"m#Z# G dd deZ$G dd deeZ%e&dkrbd dl'Z'd dl(Z(d dl)m*Z* d dlm+Z+mZm,Z, ddl-m.Z. ddlmZ ddl/m%Z% ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 e Ze5ddddZ4e7d d!d"Z6e68d#d$d% d&e1d'd(e6d)d*d+d,d-e4e3d.g	Z9e*e9Z:d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAgZ;e%edBZZ<i Z=e+e,e>e>f e?f e@dC< x4eAdDD ]&ZBe;eBeCe;  ZDxe;D ]ZEeEeDkr^qJe(FdE e'Gd dFdk reHeIe: dGe'' dH d  e=eDeEf< eCe=eCe;d kre=JeKe=L d   e7dIdJZ6e6MdK e6MdL e6MdM xBe=N D ]6\\ZOZPZQe68eOePe#eQdNeQdOk r,dPndQdR qW e<Re.Se6 qJW q,W W dQ R X dS )S    N)EventRLockThread)TracebackType)IOAnyCallableListOptionalTextIOTypecast   )get_console)ConsoleConsoleRenderableRenderableType
RenderHook)Control)	FileProxy)JupyterMixin)
LiveRenderVerticalOverflowMethod)Screen)Textc                   sF   e Zd ZdZdedd fddZdddd	Zddd
dZ  ZS )_RefreshThreadz3A thread that calls refresh() at regular intervals.LiveN)liverefresh_per_secondreturnc                s&   || _ || _t | _t jdd d S )NT)daemon)r   r   r   donesuper__init__)selfr   r   )	__class__ i/var/www/downstreamdata.science/rtclock/rtclock-venv/lib/python3.7/site-packages/pip/_vendor/rich/live.pyr#      s    z_RefreshThread.__init__)r   c             C   s   | j   d S )N)r!   set)r$   r&   r&   r'   stop   s    z_RefreshThread.stopc          	   C   sD   x>| j d| j s>| jj | j  s2| j  W d Q R X qW d S )Nr   )r!   waitr   r   _lockis_setrefresh)r$   r&   r&   r'   run   s    

z_RefreshThread.run)	__name__
__module____qualname____doc__floatr#   r)   r.   __classcell__r&   r&   )r%   r'   r      s   r   c               @   s<  e Zd ZdZd)dddddddddd	ee ee eeeeeee	ee
g ef  ddd	d
ZeedddZedddZd*eddddZddddZd dddZeee  ee ee ddddZddddZddddZeedddZdd eedd!d"d#Zddd$d%Zee ee d&d'd(ZdS )+r   a  Renders an auto-updating live display of any given renderable.

    Args:
        renderable (RenderableType, optional): The renderable to live display. Defaults to displaying nothing.
        console (Console, optional): Optional Console instance. Default will an internal Console instance writing to stdout.
        screen (bool, optional): Enable alternate screen mode. Defaults to False.
        auto_refresh (bool, optional): Enable auto refresh. If disabled, you will need to call `refresh()` or `update()` with refresh flag. Defaults to True
        refresh_per_second (float, optional): Number of times per second to refresh the live display. Defaults to 4.
        transient (bool, optional): Clear the renderable on exit (has no effect when screen=True). Defaults to False.
        redirect_stdout (bool, optional): Enable redirection of stdout, so ``print`` may be used. Defaults to True.
        redirect_stderr (bool, optional): Enable redirection of stderr. Defaults to True.
        vertical_overflow (VerticalOverflowMethod, optional): How to handle renderable when it is too tall for the console. Defaults to "ellipsis".
        get_renderable (Callable[[], RenderableType], optional): Optional callable to get renderable. Defaults to None.
    NFT   ellipsis)	consolescreenauto_refreshr   	transientredirect_stdoutredirect_stderrvertical_overflowget_renderable)
renderabler7   r8   r9   r   r:   r;   r<   r=   r>   r   c   	         C   s   |dkst d|| _|d k	r"|nt | _|| _d| _|| _|| _d | _d | _	t
 | _d | _|| _d| _|rpdn|| _d | _|| _|	| _|
| _t|  |	d| _d S )Nr   zrefresh_per_second must be > 0FT)r=   )AssertionError_renderabler   r7   _screen_alt_screen_redirect_stdout_redirect_stderr_restore_stdout_restore_stderrr   r+   
ipy_widgetr9   _startedr:   _refresh_threadr   r=   _get_renderabler   r>   _live_render)r$   r?   r7   r8   r9   r   r:   r;   r<   r=   r>   r&   r&   r'   r#   3   s(    zLive.__init__)r   c             C   s   | j S )z'Check if live display has been started.)rI   )r$   r&   r&   r'   
is_started[   s    zLive.is_startedc             C   s    | j d k	r|   n| j}|pdS )N )rK   rA   )r$   r?   r&   r&   r'   r>   `   s    zLive.get_renderable)r-   r   c          	   C   s   | j  | jrdS | j|  d| _| jr8| jd| _| jd |   | j	|  |ry| 
  W n tk
r   |    Y nX | jrt| | j| _| j  W dQ R X dS )z|Start live rendering display.

        Args:
            refresh (bool, optional): Also refresh. Defaults to False.
        NTF)r+   rI   r7   set_liverB   set_alt_screenrC   show_cursor_enable_redirect_iopush_render_hookr-   	Exceptionr)   r9   r   r   rJ   start)r$   r-   r&   r&   r'   rU   h   s&    z
Live.startc             C   s  | j  | jsdS | j  d| _| jrB| jdk	rB| j  d| _d| _| j z| jsh| jj	sh| 
  W d|   | j  | js| jjr| j  | jd | jr| jd | jr| js| j| j  | jdk	r| jr| j  X W dQ R X W dQ R X dS )zStop live rendering display.NFvisibleT)r+   rI   r7   
clear_liver9   rJ   r)   r=   rC   
is_jupyterr-   _disable_redirect_iopop_render_hookis_terminallinerQ   rP   r:   controlrL   restore_cursorrH   close)r$   r&   r&   r'   r)      s0    



z	Live.stopc             C   s   | j | jd k	d | S )N)r-   )rU   rA   )r$   r&   r&   r'   	__enter__   s    zLive.__enter__)exc_typeexc_valexc_tbr   c             C   s   |    d S )N)r)   )r$   ra   rb   rc   r&   r&   r'   __exit__   s    zLive.__exit__c             C   st   | j js| j jrp| jr@ttjts@tj| _t	dt| j tjt_| j
rpttjtsptj| _t	dt| j tjt_dS )z&Enable redirecting of stdout / stderr.r   N)r7   r[   rX   rD   
isinstancesysstdoutr   rF   r   rE   stderrrG   )r$   r&   r&   r'   rR      s    zLive._enable_redirect_ioc             C   s8   | j rtd| j t_d| _ | jr4td| jt_d| _dS )z'Disable redirecting of stdout / stderr.r   N)rF   r   rf   rg   rG   rh   )r$   r&   r&   r'   rY      s    zLive._disable_redirect_ioc             C   s   |   }| jrt|S |S )zwGet the renderable that is being displayed

        Returns:
            RenderableType: Displayed renderable.
        )r>   rC   r   )r$   r?   r&   r&   r'   r?      s    zLive.renderable)r-   )r?   r-   r   c         	   C   s>   t |tr| j|}| j || _|r0|   W dQ R X dS )zUpdate the renderable that is being displayed

        Args:
            renderable (RenderableType): New renderable to use.
            refresh (bool, optional): Refresh the display. Defaults to False.
        N)re   strr7   
render_strr+   rA   r-   )r$   r?   r-   r&   r&   r'   update   s    
zLive.updatec          
   C   s"  | j  | j| j | jjryddlm} ddlm	} W n& t
k
rb   ddl}|d Y nNX | jdkr| | _|| j | j$ | jjdd | j| jj W dQ R X nb| jjr| jjs| j | jt  W dQ R X n0| js| js| j | jt  W dQ R X W dQ R X dS )z&Update the display of the Live Render.r   )display)OutputNz(install "ipywidgets" for Jupyter supportT)r*   )r+   rL   set_renderabler?   r7   rX   IPython.displayrl   
ipywidgetsrm   ImportErrorwarningswarnrH   clear_outputprintr[   is_dumb_terminalr   rI   r:   )r$   rl   rm   rr   r&   r&   r'   r-      s*    


zLive.refresh)renderablesr   c          	   C   sj   | j | j_ | jjrN| j. | jr(t n| j }|f|| jf}W dQ R X n| j	sf| j
sf|| jf}|S )z;Process renderables to restore cursor and display progress.N)r=   rL   r7   is_interactiver+   rC   r   homeposition_cursorrI   r:   )r$   rw   resetr&   r&   r'   process_renderables   s    

zLive.process_renderables)N)F)r/   r0   r1   r2   r
   r   r   boolr3   r   r   r#   propertyrM   r>   rU   r)   r`   r   BaseExceptionr   rd   rR   rY   r?   rk   r-   r	   r   r|   r&   r&   r&   r'   r   #   s<   .

		r   __main__)cycle)Dictr	   Tuple)Align)r   )r   )Panel)Rule)Syntax)Tablea~  def loop_last(values: Iterable[T]) -> Iterable[Tuple[bool, T]]:
    """Iterate and generate a tuple with a flag for last value."""
    iter_values = iter(values)
    try:
        previous_value = next(iter_values)
    except StopIteration:
        return
    for value in iter_values:
        yield False, previous_value
        previous_value = value
    yield True, previous_valuepythonT)line_numbersZfoobarZbaz123zYou can make the terminal shorter and taller to see the live table hideText may be printed while the progress bars are rendering.z(In fact, [i]any[/i] renderable will workzSuch as [magenta]tables[/]...zPretty printed structures...ZexamplezPretty printed)typetextz	Syntax...zGive it a try!ZSGDZMYRZEURUSDZAUDZJPYZCNHZHKDZCADZINRZDKKZGBPZRUBZNZDZMXNZIDRZTWDZTHBZVND)r7   exchange_rate_dictd   g?
      i@  zExchange Rates)titlezSource CurrencyzDestination CurrencyzExchange Ratez.4fg      ?redgreen)style)Trf   	threadingr   r   r   typesr   typingr   r   r   r	   r
   r   r   r   rN   r   r7   r   r   r   r   r]   r   
file_proxyr   jupyterr   live_renderr   r   r8   r   r   r   r   r   r/   randomtime	itertoolsr   r   r   alignr   r   panelr   ruler   syntaxr   tabler   add_rowZprogress_renderablesZexamplesZ	exchangesZ
live_tabler   ri   r3   __annotations__rangeindexlenZselect_exchangeZexchangesleeprandintlognextpoplistkeys
add_columnitemssourcedestZexchange_raterk   centerr&   r&   r&   r'   <module>   s    ( m







