
    mj                        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mZmZmZ  ej                  e      Zdefd	Ze G d
 d             Ze G d d             Zi ZdedefdZddddedee   dedededz  defdZy)    )PathN)	dataclass)urlparse   )file_digest)USER_PROVIDED_SCRIPTS_DIR_PATH&USER_PROVIDED_SCRIPTS_SERVE_URL_PREFIX"USER_PROVIDED_UMD_SCRIPTS_DIR_PATH!USER_PROVIDED_ES_SCRIPTS_DIR_PATHfolderc                     ddh}| j                         D ][  }|j                         r|j                  |vr|j                          |j	                         sB|j                  |vsQt        |       ] y )Nz__init__.pyz
.gitignore)iterdiris_filenameunlinkis_dirclean_user_provided_scripts)r   files_to_keepitems      Q/DATA/.local/lib/python3.12/site-packages/trame_client/external_script_handler.pyr   r      sV    "L1M <<>dii}<KKM;;=TYYm;'- !    c                   "    e Zd ZU eed<   ded<   y)UserDefinedFunctionr   ExternalScriptscriptN)__name__
__module____qualname__str__annotations__ r   r   r   r      s    
Ir   r   c                       e Zd ZU eed<   eez  ed<   ee   ed<   eed<   edz  ed<   dZedz  ed<   d Z	e
d	efd
       Ze
d	efd       Zddedz  d	efdZy)r   r   script_original_file_pathfunction_namesis_umd_moduleNumd_global_var_namenamespaced_script_file_pathc                    t        | j                  t              rRt        | j                        }t	        |j
                  |j                  g      sd| j                   d}t        |      y | j                  rt        nt        }t        | j                        }t        | d| j                  j                         | _        t        j                   | j                  || j                  z         y )Nz'String must be a valid URL. Received: ''_)
isinstancer#   r   r   allschemenetloc
ValueErrorr%   r
   r   r   r   r   r'   shutilcopy2)selfparsedmsgdest_base_pathscript_file_hashs        r   __post_init__zExternalScript.__post_init__,   s    d44c:d<<=Fv}}56?@^@^?__`a o% 7 %% 36   +4+I+IJ/3#$Ad&D&D&I&I%JK0D, LL..!A!AAr   returnc                     | j                   r| j                  S t        | j                  t              r| j                  S t
        }t        j                  }||z  | j                  z  j                         S N)
r%   r&   r+   r#   r   r	   r   r   r'   as_posix)r2   
url_prefixes_module_prefixs      r   module_pathzExternalScript.module_pathE   sf    +++d44c:111;
<AA ))D,L,LL
(*	r   c                 "    | j                   rdS dS )Numdes)r%   )r2   s    r   module_typezExternalScript.module_typeU   s    **u44r   c                     |s+	 t        | j                        dk(  sJ 	 | j                  d   }t	        ||       S # t        $ r d}t        |      w xY w)Nr   z
                    Ambiguate call to function() without an explicit name.
                    Explicitly specify the function name using the name parameter.
                r   )r   r   )lenr$   AssertionErrorr/   r   )r2   r   r4   s      r   functionzExternalScript.functionY   sf    &4../1444 &&q)D"T:: " & !o%&s	   ; Ar:   )r   r   r   r   r    r   listboolr'   r7   propertyr>   rB   r   rF   r!   r   r   r   r   #   s    
I#cz)It#/332 S   5S 5 5;S4Z ;3F ;r   r   r   r8   c                 Z    	 t         |    S # t        $ r}d|  }t        |      |d }~ww xY w)Nz(No external script associated with name )EXTERNAL_SCRIPTS_MAPKeyErrorr/   )r   er4   s      r   get_external_script_from_namerN   l   s:    %#D)) %8?o1$%s    	*%*F)r@   r&   script_file_pathr$   r@   r&   c                    |t         v rt        j                  d|       t         st        t               t        || |||      t         |<   t         |   S )Nz(overwriting already registered script %s)r%   r&   )rK   loggerwarningr   r   r   )rO   r$   r   r@   r&   s        r   register_user_provided_scriptrS   t   sT     ##A4H#$BC!//"  %%r   )pathlibr   loggingr0   dataclassesr   urllib.parser   utils.web_moduler   moduler   r	   r
   r   	getLoggerr   rQ   r   r   r   rK   r   rN   rG   rH   rS   r!   r   r   <module>r[      s       ! ! )  
		8	$. .   
 B; B; B;J  % % % &*&& I& 	&
 
& t& &r   