a
    $lJh7                     @   sH  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rDd 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:g d/Z;e%ed0RZ<i Z=e+e,e>e>f e?f e@d1< eAd2D ]ZBe;eBeCe;  ZDe;D ]ZEeEeDkr2q e(Fd3 e'Gd d4dk r\eHeIe: d5e'' d6 d  e=eDeEf< eCe=eCe;d kre=JeKe=L d   e7d7d8Z6e6Md9 e6Md: e6Md; e=N D ]6\\ZOZPZQe68eOePe#eQd<eQd=k rd>nd?d@ qe<Re.Se6 q qW d   n1 s:0    Y  dS )A    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__ G/var/www/shaz/venv/lib/python3.9/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   sT   | j d| j sP| jj$ | j  s0| j  W d    q 1 sD0    Y  q d S )Nr   )r!   waitr   r   _lockis_setrefreshr,   r'   r'   r(   run   s    

z_RefreshThread.run)	__name__
__module____qualname____doc__floatr#   r-   r2   __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. Defaults to 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   Zellipsis)	consolescreenauto_refreshr   	transientredirect_stdoutredirect_stderrvertical_overflowget_renderable)
renderabler:   r;   r<   r   r=   r>   r?   r@   rA   r   c       	         C   s   |dksJ d|| _ |d u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@   )_renderabler   r:   _screen_alt_screen_redirect_stdout_redirect_stderr_restore_stdout_restore_stderrr   r/   
ipy_widgetr<   _startedr=   _refresh_threadr   r@   _get_renderabler   rA   _live_render)r$   rB   r:   r;   r<   r   r=   r>   r?   r@   rA   r'   r'   r(   r#   3   s*    zLive.__init__r)   c                 C   s   | j S )z'Check if live display has been started.)rK   r,   r'   r'   r(   
is_started[   s    zLive.is_startedc                 C   s    | j d ur|   n| j}|pdS )N )rM   rC   r$   rB   r'   r'   r(   rA   `   s
    
zLive.get_renderable)r1   r   c              	   C   s   | j  | jrW d   dS | j|  d| _| jrD| jd| _| jd |   | j	|  |rz| 
  W n ty   |    Y n0 | jrt| | j| _| j  W d   n1 s0    Y  dS )z|Start live rendering display.

        Args:
            refresh (bool, optional): Also refresh. Defaults to False.
        NTF)r/   rK   r:   Zset_liverD   set_alt_screenrE   show_cursor_enable_redirect_ioZpush_render_hookr1   	Exceptionr-   r<   r   r   rL   start)r$   r1   r'   r'   r(   rV   h   s&    z
Live.startc                 C   s  | j  | js W d   dS | j  d| _| jrP| jdurP| j  d| _d| _| j< z| jsx| jj	sx| 
  W |   | j  | js| jjr| j  | jd | jr| jd | jr| js| j| j  | jdur| jr| j  n|   | j  | js*| jjr*| j  | jd | jrJ| jd | jrl| jsl| j| j  | jdur| jr| j  0 W d   n1 s0    Y  W d   n1 s0    Y  dS )zStop live rendering display.NFZvisibleT)r/   rK   r:   Z
clear_liver<   rL   r-   r@   rE   
is_jupyterr1   _disable_redirect_ioZpop_render_hookis_terminallinerS   rR   r=   controlrN   Zrestore_cursorrJ   closer,   r'   r'   r(   r-      sF    








z	Live.stopc                 C   s   | j | jd ud | S )Nr1   )rV   rC   r,   r'   r'   r(   	__enter__   s    zLive.__enter__)exc_typeexc_valexc_tbr   c                 C   s   |    d S r*   )r-   )r$   r_   r`   ra   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)r:   rY   rW   rF   
isinstancesysstdoutr   rH   r   rG   stderrrI   r,   r'   r'   r(   rT      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)rH   r   rd   re   rI   rf   r,   r'   r'   r(   rX      s    zLive._disable_redirect_ioc                 C   s   |   }| jrt|S |S )zwGet the renderable that is being displayed

        Returns:
            RenderableType: Displayed renderable.
        )rA   rE   r   rQ   r'   r'   r(   rB      s    zLive.renderabler]   )rB   r1   r   c                C   sR   t |tr| j|}| j" || _|r0|   W d   n1 sD0    Y  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)rc   strr:   Z
render_strr/   rC   r1   )r$   rB   r1   r'   r'   r(   update   s    
zLive.updatec              	   C   sz  | j \ | j| j | jjrzddlm} ddlm	} W n$ t
y`   ddl}|d Y nb0 | jdu r~| | _|| j | j. | jjdd | j| jj W d   n1 s0    Y  n| jjr| jjs| j | jt  W d   n1 s0    Y  nF| jsV| jsV| j | jt  W d   n1 sL0    Y  W d   n1 sl0    Y  dS )z&Update the display of the Live Render.r   )display)OutputNz(install "ipywidgets" for Jupyter supportT)r.   )r/   rN   Zset_renderablerB   r:   rW   ZIPython.displayri   Z
ipywidgetsrj   ImportErrorwarningswarnrJ   Zclear_outputprintrY   Zis_dumb_terminalr   rK   r=   )r$   ri   rj   rl   r'   r'   r(   r1      s0    


00zLive.refresh)renderablesr   c                 C   s   | j | j_ | jjrb| j8 | jr(t n| j }|g|| j}W d   q|1 sV0    Y  n| j	s|| j
s|g || j}|S )z;Process renderables to restore cursor and display progress.N)r@   rN   r:   Zis_interactiver/   rE   r   homeZposition_cursorrK   r=   )r$   ro   resetr'   r'   r(   process_renderables   s    

0zLive.process_renderables)N)F)r3   r4   r5   r6   r
   r   r   boolr7   r   r   r#   propertyrO   rA   rV   r-   r^   r   BaseExceptionr   rb   rT   rX   rB   rh   r1   r	   r   rr   r'   r'   r'   r(   r   #   sZ    (

		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)Z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EURZUSDZAUDZJPYZCNHZHKDZCADZINRZDKKZGBPZRUBZNZDZMXNZIDRZTWDZTHBZVND)r:   exchange_rate_dictd   g?
      i@  zExchange Rates)titlezSource CurrencyzDestination CurrencyzExchange Ratez.4fg      ?ZredZgreen)style)Trd   	threadingr   r   r   typesr   typingr   r   r   r	   r
   r   r   r   rP   r   r:   r   r   r   r   r[   r   Z
file_proxyr   Zjupyterr   Zlive_renderr   r   r;   r   r   r   r   r   r3   randomtime	itertoolsrw   rx   ry   Zalignrz   r   Zpanelr{   Zruler|   Zsyntaxr}   tabler~   Zadd_rowZprogress_renderablesZexamplesZ	exchangesZ
live_tabler   rg   r7   __annotations__rangeindexlenZselect_exchangeZexchangesleeprandintlognextpoplistkeysZ
add_columnitemssourcedestZexchange_raterh   centerr'   r'   r'   r(   <module>   s   
( m






	