§
    >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
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 ddlmZmZmZmZmZ ddl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/  ej0        e1¦  «        Z2dZ3 ed¬¦  «        Z4dZ5de6fd„Z7 G d„ de	j8        ¦  «        Z9dS )é    N)Ú	Generator)Úcontextmanager)Ú	timedelta)Údetect_agent)ÚValidationError)ÚProgress)Ú__version__)ÚSettings)ÚAuthModeÚIdentity)ÚErrorToolkité   )ÚStreamLogErrorÚTooManyRetriesErrorÚget_http_error_codeÚget_http_error_hintÚhandle_http_error)
ÚTERMINAL_STATUSESÚAppLogEntryÚBuildLogAdapterÚBuildLogLineÚCustomDomainÚCustomDomainsAPIResponseÚ
DeploymentÚDeploymentStatusÚ EnvironmentVariableCreatePayloadÚEnvironmentVariableResponse)ÚSTREAM_LOGS_MAX_RETRIESÚSTREAM_LOGS_TIMEOUTÚattemptÚattemptsg       @éx   )Úsecondsé   Úreturnc                  óV   — dt           › �} t          d¬¦  «        x}r| › d|j        › �} | S )Nzfastapi-cloud-cli/Úhigh)Úminimum_confidencez
 AI-Agent/)r	   r   Úagent)Ú
user_agentÚ	detections     úMC:\Projects\Historical\venv\Lib\site-packages\fastapi_cloud_cli/api/client.pyÚ_get_user_agentr-   4   sC   € Ø3¥kÐ3Ð3€Jå °FÐ;Ñ;Ô;Ð;€yð @Ø"Ð?Ð?¨i¬oÐ?Ð?ˆ
àÐó    c                   ó  ‡ — e Zd ZU eed<   d(deddfˆ fd„Ze	 d)dddœded	e	dz  d
e	dz  de
dz  ded         f
d„¦   «         Zde	defd„Zde	defd„Zddœde	dee	ef         dee	         dedef
d„Zde	defd„Zde	de	dedefd„Zde	de	ddfd„Zde	de	defd„Z eee¦  «        ddœde	d edeeddf         fd!„¦   «         Zd"e	dedz  fd#„Z  eee¦  «        de	d$e!d%e	d edee"ddf         f
d&„¦   «         Z#de	de$fd'„Z%ˆ xZ&S )*Ú	APIClientÚ	auth_modeFÚuse_deploy_tokenr%   Nc                 ó@  •— t          j        ¦   «         }t          ¦   «         }|r|j        r|j        }d| _        n|j        }d| _        dt          ¦   «         i}|rd|› �|d<   t          ¦   «                              |j	        t          j        d¦  «        |¬¦  «         d S )NÚtokenÚuserz
User-AgentzBearer ÚAuthorizationé   )Úbase_urlÚtimeoutÚheaders)r
   Úgetr   Údeploy_tokenr1   Ú
user_tokenr-   ÚsuperÚ__init__Úbase_api_urlÚhttpxÚTimeout)Úselfr2   ÚsettingsÚidentityr4   r:   Ú	__class__s         €r,   r?   zAPIClient.__init__@   s¶   ø€ Ý”<‘>”>ˆÝ‘:”:ˆð ð 	$ Ô 5ð 	$ØÔ)ˆEØ$ˆDŒNˆNàÔ'ˆEØ#ˆDŒNà¥Ñ!2Ô!2Ð3ˆØð 	9Ø'8°Ð'8Ð'8ˆG�OÑ$å‰Œ×ÒØÔ*Ý”M "Ñ%Ô%Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r.   )Únot_found_messageÚtoolkitÚprogressÚdefault_messagerG   rH   )NNNc          	   #   óˆ  K  — |r|j         nd}	 d V — d S # t          j        $ rk}t                               |¦  «         d}|dk    r|r|                     d|d¬¦  «         |                     |¦  «         t          j        d¦  «        d ‚d }~wt          j	        $ r¥}t                               |¦  «         t          |||| j        ¬¦  «        }t          |¦  «        }|dk    r/|r-|                     ||t          || j        ¬	¦  «        ¬¦  «         n|                     |¦  «         t          j        d¦  «        d ‚d }~ww xY w)
NÚhumanzJThe request to the FastAPI Cloud server timed out. Please try again later.ÚjsonÚnetwork_errorzPlease try again later.)Úhintr   )rG   r1   )r1   )ÚmoderA   ÚReadTimeoutÚloggerÚdebugÚfailÚ	set_errorÚtyperÚExitÚ	HTTPErrorr   r1   r   r   )	rC   rI   rJ   rG   rH   rP   ÚeÚmessageÚcodes	            r,   Úhandle_http_errorszAPIClient.handle_http_errorsV   s�  è è € ð  'Ð3ˆwŒ|ˆ|¨Gˆð(	*ØˆEˆEˆEˆEˆEøÝÔ ð 	*ð 	*ð 	*Ý�LŠL˜‰OŒOˆOð+ð ð
 �vŠ~ˆ~ 'ˆ~Ø—’Ø#ØØ2ð ñ ô ð ð ×Ò˜wÑ'Ô'Ð'å”*˜Q‘-”- TÐ)øøøøÝŒð 	*ð 	*ð 	*Ý�LŠL˜‰OŒOˆOå'ØØØ"3Øœ.ð	ñ ô ˆGõ ' qÑ)Ô)ˆDà�vŠ~ˆ~ 'ˆ~Ø—’ØØÝ,¨T¸T¼^ÐLÑLÔLð ñ ô ð ð ð ×"Ò" 7Ñ+Ô+Ð+å”*˜Q‘-”- TÐ)øøøøð)	*øøøs"   � •E¤A&B
Â
EÂB D<Ä<EÚdeployment_idc                 ó¦   — |                       d|› �¦  «        }|                     ¦   «          t          j        |                     ¦   «         ¦  «        S )Nú/deployments/)r;   Úraise_for_statusr   Úmodel_validaterM   )rC   r]   Úresponses      r,   Úget_deploymentzAPIClient.get_deploymentŽ   sG   € Ø—8’8Ð;¨MÐ;Ð;Ñ<Ô<ˆØ×!Ò!Ñ#Ô#Ð#ÝÔ(¨¯ª©¬Ñ9Ô9Ð9r.   Úapp_idc                ó¨   — |                       d|› d�¦  «        }|                     ¦   «          t          j        |                     ¦   «         ¦  «        S )Nú/apps/ú/environment-variables/)r;   r`   r   ra   rM   ©rC   rd   rb   s      r,   Úget_environment_variablesz#APIClient.get_environment_variables“   sJ   € Ø—8’8ÐD VÐDÐDÐDÑEÔEˆØ×!Ò!Ñ#Ô#Ð#å*Ô9¸(¿-º-¹/¼/ÑJÔJÐJr.   T)ÚredeployÚupsertÚdeleterj   c                óì   — |                       d|› d�d„ |                     ¦   «         D ¦   «         ||dœ¬¦  «        }|                     ¦   «          t          j        |                     ¦   «         ¦  «        S )Nrf   rg   c                 ó>   — i | ]\  }}||                      ¦   «         “ŒS © )Ú
model_dump)Ú.0ÚnameÚpayloads      r,   ú
<dictcomp>z9APIClient.batch_environment_variables.<locals>.<dictcomp>¤   s7   € ð ð ð Ù3@°4¸�D˜'×,Ò,Ñ.Ô.ðð ð r.   )rk   rl   rj   ©rM   )ÚputÚitemsr`   r   ra   rM   )rC   rd   rk   rl   rj   rb   s         r,   Úbatch_environment_variablesz%APIClient.batch_environment_variables™   s�   € ð —8’8Ø4�VÐ4Ð4Ð4ðð ØDJÇLÂLÁNÄNðñ ô ð !Ø$ðð ð ñ 	
ô 	
ˆð 	×!Ò!Ñ#Ô#Ð#å*Ô9¸(¿-º-¹/¼/ÑJÔJÐJr.   c                ó¨   — |                       d|› d�¦  «        }|                     ¦   «          t          j        |                     ¦   «         ¦  «        S )Nrf   ú/custom-domains)r;   r`   r   ra   rM   rh   s      r,   Úget_custom_domainszAPIClient.get_custom_domains¯   sJ   € Ø—8’8Ð< VÐ<Ð<Ð<Ñ=Ô=ˆØ×!Ò!Ñ#Ô#Ð#å'Ô6°x·}²}±´ÑGÔGÐGr.   rr   Úis_using_pre_validationc                ó²   — |                       d|› d�||dœ¬¦  «        }|                     ¦   «          t          j        |                     ¦   «         ¦  «        S )Nrf   rz   )rr   r|   ru   ©Úpostr`   r   ra   rM   )rC   rd   rr   r|   rb   s        r,   Úcreate_custom_domainzAPIClient.create_custom_domainµ   sg   € ð —9’9Ø,�VÐ,Ð,Ð,àØ+Bðð ð ñ 
ô 
ˆð 	×!Ò!Ñ#Ô#Ð#åÔ*¨8¯=ª=©?¬?Ñ;Ô;Ð;r.   Ú	domain_idc                ód   — |                       d|› d|› �¦  «        }|                     ¦   «          d S )Nrf   ú/custom-domains/)rl   r`   ©rC   rd   r�   rb   s       r,   Úremove_custom_domainzAPIClient.remove_custom_domainÇ   s<   € Ø—;’;ÐK¨ÐKÐKÀ	ÐKÐKÑLÔLˆØ×!Ò!Ñ#Ô#Ð#Ð#Ð#r.   c                ó®   — |                       d|› d|› d�¦  «        }|                     ¦   «          t          j        |                     ¦   «         ¦  «        S )Nrf   rƒ   z/restart-setupr~   r„   s       r,   Úrestart_custom_domain_setupz%APIClient.restart_custom_domain_setupË   sT   € ð —9’9ÐW fÐWÐW¸iÐWÐWÐWÑXÔXˆØ×!Ò!Ñ#Ô#Ð#åÔ*¨8¯=ª=©?¬?Ñ;Ô;Ð;r.   )Úfollowrˆ   c             #   óö  K  — d }	 |rd|ind }|                       dd|› d�d|¬¦  «        5 }|j        r|                     ¦   «          |                     ¦   «          |                     ¦   «         D ]Ÿ}|r|                     ¦   «         sŒ|                      |¦  «        x}ro|j        r|j        }|j        dk    r|V — |j        d	v r|V —  d d d ¦  «         d S |j        d
k    r,t           
                    d¦  «         |s d d d ¦  «         d S  n?Œ |s	 d d d ¦  «         d S t           
                    d¦  «         t          j        d¦  «        ‚	 d d d ¦  «         n# 1 swxY w Y   t          j        d¦  «         �Œu)NTÚlast_idÚGETr_   z/build-logsé<   )r9   ÚparamsrZ   )ÚcompleteÚfailedr9   zReceived timeout; reconnectingz4Connection closed by server unexpectedly; will retryz(Connection closed without terminal stateg      à?)ÚstreamÚis_errorÚreadr`   Ú
iter_linesÚstripÚ_parse_log_lineÚidÚtyperR   rS   rA   ÚNetworkErrorÚtimeÚsleep)rC   r]   rˆ   rŠ   r�   rb   ÚlineÚlog_lines           r,   Ústream_build_logszAPIClient.stream_build_logsÖ   sŽ  è è € ð ˆð+	Ø-4Ð>�i Ð)Ð)¸$ˆFà—’ØØ: Ð:Ð:Ð:ØØð	 ñ ô ð &Yð
 ØÔ$ð $ð —M’M‘O”O�OØ×)Ò)Ñ+Ô+Ð+à$×/Ò/Ñ1Ô1ð Yð Y�DØð ! t§z¢z¡|¤|ð !Ø à#'×#7Ò#7¸Ñ#=Ô#=Ð=�xð "Ø#œ;ð 2Ø&.¤k˜Gà#œ=¨IÒ5Ð5Ø"*˜N˜N˜Nà#œ=Ð,BÐBÐBØ"*˜N˜N˜NØ"ð3&Yð &Yð &Yñ &Yô &Yð &Yð &Yð &Yð6 $œ=¨IÒ5Ð5Ý"ŸLšLÐ)IÑJÔJÐJØ#)ð 'Ø &ð=&Yð &Yð &Yñ &Yô &Yð &Yð &Yð &Yð> "˜Eøà!ð ØðE&Yð &Yð &Yñ &Yô &Yð &Yð &Yð &YõH —L’LÐ!WÑXÔXÐXåÔ,Ð-WÑXÔXÐXð "ð?&Yð &Yð &Yñ &Yô &Yð &Yð &Yð &Yð &Yð &Yð &Yøøøð &Yð &Yð &Yð &YõP ŒJ�s‰OŒOˆOñW+	s$   «BEÃ(EÄEÄ.EÅEÅ!Er›   c                 ó¼   — 	 t          j        |¦  «        S # t          t          j        f$ r/}t
                               d|d d…         |¦  «         Y d }~d S d }~ww xY w)Nz&Skipping malformed log: %s (error: %s)éd   )r   Úvalidate_jsonr   rM   ÚJSONDecodeErrorrR   rS   )rC   r›   rY   s      r,   r•   zAPIClient._parse_log_line	  sk   € ð	Ý"Ô0°Ñ6Ô6Ð6øÝ¥Ô!5Ð6ð 	ð 	ð 	Ý�LŠLÐAÀ4ÈÈÈÄ:ÈqÑQÔQÐQØ�4�4�4�4�4øøøøð	øøøs   ‚ –A¬$AÁAÚtailÚsincec              #   ó  K  — |rdnd}|                       dd|› d�|||dœ|¬¦  «        5 }|j        r|                     ¦   «          |                     ¦   «          |                     ¦   «         D ]ÿ}|r|                     ¦   «         sŒ	 t          j        |¦  «        }n0# t          j        $ r t           
                    d|¦  «         Y Œ[w xY w|                     d	¦  «        d
k    rŒy|                     d	¦  «        dk    r#t          |                     dd¦  «        ¦  «        ‚	 t          j        |¦  «        V — ŒÍ# t          $ r&}	t           
                    d||	¦  «         Y d }	~	Œød }	~	ww xY w	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr"   é   r‹   rf   z/logs/stream)r¢   r£   rˆ   )r�   r9   zFailed to parse log line: %sr—   Ú	heartbeatÚerrorrZ   zUnknown errorz"Failed to parse log entry: %s - %s)r�   r‘   r’   r`   r“   r”   rM   Úloadsr¡   rR   rS   r;   r   r   ra   r   )
rC   rd   r¢   r£   rˆ   r9   rb   r›   ÚdatarY   s
             r,   Ústream_app_logszAPIClient.stream_app_logs  s  è è € ð  Ð'�#�# RˆØ�[Š[ØØ)�VÐ)Ð)Ð)àØØ ðð ð
 ð ñ 	
ô 	
ð "	ð ØÔ ð  ð —’‘”�Ø×%Ò%Ñ'Ô'Ð'Ø ×+Ò+Ñ-Ô-ð ð �Øð  4§:¢:¡<¤<ð ØðÝœ: dÑ+Ô+�D�DøÝÔ+ð ð ð Ý—L’LÐ!?ÀÑFÔFÐFØ�Hðøøøð —8’8˜FÑ#Ô# {Ò2Ð2Øà—8’8˜FÑ#Ô# wÒ.Ð.Ý(¨¯ª°)¸_Ñ)MÔ)MÑNÔNÐNðÝ%Ô4°TÑ:Ô:Ð:Ð:Ð:Ð:øÝ&ð ð ð Ý—L’LÐ!EÀtÈQÑOÔOÐOØ�H�H�H�Høøøøðøøøð#ð"	ð "	ð "	ñ "	ô "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	øøøð "	ð "	ð "	ð "	ð "	ð "	sa   ªAE<ÂBÂE<Â*C
ÃE<Ã	C
Ã
AE<Ä$D;Ä:E<Ä;
E+ÅE&Å!E<Å&E+Å+E<Å<F ÆF c                 ó\  — t          j        ¦   «         }d}	 t          j        ¦   «         |z
  t                               ¦   «         k    rt	          d¦  «        ‚t          |¦  «        5  |                      d|› �¦  «        }|                     ¦   «          t          | 	                    ¦   «         d         ¦  «        }d}|t          v r|cd d d ¦  «         S t          j        t          ¦  «         	 d d d ¦  «         Œã# 1 swxY w Y   |dz  }|t          k    rt          dt          › d�¦  «        ‚�Œ)	Nr   Tz!Deployment verification timed outr_   Ústatusr   zFailed after z# attempts polling deployment status)r™   Ú	monotonicÚPOLL_TIMEOUTÚtotal_secondsÚTimeoutErrorr    r;   r`   r   rM   r   rš   ÚPOLL_INTERVALÚPOLL_MAX_RETRIESr   )rC   r]   ÚstartÚerror_countrb   r¬   s         r,   Úpoll_deployment_statusz APIClient.poll_deployment_status=  s†  € õ ”Ñ Ô ˆØˆð	ÝŒ~ÑÔ %Ñ'­,×*DÒ*DÑ*FÔ*FÒFÐFÝ"Ð#FÑGÔGÐGå˜Ñ%Ô%ð 
ð 
ØŸ8š8Ð$C°MÐ$CÐ$CÑDÔD�Ø×)Ò)Ñ+Ô+Ð+Ý)¨(¯-ª-©/¬/¸(Ô*CÑDÔD�Ø�àÕ.Ð.Ð.Ø!ð
ð 
ð 
ð 
ñ 
ô 
ð 
ð 
õ ”
�=Ñ)Ô)Ð)Øð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð ˜1ÑˆKØÕ.Ò.Ð.Ý)ØYÕ$4ÐYÐYÐYñô ð ñ%	s   Á&A C9ÃC9Ã9C=Ä C=)F)N)'Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__Úboolr?   r   r   Ústrr   r   r\   r   rc   r   ri   Údictr   Úlistrx   r   r{   r   r€   r…   r‡   r!   r   r   r   r�   r•   Úintr   rª   r   rµ   Ú__classcell__)rF   s   @r,   r0   r0   =   sr  ø€ € € € € € ØÐÐÑð
ð 
¨ð 
¸$ð 
ð 
ð 
ð 
ð 
ð 
ð, ð '+ð5*ð
 )-Ø'+ð5*ð 5*ð 5*àð5*ð ˜t™ð5*ð
  ™:ð5*ð  Ñ$ð5*ð 
Ð#Ô	$ð5*ð 5*ð 5*ñ „^ð5*ðn:¨Cð :°Jð :ð :ð :ð :ð
K°3ð KÐ;Vð Kð Kð Kð Kð ðKð Kð Kð ðKð �SÐ:Ð:Ô;ð	Kð
 �S”	ðKð ðKð 
%ðKð Kð Kð Kð,H¨Cð HÐ4Lð Hð Hð Hð Hð<ð ð<ð ð	<ð
 "&ð<ð 
ð<ð <ð <ð <ð$$¨cð $¸cð $Àdð $ð $ð $ð $ð	<ð ð	<ð ð		<ð
 
ð	<ð 	<ð 	<ð 	<ð €XÐ%Ð':Ñ;Ô;à48ð0ð 0ð 0Ø ð0Ø-1ð0à	�<  tÐ+Ô	,ð0ð 0ð 0ñ <Ô;ð0ðd Cð ¨L¸4Ñ,?ð ð ð ð ð €XÐ%Ð':Ñ;Ô;ð*àð*ð ð*ð ð	*ð
 ð*ð 
�;  dÐ*Ô	+ð*ð *ð *ñ <Ô;ð*ðXàðð 
ðð ð ð ð ð ð ð r.   r0   ):rM   Úloggingr™   Úcollections.abcr   Ú
contextlibr   Údatetimer   rA   rV   Úagent_detectorr   Úpydanticr   Úrich_toolkit.progressr   Úfastapi_cloud_clir	   Úfastapi_cloud_cli.configr
   Úfastapi_cloud_cli.utils.authr   r   Úfastapi_cloud_cli.utils.errorsr   Ú_errorsr   r   r   r   r   Ú_modelsr   r   r   r   r   r   r   r   r   r   Ú_retryr   r   r    r!   Ú	getLoggerr¶   rR   r±   r®   r²   r»   r-   ÚClientr0   ro   r.   r,   ú<module>rÐ      sr  ðØ €€€Ø €€€Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð à €€€Ø €€€Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø $Ð $Ð $Ð $Ð $Ð $Ø *Ð *Ð *Ð *Ð *Ð *à )Ð )Ð )Ð )Ð )Ð )Ø -Ð -Ð -Ð -Ð -Ð -Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð 
ˆÔ	˜8Ñ	$Ô	$€à€Øˆy Ð%Ñ%Ô%€ØÐ ð˜ð ð ð ð ð[ð [ð [ð [ð [�”ñ [ô [ð [ð [ð [r.   