
    ɯei+&                         d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
 d dlmZmZ d dlmZ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  G d de      Z  G d de      Z!y)    )
ModuleType)AnyCallableDictListOptionalSetTupleUnion)	build_udfwith_src_position)check_python_runtime_versionprocess_registration_inputs)TempObjectType)SnowparkSQLException)"extract_import_dir_and_module_name)get_fully_qualified_name)SnowparkLocalTestingException)DataType)UDFRegistrationUserDefinedFunctionc                   8     e Zd Zdddd	 fdZdeddfdZ xZS )
MockUserDefinedFunctionFT)strictuse_session_importsreturnNc                ^    t        |   |i | || _        t               | _        || _        y N)super__init__r   set_importsr   )selfr   r   argskwargs	__class__s        ^/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/snowflake/snowpark/mock/_udf.pyr    z MockUserDefinedFunction.__init__   s-    $)&)#6     absolute_module_pathc                 H    d| _         | j                  j                  |       y )NF)r   r"   add)r#   r)   s     r'   
add_importz"MockUserDefinedFunction.add_import   s    #( ./r(   r   N)__name__
__module____qualname__r    strr,   __classcell__r&   s   @r'   r   r      s     %* 70s 0t 0r(   r   c            8           e Zd Zd) fdZd Z	 	 d*dedee   dee   defdZdedefd	Z	dede
e   fd
Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 d+dddddddddeeeeef   f   dee   deee      dee   dee   deeeeeeef   f         deeeeef         dedededee   dedededeee      deeeef      dedee   d eeeef      d!ed"ed#ed$ed%eeeef      d&ed'edef6d(Z xZS ),MockUDFRegistrationr   Nc                     t        |   |i | t               | _        t	               | _        | j                  j                  j                         | _	        y r   )
r   r    dict	_registryr!   _session_level_imports_session_connget_lock_lock)r#   r$   r%   r&   s      r'   r    zMockUDFRegistration.__init__"   sI    $)&) F 	
 '*e#]]((113
r(   c                 z    | j                   5  | j                  j                          d d d        y # 1 sw Y   y xY wr   )r=   r9   clear)r#   s    r'   _clear_session_importsz*MockUDFRegistration._clear_session_imports,   s0    ZZ 	0''--/	0 	0 	0s   1:	file_pathimport_pathudf_namec                    | j                   5  t        || j                  j                  j                  |      \  }}|r| j
                  |   j                  |       n| j                  j                  |       |cddd       S # 1 sw Y   yxY w)ak  
        Imports a python file or a directory of python module structure or a zip of the former.
        Returns the name of the Python module to be imported.
        When udf_name is not None, the import is added to the UDF associated with the name;
        Otherwise, it is a session level import and will be used if no UDF-level imports are specified.
        N)	r=   r   r:   r;   stage_registryr8   r,   r9   r+   )r#   rA   rB   rC   r)   module_names         r'   _import_filez MockUDFRegistration._import_file0   s|     ZZ 		0R4==..=={1- + x(334HI++//0DE		 		 		s   A,BBc                     | j                   5  || j                  vrt        d| d      | j                  |   cd d d        S # 1 sw Y   y xY w)Nzudf z does not exist.)r=   r8   r   )r#   rC   s     r'   get_udfzMockUDFRegistration.get_udfG   sK    ZZ 	,t~~-3d8*DT4UVV>>(+	, 	, 	,s   ,AAc                     | j                   5  | j                  j                  |      }|st               cd d d        S |j                  r| j
                  cd d d        S |j                  cd d d        S # 1 sw Y   y xY wr   )r=   r8   getr!   r   r9   r"   )r#   rC   udfs      r'   get_udf_importsz#MockUDFRegistration.get_udf_importsM   sk    ZZ 	$..$$X.Cu	$ 	$ ((22	$ 	$ ||	$ 	$ 	$s   'A4A4A44A=FT)statement_paramssource_code_displayskip_upload_on_content_matchis_permanentnative_app_paramscopy_grants	_emit_astfuncreturn_typeinput_typesnamestage_locationimportspackagesreplaceif_not_existsparallelmax_batch_sizefrom_pandas_udf_functionr   secureexternal_access_integrationssecrets	immutablecommentrN   rO   api_call_sourcerP   rQ   rR   rS   rT   c                T   d\  }}|j                  d      ~|rP| j                  j                  j                         }t	        |j
                  j                  |      }|j                  }|d   }t        |||||||d u ||	      } | | j                  |<   | S |r,| j                  j                  j                  ddt               | j                  5  t        | j                  t        j                   ||||      \  }!}"}#}}}$| j                  j#                         }%| j                  j%                         }&t'        |!|%|&      }!|r}| j                  j                  j                         }t	        |j
                  j                  |      }|j                  }t)        ||||||||||	|
|||||||f|||| j                  |!d| |r|"st+        d      d	}'|'st-        | j                  j.                         |r|	rt+        d
      |!| j                  v r*|	r(| j                  |!   }(||(_        ||(_        |(cd d d        S |!| j                  v r|st5        d|! dd      |r	 t        ||||!|||d u ||	      | j                  |!<   t7        |      t8        u r/| j;                  |d   |!      })|)|d   f| j                  |!   _        |E|D ]@  }*t7        |*      t>        u r| j;                  |*|!       (|*\  }+},| j;                  |+|,|!       B | j                  |!   cd d d        S # 1 sw Y   y xY w)NNN_registered_object_name)r   r[   r   _ast_ast_idrL   z5Registering permanent UDF is not currently supported.)external_feature_nameerror_messageraise_error)rN   rO   rQ   sessionri   zMYou cannot create a non-vectorized UDF using pandas_udf(). Use udf() instead.Fz2options replace and if_not_exists are incompatiblez0002002 (42710): SQL compilation error: 
Object 'z' already exists.1304)
error_coder   )rC      ) rK   r:   
_ast_batchbindr   exprrL   uidr   r8   r;   log_not_supported_errorNotImplementedErrorr=   r   r   FUNCTIONget_current_schemaget_current_databaser   r   
ValueErrorr   !_runtime_version_from_requirementrj   rk   r   typetuplerG   rU   r1   )-r#   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   r   ra   rb   rc   rd   re   rN   rO   rf   rP   rQ   rR   rS   rT   r%   astast_idstmtobject_namerL   rC   is_pandas_udfis_dataframe_inputopt_arg_defaultscurrent_schemacurrent_database%custom_python_runtime_version_allowedansrF   _import
local_pathrB   s-                                                r'   _do_register_udfz$MockUDFRegistration._do_register_udfW   s   > !V::/0<}}//446'		t< !:;K)!$+tO
C +.DNN;'JMM77&+U/ 8  ZZ q	, ,''"  "]]==?N#}}AAC/.*:H }}//446'		t<"!"0%& &6(;!- MM,4/0 1: ( ) 
 5:18,MMCC = !UVV4>>)mnnX.$[q	, q	,^ 4>>)'*GzQbc% 
  (?!$+tO
(DNN8$ DzU""//Q(/K1<d1g0Fx(-"& VGG}+))'H)E29/
K))*kH)UV >>(+cq	, q	, q	,s   EL8CLL'r-   rh   )NNNFF   NFFFNNFN)r.   r/   r0   r    r@   r1   r   rG   r   rI   r	   rM   r   r   r
   r   r   r   boolintr   r   r   r   r2   r3   s   @r'   r5   r5   !   sx   40 &*"&	 c] 3-	
 
., ,(? ,$ $C $  )-?C;?#(,).<@,0!%'m,* 6:$(-2"6:!9m,HeCHo-.m, h'm, d8n-	m,
 smm, !m, $uS%S/%9:;<m, 4c:o 678m, m, m, m, !m, #'m, m, m,  '/tCy&9!m," $sCx.)#m,$ %m,& #'m,* #4S>2+m,, "-m,. /m,0 '+1m,2 3m,4 $DcN35m,6 7m,8 9m,< 
=m,r(   r5   N)"typesr   typingr   r   r   r   r   r	   r
   r   &snowflake.snowpark._internal.ast.utilsr   r   &snowflake.snowpark._internal.udf_utilsr   r   "snowflake.snowpark._internal.utilsr   snowflake.snowpark.exceptionsr   "snowflake.snowpark.mock._udf_utilsr   snowflake.snowpark.mock._utilr   "snowflake.snowpark.mock.exceptionsr   snowflake.snowpark.typesr   snowflake.snowpark.udfr   r   r   r5    r(   r'   <module>r      sM     I I I O > > Q B L - G	01 	0c,/ c,r(   