
    )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dS )    )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}|                                  D ]_}|                                r|j        |vr|                                 |                                r|j        |vrt          |           `d S )Nz__init__.pyz
.gitignore)iterdiris_filenameunlinkis_dirclean_user_provided_scripts)r   files_to_keepitems      ^/DATA/AppData/hermes/venv/lib/python3.11/site-packages/trame_client/external_script_handler.pyr   r      s    "L1M   . .<<>> 	di}<<KKMMM;;== 	.TYm;;'---. .    c                   $    e Zd ZU eed<   ded<   dS )UserDefinedFunctionr   ExternalScriptscriptN)__name__
__module____qualname__str__annotations__ r   r   r   r      s'         
III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dS )r   r   script_original_file_pathfunction_namesis_umd_moduleNumd_global_var_namenamespaced_script_file_pathc                    t          | j        t                    rKt          | j                  }t	          |j        |j        g          sd| j         d}t          |          d S | j        rt          nt          }t          | j                  }t          | d| j        j                   | _        t          j        | j        || j        z             d S )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4c:: 	d<==Fv}566 &a@^aaa oo%& & %7226   +4+IJJ/3#KKd&D&IKK0 0D, L.!AA    r   returnc                     | j         r| j        S t          | j        t                    r| j        S t
          }t          j        }||z  | j        z  	                                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   sc     	,++d4c:: 	211;
<A ))D,LL
(**	r   c                     | j         rdndS )Numdes)r%   )r2   s    r   module_typezExternalScript.module_typeU   s    *4uu4r   c                     |sH	 t          | j                  dk    sJ n# t          $ r d}t          |          w xY w| j        d         }t	          ||           S )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   s     
	*&4.//144444! & & & !oo%& &q)D"T::::s    ;r:   )r   r   r   r   r    r   listboolr'   r7   propertyr>   rB   r   rF   r!   r   r   r   r   #   s         
III#cz)))It###/3333  2 S    X 5S 5 5 5 X5; ;S4Z ;3F ; ; ; ; ; ;r   r   r   r8   c                 l    	 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   sL    %#D)) % % %???oo1$%s    
3.3F)r@   r&   script_file_pathr$   r@   r&   c                    |t           v rt                              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   ss     ###A4HHH D#$BCC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; B; B; B; B; B;J  % % % % % % &*& & && I& 	&
 
& t& & & & & & &r   