a
    shL;                     @  s\  U d dl mZ 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mZ ddlmZ ddlmZ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' erd dl(m)Z) G dd deZ*G dd de eZ+e,dkrXd dl-Z-d dl.Z.d dl/m0Z0 d dl	m1Z1mZm2Z2 ddl3m4Z4 ddlmZ ddl5m+Z+ ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z= e Ze;ddd d!Z:e=d"d#d$Z<e<>d%d&d' d(e7d)d*e<d+d,d-d.d/e:e9d0g	Z?e0e?Z@g d1ZAe+ed2BZBi ZCd3eDd4< eEd5D ]ZFeAeFeGeA  ZHeAD ]ZIeIeHkrFq4e.Jd6 e-Kd d7dk rpeLeMe@ d8e-- d9 d  eCeHeIf< eGeCeGeAd kreCNeOeCP d   e=d:d;Z<e<Qd< e<Qd= e<Qd> eCR D ]6\\ZSZTZUe<>eSeTe'eUd?eUd@k rdAndBdC qeBVe4We< q4qW d   n1 sN0    Y  dS )D    )annotationsN)EventRLockThread)TracebackType)	IOTYPE_CHECKINGAnyCallableListOptionalTextIOTypecast   )get_console)ConsoleConsoleRenderableGroupRenderableType
RenderHook)Control)	FileProxy)JupyterMixin)
LiveRenderVerticalOverflowMethod)Screen)Text)Selfc                      sF   e Zd ZdZdd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.z'Live'floatNone)liverefresh_per_secondreturnc                   s&   || _ || _t | _t jdd d S )NT)daemon)r"   r#   r   donesuper__init__)selfr"   r#   	__class__ Q/var/www/html/assistant/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refreshr1   r,   r,   r-   run"   s    

z_RefreshThread.run)__name__
__module____qualname____doc__r(   r2   r7   __classcell__r,   r,   r*   r-   r      s   r   c                   @  s  e Zd ZdZd6dddddddddd	dd	d
d
dd
d
d
ddddddZed
dddZddddZd7d
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eddd*d+Zdd,dd
dd-d.d/Zddd0d1Zd2d2d3d4d5ZdS )8Livea  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_renderablezOptional[RenderableType]zOptional[Console]boolr    r   z&Optional[Callable[[], RenderableType]]r!   )
renderabler?   r@   rA   r#   rB   rC   rD   rE   rF   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| _d S )Nr   zrefresh_per_second must be > 0FT)rE   )_renderabler   r?   _screen_alt_screen_redirect_stdout_redirect_stderr_restore_stdout_restore_stderrr   r4   
ipy_widgetrA   _startedrB   _refresh_threadr#   rE   _get_renderabler   rF   _live_render_nested)r)   rH   r?   r@   rA   r#   rB   rC   rD   rE   rF   r,   r,   r-   r(   9   s,    zLive.__init__r.   c                 C  s   | j S )z'Check if live display has been started.)rQ   r1   r,   r,   r-   
is_startedb   s    zLive.is_startedr   c                 C  s    | j d ur|   n| j}|pdS )N )rS   rI   )r)   rH   r,   r,   r-   rF   g   s
    
zLive.get_renderable)r6   r$   c              	   C  s   | j  | jrW d   dS d| _| j| sFd| _W d   dS | jrZ| 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)r4   rQ   r?   Zset_liverU   rJ   set_alt_screenrK   show_cursor_enable_redirect_ioZpush_render_hookr6   	Exceptionr2   rA   r   r#   rR   start)r)   r6   r,   r,   r-   r\   o   s*    z
Live.startc                 C  s  | j  | js W d   dS d| _| j  | jrZ| jsJ| j| j W d   dS | jrz| j	durz| j	
  d| _	d| _| jD z| js| jjs|   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r|| jd | jr| js| 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)r4   rQ   r?   Z
clear_liverU   rB   printrH   rA   rR   r2   rE   rK   
is_jupyterr6   _disable_redirect_ioZpop_render_hookis_terminallinerY   rX   controlrT   Zrestore_cursorrP   closer1   r,   r,   r-   r2      sN    








z	Live.stopr   c                 C  s   | j | jd ud | S )Nr6   )r\   rI   r1   r,   r,   r-   	__enter__   s    zLive.__enter__zOptional[Type[BaseException]]zOptional[BaseException]zOptional[TracebackType])exc_typeexc_valexc_tbr$   c                 C  s   |    d S r/   )r2   )r)   rf   rg   rh   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?   r`   r^   rL   
isinstancesysstdoutr   rN   r   rM   stderrrO   r1   r,   r,   r-   rZ      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)rN   r   rk   rl   rO   rm   r1   r,   r,   r-   r_      s    zLive._disable_redirect_ioc                 C  sF   | j j}|r,| |d u r,tdd |D  }n|  }| jrBt|S |S )zwGet the renderable that is being displayed

        Returns:
            RenderableType: Displayed renderable.
        r   c                 S  s   g | ]}|  qS r,   )rF   ).0r"   r,   r,   r-   
<listcomp>       z#Live.renderable.<locals>.<listcomp>)r?   _live_stackr   rF   rK   r   )r)   Z
live_stackrH   r,   r,   r-   rH      s
    zLive.renderablerd   )rH   r6   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)rj   strr?   Z
render_strr4   rI   r6   )r)   rH   r6   r,   r,   r-   update   s    
zLive.updatec              	   C  s  | j  | j| j | jrF| jjr6| jjd   W d   dS | 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 s20    Y  nF| js| js| j | jt  W d   n1 sz0    Y  W d   n1 s0    Y  dS )z&Update the display of the Live Render.r   N)display)Outputz(install "ipywidgets" for Jupyter supportT)r3   )r4   rT   Zset_renderablerH   rU   r?   rq   r6   r^   ZIPython.displayrt   Z
ipywidgetsru   ImportErrorwarningswarnrP   Zclear_outputr]   r`   Zis_dumb_terminalr   rQ   rB   )r)   rt   ru   rw   r,   r,   r-   r6      s8    


00zLive.refreshzList[ConsoleRenderable])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)rE   rT   r?   Zis_interactiver4   rK   r   homeZposition_cursorrQ   rB   )r)   ry   resetr,   r,   r-   process_renderables  s    

0zLive.process_renderables)N)F)r8   r9   r:   r;   r(   propertyrV   rF   r\   r2   re   ri   rZ   r_   rH   rs   r6   r|   r,   r,   r,   r-   r=   )   s6    &)""
	"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?   zDict[Tuple[str, str], float]exchange_rate_dictd   g?
      i@  zExchange Rates)titlezSource CurrencyzDestination CurrencyzExchange Ratez.4fg      ?ZredZgreen)style)X
__future__r   rk   	threadingr   r   r   typesr   typingr   r   r	   r
   r   r   r   r   r   rW   r   r?   r   r   r   r   r   rb   r   Z
file_proxyr   Zjupyterr   Zlive_renderr   r   r@   r   r   r   Ztyping_extensionsr   r   r=   r8   randomtime	itertoolsr   r   r   Zalignr   r"   Zpanelr   Zruler   Zsyntaxr   tabler   Zadd_rowZprogress_renderablesZexamplesZ	exchangesZ
live_tabler   __annotations__rangeindexlenZselect_exchangeZexchangesleeprandintlognextpoplistkeysZ
add_columnitemssourcedestZexchange_raters   centerr,   r,   r,   r-   <module>   s   ,  






	