o
    ;i                     @   s  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
mZ d dlZd dlmZ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 d	dlmZ d	dlmZmZ d	dlm Z  ej!					d2de
e" de
e" de
e" de
e" de#f
ddZ$ej!d3de"de
e" de
e de"fddZ%deee"f de"fdd Z&de#fd!d"Z'			#d4d$eeee"f  d%eeeee"f   d&e#d'e#d(e"f
d)d*Z(d+Z)ej*dd,d-e)d.Z+ej*dd/d0d1d.Z,dS )5    N)Sequence)writer)dumps)OptionalUnion)ColumnTable)Text)api_pb2   )get_app_logs_loop)synchronizer)_Client)
ensure_env)InvalidErrorNotFoundError)OutputManagerFapp_idtask_id
sandbox_idapp_logs_urlshow_timestampsc           	         s   t  I d H }t }|| | p|p|}|rd| dnd}z&|| t||| ||dI d H  W d    W d S 1 s@w   Y  W d S  tjyR   Y d S  t	y[   Y d S w )NzTailing logs for z...zTailing logs...)r   r   r   )
r   from_envr   getset_timestampsshow_status_spinnerr   asyncioCancelledErrorKeyboardInterrupt)	r   r   r   r   r   client
output_mgr
display_idstatus_text r#   C/home/ubuntu/.local/lib/python3.10/site-packages/modal/cli/utils.pystream_app_logs   s   
&r%   nameenvr   returnc                    sv   |d u rt  I d H }t|}tj| |d}|j|I d H }|js8|r+d| dnd}td|  d| d|jS )N)r&   environment_namez	 in the 'z' environment z%Could not find a deployed app named ''.)	r   r   r   r
   AppGetByDeploymentNameRequeststubAppGetByDeploymentNamer   r   )r&   r'   r   env_namerequestrespenv_commentr#   r#   r$   get_app_id_from_name0   s   r4   textc                 C   s   t | tr| jS | S N)
isinstancer	   plain)r5   r#   r#   r$   _plain=   s   r9   c                   C   s
   t  jS r6   )r   r   is_terminalr#   r#   r#   r$   is_ttyA   s   
r;   r*   columnsrowsjsoncsvtitlec                    s   dt ttf dtfdd |r|rtdt }|r. fdd|D }|t| d S |r^t	 }t
|}| fddD  |D ]}	|d	d |	D  qF|j| d
d d S td|i}
|D ]}	|
j|	  qg||
 d S )Ncolr(   c                 S   s   t | tr
t| jS | S r6   )r7   r   strheader)rA   r#   r#   r$   
col_to_strL   s   z!display_table.<locals>.col_to_strz1Cannot output both JSON and CSV at the same time.c                    s$   g | ]  fd dt D qS )c                    s"   i | ]\}} |t | qS r#   r9   ).0irA   )rD   rowr#   r$   
<dictcomp>T   s   " z,display_table.<locals>.<listcomp>.<dictcomp>)	enumerate)rF   rD   r<   )rH   r$   
<listcomp>T   s   $ z!display_table.<locals>.<listcomp>c                    s   g | ]} |qS r#   r#   )rF   rA   )rD   r#   r$   rL   Y       c                 S   s   g | ]}t |qS r#   rE   )rF   cellr#   r#   r$   rL   [   rM   r*   )endr@   )r   r   rB   r   r   r   
print_jsonr   ioStringIO
csv_writerwriterowprintgetvaluer   add_row)r<   r=   r>   r?   r@   output	json_data
csv_bufferr   rH   tabler#   rK   r$   display_tableE   s$   r\   zEnvironment to interact with.

If not specified, Modal will use the default environment of your current profile, or the `MODAL_ENVIRONMENT` variable.
Otherwise, raises an error if the workspace has multiple environments.
z-ez--env)helpz-yz--yesz%Run without pausing for confirmation.)NNNNFr6   )FFr*   )-r   rQ   collections.abcr   r?   r   rS   r>   r   typingr   r   typer
rich.tabler   r   	rich.textr	   modal_protor
   _output.ptyr   _utils.async_utilsr   r   r   environmentsr   	exceptionr   r   rX   r   create_blockingrB   boolr%   r4   r9   r;   r\   ENV_OPTION_HELPOption
ENV_OPTION
YES_OPTIONr#   r#   r#   r$   <module>   sl   &
