
    Ng%              
          d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZmZmZmZmZ e
rd dlmZ d dlmZ d dlmZmZ dZd	d
ddZdZdZ ej        e          ZdddefdZe G d d                      Z e G d d                      Z!dddee"ef         de fdZ#ddde"dddee"ef         de!f
dZ$ded         defd Z%dS )!    N)	dataclass)StringIO)TYPE_CHECKINGAnyDictListLiteralOptional)WorkspaceClient)FunctionInfo)StatementParameterListItemStatementState__execution_args__30sd   i   )wait_timeout	row_limit
byte_limit UC_TOOL_CLIENT_EXECUTION_TIMEOUT120functionr   returnc                 .    ddl m} | j        |j        k    S )Nr   ColumnTypeName)databricks.sdk.service.catalogr   	data_type
TABLE_TYPE)r   r   s     k/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/tools/databricks/_execution.py	is_scalarr       s%    ======!:::    c                   0    e Zd ZU eed<   ed         ed<   dS )ParameterizedStatement	statementr   
parametersN)__name__
__module____qualname__str__annotations__r    r!   r   r#   r#       s-         NNN1222222r!   r#   c                       e Zd ZU dZdZee         ed<   dZee	d                  ed<   dZ
ee         ed<   dZee         ed<   defd	ZdS )
FunctionExecutionResultzy
    Result of executing a function.
    We always use a string to present the result value for AI model to consume.
    Nerror)SCALARCSVformatvalue	truncatedr   c                 p    d | j                                         D             }t          j        |          S )Nc                     i | ]
\  }}|||S Nr+   ).0kvs      r   
<dictcomp>z3FunctionExecutionResult.to_json.<locals>.<dictcomp>3   s    JJJ!QAM1MMMr!   )__dict__itemsjsondumps)selfdatas     r   to_jsonzFunctionExecutionResult.to_json2   s3    JJ4=#6#6#8#8JJJz$r!   )r&   r'   r(   __doc__r.   r
   r)   r*   r1   r	   r2   r3   boolrA   r+   r!   r   r-   r-   &   s          
  E8C=15FHW_-.555E8C= $Ix~$$$             r!   r-   json_paramsc                 v   ddl m} ddlm} g }g }t	          |           r|                    d| j         d           n|                    d| j         d           | j        | j        j        |r
J d            ng }d}| j        j        D ]H}|j	        |vr"|j
        d	}t          d
|j	         d          d}	|r|	|j	         dz  }	||j	                 }
|j        |j        |j        |j        fv rPt!          j        |
          }|	d|j	         d|j         dz  }	|                     ||j	        |                     n||j        |j        k    r4|	d|j	         dz  }	|                     ||j	        |
                     n8|	d|j	         z  }	|                     ||j	        |
|j                             |                    |	           J|                    d                    |                     |                    d           d                    |          }t+          ||          S )Nr   r   )r   zSELECT (zSELECT * FROM z8Function has no parameters but parameters were provided.FTz
Parameter z is required but not provided. z => zfrom_json(:z, 'z'))namer2   z
unbase64(:):)rH   r2   type,)r$   r%   )r   r   databricks.sdk.service.sqlr   r    append	full_nameinput_paramsr%   rH   parameter_default
ValueError	type_nameARRAYMAPSTRUCTr=   r>   	type_textBINARYjoinr#   )r   rD   r   r   partsoutput_paramsargsuse_named_argsp
arg_clause
json_valuejson_value_strr$   s                r   get_execute_function_sql_stmtrb   7   s    >=====EEEEEEEM =4x14445555;h&8;;;<<<$(=(H(P	F 	FE	F 	F 	F 	F &1 &	( &	(Av[((&2%)NN$KQVKKK    
! 2QV///1J(0
;"("&")#   &*Z
%;%;N"J"J"J1;"J"J"JJJ!((22nUUU    [N$999"8qv"8"8"88J!((22jQQQ    ,af,,.J!((22!"z    
 J''''SXXd^^$$$	LLI!I-PPPPr!   wsr   warehouse_idr%   c           	         	 ddl }n"# t          $ r}t          d          |d}~ww xY wddlm} |j        rO|j        j        rCt          d |j        j        D                       r t          dt           dt           d          i t          }t          j        | j        j                  j        }t          d	 |                                D                       st                      }	|                    t          i           }
|
                                D ]$\  }}||v r|||<   |	                    |           %|	r(t          d
|	 d|                                 d          t)          ||          } | j        j        d"|j        ||j        d|}|j        rDt/          |j        j                  r*|j        r"|j        }d}d}t5          t6          j                            t<          t>                              }||k     rtA          d|z  ||z
            }tB          "                    d| d| d           tG          j$        |           | j        %                    |          }|j        t/          |j        j                  sn||z  }|dz  }||k     |j        r=t/          |j        j                  r$tM          d| dt<           dt>           d          S |j        J d|             |j        j        |j'        k    r:|j        j(        }|J d|             tM          |j)         d|j*                   S |j+        }|J |j,        }|j-        }|
J d            |j.        }t_          |          r]d}|rGta          |          dk    r4ta          |d                   dk    rtc          |d         d                   }tM          d||          S |j2        }||j3        
J d            d |j3        D             }|g }|j4        5                    ||          }tm                      }|7                    |d            tM          d!|8                                |          S )#zL
    Execute a function with the given arguments and return the result.
    r   NzTCould not import pandas python package. Please install it with `pip install pandas`.r   c              3   6   K   | ]}|j         t          k    V  d S r6   )rH   EXECUTE_FUNCTION_ARG_NAMEr7   r^   s     r   	<genexpr>z#execute_function.<locals>.<genexpr>   s>       
 
 F//
 
 
 
 
 
r!   zRParameter name conflicts with the reserved argument name for executing functions: z. Please rename the parameter .c              3   @   K   | ]}|j         |j        |j        fv V  d S r6   )kindVAR_POSITIONALVAR_KEYWORDri   s     r   rj   z#execute_function.<locals>.<genexpr>   sG         	
1#Q]33     r!   z,Invalid parameters for executing functions: z. Allowed parameters are: )r$   rd   r%      z	Retrying z. time to get statement execution status after z	 seconds.   z+Statement execution is still pending after z[ seconds. Please increase the wait_timeout argument for executing the function or increase z? environment variable for increasing retrying time, default is )r.   zStatement execution failed: z>Statement execution failed but no error message was provided: z: z9Statement execution succeeded but no result was provided.r/   )r1   r2   r3   z9Statement execution succeeded but no schema was provided.c                     g | ]	}|j         
S r+   )rH   )r7   cs     r   
<listcomp>z$execute_function.<locals>.<listcomp>   s    222a16222r!   )columnsF)indexr0   r+   )9pandasImportErrorrM   r   rP   r%   anyrR   rh   DEFAULT_EXECUTE_FUNCTION_ARGSinspect	signaturestatement_executionexecute_statementvaluessetpopr<   addkeysrb   r$   statusjob_pendingstatestatement_idintosenvirongetr   (DEFAULT_UC_TOOL_CLIENT_EXECUTION_TIMEOUTmin_loggerdebugtimesleepget_statementr-   	SUCCEEDEDr.   
error_codemessagemanifestr3   result
data_arrayr    lenr)   schemaru   	DataFramefrom_recordsr   to_csvgetvalue)rc   rd   r   r%   pder   execute_statement_argsallowed_execute_statement_argsinvalid_paramspassed_execute_statement_argsr8   r9   parametrized_statementresponser   	wait_time	retry_cntclient_execution_timeoutwaitr.   r   r3   r   r   r2   r   ru   pdf
csv_buffers                                 r   execute_functionr   y   s      ;
 
 	
 :99999 	
!,
  
 
*5
 
 
 
 

 H3H H+DH H H
 
 	
 ? =>%,%6
0& & #   /6688      (27PRT(U(U%17799 	& 	&DAq222,-&q))""1%%%% 	T~ T T+I+N+N+P+PT T T   ;8ZPP7r%7 (2!)4  !	 H  ;x'<== (BW ,		#&JNN08 $
 $
  222q)|%=	%IJJDMM0I 0 0 $0 0 0   Jt-;;LIIH&k(/:O.P.P&INI 222 ? 	{8?+@AA 	*GI G G,LG G <	G G G    ?&&(Qx(Q(Q&&& 888%VHVV &0@-S-SEM-S-STTTT H"I_FB 	"J 
 	*#j//A--#jm2D2Dq2H2H
1a())E&5I
 
 
 	
 6>#=#=F $>#=#=226>222Jl''
G'DDZZ


:U
+++&
 3 3 5 5
 
 
 	
s    
&!&r   r   c                 .    ddl m} | |j        |j        fv S )Nr   rf   )rM   r   PENDINGRUNNING)r   r   s     r   r   r      s*    999999^+^-CDDDr!   )&r{   r=   loggingr   r   dataclassesr   ior   typingr   r   r   r   r	   r
   databricks.sdkr   r   r   rM   r   r   rh   rz   r   r   	getLoggerr&   r   rC   r    r#   r-   r)   rb   r   r   r+   r!   r   <module>r      s\      				  ! ! ! ! ! !       D D D D D D D D D D D D D D D D V......;;;;;;UUUUUUUU0 ! ! 
 $F  +0 (
'
H
%
%; ;4 ; ; ; ; 3 3 3 3 3 3 3 3
                 ?Q?Q+/S>?Q?Q ?Q ?Q ?QD


 
 S#X	

 
 
 
 
DEx 01 Ed E E E E E Er!   