§
    >xÅj]  ã                   ó¾  — d dl 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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mZmZmZmZm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'  ej(        e)¦  «        Z*ddddddddœZ+ ej,        d¦  «        Z-dZ.dZ/ G d„ de¦  «        Z0de1de1fd„Z2de3de3fd„Z4d ede1fd!„Z5d ede1fd"„Z6d#ed eddfd$„Z7d%e0d#eddfd&„Z8d'e1d eddfd(„Z9d#e#d)e%d*e1d+e1ddf
d,„Z:d#e#d-eddfd.„Z;d#e#d'e1d/e3d0e1d1e<ddfd2„Z= ej>        e¬3¦  «         ej>        d4e¬3¦  «        dd ej?        d5d6d7d8e/› d9�d:e4¬;¦  «         ej?        d<d=d>d?d:e2¬;¦  «         ej?        d:d@dAdB¬C¦  «        dDfdEej@        dFeedz   ejA        dG¬C¦  «        f         d'ee1dz   ej?        dHdI¬C¦  «        f         d/e3d0e1d1e<dJe'ddfdK„¦   «         ¦   «         ZBdS )Lé    N)Údatetime)ÚPath)Ú	Annotated)Ú	HTTPError)Ú	BaseModel)Úescape)ÚRichToolkit)Ú	cloud_app)Ú	APIClientÚAppLogEntryÚStreamLogErrorÚTooManyRetriesErrorÚget_http_error_codeÚget_http_error_hintÚhandle_http_error)ÚUserCommandÚget_user_command_context)Úapps_app)Úresolve_app_id_or_fail)ÚFastAPIRichToolkit)Ú	ErrorCode)ÚJsonOutputOptionÚblueÚcyanÚyellowÚredÚmagenta)ÚdebugÚinfoÚwarningÚwarnÚerrorÚcriticalÚfatalz^\d+[smhd]$é   iè  c                   ó0   — e Zd ZU eed<   ee         ed<   dS )ÚAppLogsOutputÚapp_idÚlogsN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__Úlistr   © ó    úPC:\Projects\Historical\venv\Lib\site-packages\fastapi_cloud_cli/commands/logs.pyr'   r'   1   s,   € € € € € € Ø€K€K�KØ
ˆ{Ô
ÐÐÑÐÐr1   r'   ÚvalueÚreturnc                 ób   — t                                | ¦  «        st          j        d¦  «        ‚| S )z&Validate the --since parameter format.zPInvalid format. Use a number followed by s, m, h, or d (e.g., '5m', '1h', '2d').)ÚSINCE_PATTERNÚmatchÚtyperÚBadParameter©r3   s    r2   Ú_validate_sincer;   6   s7   € å×Ò˜uÑ%Ô%ð 
ÝÔ Ø^ñ
ô 
ð 	
ð €Lr1   c                 ó‚   — t           | cxk    rt          k    s'n t          j        dt           › dt          › d�¦  «        ‚| S )Nz$Invalid value. Use a number between z and ú.)ÚMIN_LOG_TAILÚMAX_LOG_TAILr8   r9   r:   s    r2   Ú_validate_tailr@   @   sS   € Ý˜5Ð0Ð0Ò0Ð0¥LÒ0Ð0Ð0Ð0ÝÔ ØUµ<ÐUÐUÅlÐUÐUÐUñ
ô 
ð 	
ð €Lr1   Úlogc                 óx   — t                                | j                             ¦   «         d¦  «        }d|› d|› d�S )už   Colored indicator rendered in the emoji bullet column.

    â–• draws at the right edge of its cell, centering the bar under the
    double-width emojis.
    Údimú[u   ]â–•[/ú])ÚLOG_LEVEL_COLORSÚgetÚlevelÚlower)rA   Úcolors     r2   Ú_get_log_bulletrK   I   s>   € õ × Ò  ¤§¢Ñ!2Ô!2°EÑ:Ô:€Eà$ˆuÐ$Ð$˜EÐ$Ð$Ð$Ð$r1   c                 óÐ   — t          j        | j                             dd¦  «        ¦  «        }|                     d¦  «        dd…         dz   }d|› dt          | j        ¦  «        › �S )zFormat a log entry for displayÚZz+00:00z%Y-%m-%dT%H:%M:%S.%fNéýÿÿÿz[dim]z[/dim] )r   ÚfromisoformatÚ	timestampÚreplaceÚstrftimer   Úmessage)rA   rP   Útimestamp_strs      r2   Ú_format_log_linerU   T   sh   € õ Ô& s¤}×'<Ò'<¸SÀ(Ñ'KÔ'KÑLÔL€IØ×&Ò&Ð'=Ñ>Ô>¸sÀ¸sÔCÀcÑI€Mà>�=Ð>Ð>­°´Ñ)<Ô)<Ð>Ð>Ð>r1   Útoolkitc                 óh   — |                       t          |¦  «        t          |¦  «        ¬¦  «         d S )N©Úemoji)ÚprintrU   rK   )rV   rA   s     r2   Ú_print_log_liner[   ]   s/   € Ø‡M‚MÕ" 3Ñ'Ô'­¸sÑ/CÔ/C€MÑDÔDÐDÐDÐDr1   Údatac                 óv   — | j         s|                     d¦  «         d S | j         D ]}t          ||¦  «         Œd S )Nz+No logs found for the specified time range.)r)   rZ   r[   )r\   rV   rA   s      r2   Ú_render_app_logs_outputr^   a   sR   € ØŒ9ð Ø�ŠÐCÑDÔDÐDØˆàŒyð &ð &ˆÝ˜ Ñ%Ô%Ð%Ð%ð&ð &r1   r(   c                 óˆ   — t          j        t          j        d| dœ|                     d¬¦  «        ¥d¬¦  «        ¦  «         d S )NrA   )Útyper(   Újson)Úmode)ú,ú:)Ú
separators)r8   Úechora   ÚdumpsÚ
model_dump)r(   rA   s     r2   Ú_print_app_log_jsonri   j   sa   € Ý	„JÝŒ
àØ ðð ð —.’. f�.Ñ-Ô-ðð
 "ð	
ñ 	
ô 	
ñ	ô 	ð 	ð 	ð 	r1   ÚcoderS   Úhintc                óŠ   — |                       |¦  «         |r+|                      ¦   «          |                      |¦  «         d S d S )N)Úprint_errorÚ
print_lineÚ
print_hint)rV   rj   rS   rk   s       r2   Ú_render_plain_errorrp   w   sV   € ð ×Ò˜Ñ Ô Ð Øð !Ø×ÒÑÔÐØ×Ò˜4Ñ Ô Ð Ð Ð ð!ð !r1   r"   c                 ój  — d }|j         dk    rd}d}n‚t          |j        t          ¦  «        rGt	          |j        ¦  «        }t          |j        ¦  «        }t          |¦  «        }|j         dk    r|€d}n!d}dt          t          |¦  «        ¦  «        › �}|  	                    |||t          ¬¦  «         d S )	Ni”  Ú	not_foundz4App not found. Make sure to use the correct account.i�  zQTry a shorter time range (e.g. `--since 1d`). Log retention depends on your plan.Ú	api_errorz[red]Error:[/] ©rk   Úrender_output)Ústatus_codeÚ
isinstanceÚ	__cause__r   r   r   r   r   r-   Úfailrp   )rV   r"   rk   rj   rS   s        r2   Ú_handle_stream_log_errorrz   „   sÂ   € ð €DàÔ˜CÒÐØ%ˆØHˆˆå	�E”O¥YÑ	/Ô	/ð 9Ý" 5¤?Ñ3Ô3ˆÝ# E¤OÑ4Ô4ˆÝ" 4Ñ(Ô(ˆàÔ Ò#Ð#¨¨ð6ð øð ˆØ8¥F­3¨u©:¬:Ñ$6Ô$6Ð8Ð8ˆà‡L‚L��w TÕ9L€LÑMÔMÐMÐMÐMr1   ÚtailÚsinceÚfollowc                 ól  — g }	 t          ¦   «         5 }|                     ||||¬¦  «        D ]F}|r-| j        dk    rt          ||¦  «         nt	          | |¦  «         Œ1|                     |¦  «         ŒG|s+|                      t          ||¬¦  «        t          ¬¦  «         	 ddd¦  «         dS # 1 swxY w Y   dS # t          $ r |  
                    ¦   «          Y dS t          $ r}t          | |¦  «         Y d}~dS d}~wt          t          f$ r$ d}	|                      d|	dt           ¬	¦  «         Y dS w xY w)
z.Stream app logs and print them to the console.)r(   r{   r|   r}   ra   )r(   r)   )ru   Nz6Lost connection to log stream. Please try again later.Únetwork_errorzPlease try again later.rt   )r   Ústream_app_logsrb   ri   r[   ÚappendÚsuccessr'   r^   ÚKeyboardInterruptrn   r   rz   r   ÚTimeoutErrorry   rp   )
rV   r(   r{   r|   r}   r)   ÚclientrA   ÚerS   s
             r2   Ú_process_log_streamr‡       sö  € ð !€Dð$
Ý‰[Œ[ð 	˜FØ×-Ò-ØØØØð	 .ñ ô ð !ð !�ð ð Ø”| vÒ-Ð-Ý+¨F°CÑ8Ô8Ð8Ð8å'¨°Ñ5Ô5Ð5Øà—’˜CÑ Ô Ð Ð àð Ø—’Ý!¨°dÐ;Ñ;Ô;Ý"9ð  ñ ô ð ð ð+	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	øõ, ð ð ð Ø×ÒÑÔÐàˆˆÝð -ð -ð -Ý  ¨!Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,øøøøÝ¥Ð.ð 
ð 
ð 
ØJˆØ�ŠØØØ*Ý-ð	 	ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð
øøøsG   „B; ’BB.Â!B; Â.B2Â2B; Â5B2Â6B; Â;D3Ã	D3Ã%C;Ã;4D3Ä2D3)Úclsr)   éd   z--tailz-tz2Number of log lines to show before streaming (max z).T)ÚhelpÚshow_defaultÚcallbackÚ5mz--sincez-sz_Show logs since a specific time (e.g., '5m', '1h', '2d'). Limited by your plan's log retention.z--follow/--no-followz-fz=Stream logs in real-time (use --no-follow to fetch and exit).)rŠ   FÚctxÚpathzTPath to the directory with your app's pyproject.toml (defaults to current directory)z--app-idz+ID of the app whose logs should be fetched.Újson_outputc                 óL  — t          | ¦  «        j        }t          |||d¬¦  «        }t                               d|¦  «         |r|                     d|› d�d¬¦  «         n|                     d|› d	�d
¬¦  «         |                     ¦   «          t          |||||¬¦  «         dS )a*  Stream or fetch logs from your deployed app.

    Examples:
        fastapi cloud logs                      # Stream logs in real-time
        fastapi cloud logs --no-follow          # Fetch recent logs and exit
        fastapi cloud logs --tail 50 --since 1h # Last 50 logs from the past hour
    z9Pass --app-id or run `fastapi cloud link` to link an app.)r(   r�   rk   zFetching logs for app ID: %szStreaming logs for [bold]z[/bold] (Ctrl+C to exit)...u   ðŸ“¡rX   zFetching logs for [bold]z
[/bold]...u   ðŸ“œ)rV   r(   r{   r|   r}   N)r   rV   r   Úloggerr   rZ   rn   r‡   )	rŽ   r�   r(   r{   r|   r}   r�   rV   Útarget_app_ids	            r2   r)   r)   Ñ   s÷   € õl ' sÑ+Ô+Ô3€Gå*ØØØØHð	ñ ô €Mõ ‡L‚LÐ/°Ñ?Ô?Ð?àð 	
Ø�ŠØR¨ÐRÐRÐRØð 	ñ 	
ô 	
ð 	
ð 	
ð
 	�ŠØ@ }Ð@Ð@Ð@Øð 	ñ 	
ô 	
ð 	
ð ×ÒÑÔÐåØØØØØðñ ô ð ð ð r1   )Cra   ÚloggingÚrer   Úpathlibr   Útypingr   r8   Úhttpxr   Úpydanticr   Úrich.markupr   Úrich_toolkitr	   Úfastapi_cloud_cli._appr
   Úfastapi_cloud_cli.apir   r   r   r   r   r   r   Ú fastapi_cloud_cli.commands._authr   r   Ú$fastapi_cloud_cli.commands.apps._appr   Úfastapi_cloud_cli.utils.appsr   Úfastapi_cloud_cli.utils.clir   Úfastapi_cloud_cli.utils.errorsr   Ú!fastapi_cloud_cli.utils.executionr   Ú	getLoggerr*   r’   rF   Úcompiler6   r>   r?   r'   r-   r;   Úintr@   rK   rU   r[   r^   ri   rp   rz   Úboolr‡   ÚcommandÚOptionÚContextÚArgumentr)   r0   r1   r2   ú<module>r¬      sƒ  ðØ €€€Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $à ,Ð ,Ð ,Ð ,Ð ,Ð ,ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð SÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø :Ð :Ð :Ð :Ð :Ð :Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø >Ð >Ð >Ð >Ð >Ð >à	ˆÔ	˜8Ñ	$Ô	$€ð ØØØØØØðð Ð ð �”
˜>Ñ*Ô*€Ø€Ø€ðð ð ð ð �Iñ ô ð ð
˜3ð  3ð ð ð ð ð˜#ð  #ð ð ð ð ð%˜ð %¨ð %ð %ð %ð %ð?˜+ð ?¨#ð ?ð ?ð ?ð ?ðE˜[ð E¨{ð E¸tð Eð Eð Eð Eð& -ð &¸+ð &È$ð &ð &ð &ð &ð
 ð 
¨+ð 
¸$ð 
ð 
ð 
ð 
ð
!Øð
!ð ð
!ð ð	
!ð
 ð
!ð 
ð
!ð 
!ð 
!ð 
!ðNØðNàðNð 
ðNð Nð Nð Nð8.
Øð.
àð.
ð ð.
ð ð	.
ð
 ð.
ð 
ð.
ð .
ð .
ð .
ðb €Ô�{Ð#Ñ#Ô#Ø€Ô�&˜kÐ*Ñ*Ô*ð 	ð 	Ø�”ØØØØRÀ,ÐRÐRÐRØØðñ ô ð �”ØØØð4ð Ø ð
ñ 
ô 
ð  �5”<ØØØØLð	ñ ô ð %*ðWQð QØ	ŒðQà
Øˆt‰ØˆŒð2ð	
ñ 	
ô 	
ð	ôðQð Øˆd‰
ØˆŒØØ>ð	
ñ 	
ô 	
ð	ôðQð$ ð%Qð4 ð5QðJ ðKQðV "ðWQðX 
ðYQð Qð Qñ +Ô*ñ $Ô#ðQð Qð Qr1   