o
    ;i                     @   s  U 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 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 ddlmZmZ eddG dd dZG dd deddZeeZi Zee ef e!d< de dedefddZ"ej#d-de dee fddZ$ej#dddd d!e d"ee  d#ee  dee fd$d%Z%ej#d-de dee fd&d'Z&ej#d-dee de'ej( fd(d)Z)d-d*ee  de fd+d,Z*dS ).    )	dataclass)Optional)Empty)Message)StringValue)api_pb2   )LoadContext)_Object)Resolver)synchronize_apisynchronizer)check_object_name)_Client)configloggerT)frozenc                   @   s   e Zd ZU eed< eed< dS )EnvironmentSettingsimage_builder_versionwebhook_suffixN)__name__
__module____qualname__str__annotations__ r   r   F/home/ubuntu/.local/lib/python3.10/site-packages/modal/environments.pyr      s   
 r   c                	   @   sR   e Zd ZU eed< dd ZdefddZeddd	d
e	de
dee fddZdS )_Environment	_settingsc                 C   s   t d)zmdmd:hiddenzZ`Environment(...)` constructor is not allowed. Please use `Environment.from_name` instead.)RuntimeError)selfr   r   r   __init__   s   z_Environment.__init__metadatac                 C   s.   |rt |tjs
J t|jj|jjd| _d S )N)r   r   )
isinstancer   EnvironmentMetadatar   settingsr   r   r   )r    r"   r   r   r   _hydrate_metadata'   s
   z_Environment._hydrate_metadataFN)create_if_missingclientnamer'   r(   c             	      sT   rt d dtdtdtdtt f fdd}tj|dd	d
d
t|ddS )NEnvironmentr    resolverload_contextexisting_object_idc                    sZ   t j r	t jnt jd}|jj|I d H }td|j	  | 
|j	|j|j d S )N)deployment_nameobject_creation_typezCreated environment with id )r   EnvironmentGetOrCreateRequest&OBJECT_CREATION_TYPE_CREATE_IF_MISSING OBJECT_CREATION_TYPE_UNSPECIFIEDr(   stubEnvironmentGetOrCreater   debugenvironment_id_hydrater"   )r    r+   r,   r-   requestresponser'   r)   r   r   _loadB   s   z%_Environment.from_name.<locals>._loadzEnvironment.from_name()Tr(   )is_another_apphydrate_lazilyload_context_overrides)r   r   r   r	   r   r   _from_loader)r)   r'   r(   r;   r   r:   r   	from_name3   s$   

z_Environment.from_name)r   r   r   r   r   r!   r   r&   staticmethodr   boolr   r   rB   r   r   r   r   r      s   
 
r   en)type_prefixENVIRONMENT_CACHEr)   r(   returnc                    s6   | t v r	t |  S tj| |d I d H }|t | < |S )Nr=   )rG   r   rB   hydrate)r)   r(   environmentr   r   r   _get_environment_cacheda   s   rK   Nc                    6   |d u rt  I d H }|jtj| dI d H  d S N)r)   )r   from_envr3   EnvironmentDeleter   EnvironmentDeleteRequestr)   r(   r   r   r   delete_environmenti      rR   )new_namenew_web_suffixr(   current_namerT   rU   c                   s~   d }d }|d urt |dk rtdt|d}|d ur!t|d}tj| ||d}|d u r4t I d H }|j|I d H  d S )Nr   z(The new environment name cannot be empty)value)rV   r)   
web_suffix)	len
ValueErrorr   r   EnvironmentUpdateRequestr   rN   r3   EnvironmentUpdate)rV   rT   rU   r(   new_name_pb2new_web_suffix_pb2update_payloadr   r   r   update_environmentp   s   

r`   c                    rL   rM   )r   rN   r3   EnvironmentCreater   EnvironmentCreateRequestrQ   r   r   r   create_environment   rS   rc   c                    s6   | d u rt  I d H } | jt I d H }t|jS N)r   rN   r3   EnvironmentListr   listitems)r(   respr   r   r   list_environments   s
   
ri   environment_namec                 C   s   | dur
t d|  t dS )a.  Override config environment with environment from environment_name

    This is necessary since a cli command that runs Modal code, without explicit
    environment specification wouldn't pick up the environment specified in a
    command line flag otherwise, e.g. when doing `modal run --env=foo`
    NrJ   )r   override_locallyget)rj   r   r   r   
ensure_env   s   
rm   rd   )+dataclassesr   typingr   google.protobuf.empty_pb2r   google.protobuf.messager   google.protobuf.wrappers_pb2r   modal_protor   _load_contextr	   _objectr
   	_resolverr   _utils.async_utilsr   r   _utils.name_utilsr   r(   r   r   r   r   r   r*   rG   dictr   r   rK   create_blockingrR   r`   rc   rf   EnvironmentListItemri   rm   r   r   r   r   <module>   sN   @ 