o
    ;iX                     @   s\   d Z ddlmZmZmZ ddlmZ ddlmZ ddl	m
Z
 eG dd deZd	d
 ZdS )z{This module provides Jupyter/IPython extensions for Modal.

Use in a notebook with `%load_ext modal.experimental.ipython`.
    )Magics
line_magicmagics_class   )Cls)NotFoundError)Functionc                   @   s   e Zd Zedd ZdS )ModalMagicsc              	   C   s  |  }|dstd dS |dd }|d\}}}|s%td dS d|vr/d|}}n|dd\}}d	d
 |dD }|D ]~}	|	sHqC|	 }
t|
dkrSqC|
d }|}t|
dkrj|
d dkrj|
d }nt|
dkr{td|	d  dS ztj|||d}|  W n t	y   t
j|||d}|  Y nw || jj|< |rtd|d|d|d qCtd|d|d qCdS )a1  Lookup a deployed Modal Function or Class.

        **Example:**

        ```python notest
        %modal from my-app import my_function, MyClass as Foo

        # Now you can call my_function() and Foo from your notebook.
        my_function.remote()
        Foo().my_method.remote()
        ```
        zfrom zcInvalid syntax. Use: %modal from [env/]<app> import <function|Class>[, <function|Class> [as alias]]N   z import z)Invalid syntax. Missing 'import' keyword./   c                 S   s   g | ]}|  qS  )strip).0itemr   r   N/home/ubuntu/.local/lib/python3.10/site-packages/modal/experimental/ipython.py
<listcomp>3   s    z%ModalMagics.modal.<locals>.<listcomp>,r      asr   zInvalid syntax in import item: z.. Expected format: <function|Class> [as alias])environment_namezLoaded z from environment z	 and app .z
 from app )r   
startswithprint	partitionsplitlenr   	from_namehydrater   r   shelluser_ns)selflineline_without_fromenv_app_partsepimport_partenvironmentappimport_itemsr   parts
model_namealiasobjr   r   r   modal   sL   

zModalMagics.modalN)__name__
__module____qualname__r   r.   r   r   r   r   r	      s    r	   c                 C   s   |  t d S )N)register_magicsr	   )ipythonr   r   r   load_ipython_extensionS   s   r4   N)__doc__IPython.core.magicr   r   r   clsr   	exceptionr   	functionsr   r	   r4   r   r   r   r   <module>   s   C