
    ɯei[%                       d dl mZ d dlZd dlZ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 d dlmZ d dlmZ d dlmZ d d	lmZmZmZ  ej0                  e      Z G d
 de
      ZdZej:                  ej<                  z   ZdZ dZ!dZ"dZ#dZ$dZ%d"d#dZ&d$dZ'd%dZ(d&dZ)d Z* G d de      Z+d'dZ,dZ-dZ.d(dZ/ G d d      Z0 e0       Z1d)d Z2d)d!Z3y)*    )annotationsN)Enum)stack)Path)choice)Timer)UUID)ISAOPERATING_SYSTEM
OS_VERSIONc                  <    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZy)TempObjectTypeTABLEVIEWSTAGEFUNCTIONFILE_FORMAT	QUERY_TAGCOLUMN	PROCEDURETABLE_FUNCTIONDYNAMIC_TABLEAGGREGATE_FUNCTIONCTEN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r        \/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/snowflake/connector/_utils.pyr   r      s?    EDEHKIFI%N#M-
Cr   r   SNOWPARK_TEMP_TEMPzSCOPED TEMPORARY'PYTHON_SNOWPARK_USE_SCOPED_TEMP_OBJECTS	requestIdi   @*snowflake_server_dop_cap_for_file_transferc                D    dj                  d t        |       D              S )N c              3  :   K   | ]  }t        t                y wN)r   ALPHANUMERIC).0_s     r    	<genexpr>z/generate_random_alphanumeric.<locals>.<genexpr>:   s     ?A6,'?s   )joinrange)lengths    r    generate_random_alphanumericr1   9   s    77?v???r   c                \    t          | j                   dt               j                          S )Nr,   )TEMP_OBJECT_NAME_PREFIXvaluer1   upper)object_types    r    random_name_for_temp_objectr7   =   s-    %&{'8'8&9;W;Y;_;_;a:bccr   c                    | rt         S t        S r)   )SCOPED_TEMPORARY_STRINGTEMPORARY_STRING)use_scoped_temp_objectss    r    get_temp_type_for_objectr<   A   s    &="SCSSr   c                    t        | t              r| j                  dk(  S t        | t              sy	 t        t        | d            }|| k(  S # t        $ r Y yw xY w)z;Check whether provided string str is a valid UUID version4.   F)version)
isinstancer	   r?   str
ValueError)str_or_uuiduuid_strs     r    is_uuid4rE   E   sa    +t$""a''k3'tK34 {""  s   A 	AAc                2    t        | dt         t              S )zZReturns the server side cap on max parallelism for file transfer for the given connection.r,   )getattr/_VARIABLE_NAME_SERVER_DOP_CAP_FOR_FILE_TRANSFER/_DEFAULT_VALUE_SERVER_DOP_CAP_FOR_FILE_TRANSFER)
connections    r    ,_snowflake_max_parallelism_for_file_transferrK   T   s!    
;<=7 r   c                  *     e Zd Zd fd	Z fdZ xZS )_TrackedQueryCancellationTimerc                8    t         |   ||||       d| _        y )NF)super__init__executed)selfintervalfunctionargskwargs	__class__s        r    rP   z'_TrackedQueryCancellationTimer.__init__^   s    8T6:r   c                0    t         |           d| _        y )NT)rO   runrQ   )rR   rW   s    r    rY   z"_TrackedQueryCancellationTimer.runb   s    r   )NN)r   r   r   rP   rY   __classcell__)rW   s   @r    rM   rM   ]   s     r   rM   c                 T    	 t               d   } | j                  S # t        $ r Y yw xY w)z;Get the path of the application script using the connector.unknown)r   filename	Exception)outermost_frames    r    get_application_pathra   g   s0    '"+''' s    	''SF_SPCS_TOKEN_PATHz/snowflake/session/spcs_tokenc                 j   t        j                  t              xs t        } 	 t         j                  j                  |       syt        | d      5 }|j                         j                         }ddd       sy|S # 1 sw Y   xY w# t        $ r!}t        j                  d| |       Y d}~yd}~ww xY w)aD  Return the SPCS token read from the configured path, or None.

    The path is determined by the SF_SPCS_TOKEN_PATH environment variable,
    falling back to ``/snowflake/session/spcs_token`` when unset.

    Any I/O errors or missing/empty files are treated as "no token" and
    will not cause authentication to fail.
    Nutf-8)encodingz%Failed to read SPCS token from %s: %s)osgetenv_SPCS_TOKEN_ENV_VAR_NAME_SPCS_TOKEN_DEFAULT_PATHpathisfileopenreadstripr_   loggerdebug)rj   ftokenexcs       r    get_spcs_tokenrt   t   s     99-.J2JD
ww~~d#$) 	%QFFHNN$E	%		% 	%
  <dCHs;   B B A</
B :B <BB 	B2B--B2c                      e Zd Zd Zedd       Zedd       Zedd       Zedd       Zedd       Z	edd       Z
edd       Zedd	       Zdd
ZddZd ZddZddZddZy)_CoreLoaderc                .    d | _         d | _        d | _        y r)   )_version_error_pathrR   s    r    rP   z_CoreLoader.__init__   s    &*(,!%
r   c                 x    t        j                         j                         } | dk(  ry| dk(  ry| dk(  ry| dk(  ryy)zDetect the operating system.linuxdarwinmacoswindowsaixr]   )platformsystemlower)r   s    r    
_detect_osz_CoreLoader._detect_os   sG     "((*Wxy u_r   c                 r    t        j                         j                         } | dv ry| dv ry| dv ry| dk(  ryy)	zDetect the CPU architecture.)x86_64amd64r   )aarch64arm64r   )i686i386x86r   ppc64r]   )r   machiner   )r   s    r    _detect_archz_CoreLoader._detect_arch   sM     ""$**,)),,//r   c                     t        d      j                         ry	 ddl} | j                  ddgdd      }d|j                  j                         v sd|j                  j                         v ry	 y	# t        $ r Y y	w xY w)
z*Detect libc type on Linux (glibc vs musl).z/etc/alpine-releasemuslr   Nlddz	--versionT)capture_outputtextglibc)r   exists
subprocessrY   stdoutr   stderrr_   )r   results     r    _detect_libcz_CoreLoader._detect_libc   s     %&--/	^^$# $ F
 ,,..&FMM<O<O<Q2Q 3R 	  	 		s   AA1 1	A=<A=c                     t         j                         } t         j                         }| dk(  rt         j                         }d| d| S | dk(  rd| S | dk(  rd| S | dk(  rd	| S t	        d
|  d| d      )z,Get the platform-specific subdirectory name.r}   linux_r,   r   macos_r   windows_r   aix_zMini core binary for  z
 not found)rv   r   r   r   OSError)os_namearchlibcs      r    _get_platform_subdirz _CoreLoader._get_platform_subdir   s     ((*'')g++-DD64&))D6?"	!dV$$$= -gYavZHIIr   c                 P    t         j                         } | dk(  ry| dk(  ry| dk(  ryy)z2Get the library filename for the current platform.r   zsf_mini_core.dllr   zlibsf_mini_core.dylibr   zlibsf_mini_core.azlibsf_mini_core.so)rv   r   )r   s    r    _get_lib_namez_CoreLoader._get_lib_name   s8     ((*i%*& (r   c                     t         j                         } t         j                         }t        j                  j                  d      }|j                  | |      S )z>Get the path to the minicore library for the current platform.zsnowflake.connector.minicore)rv   r   r   	importlib	resourcesfilesjoinpath)subdirlib_namer   s      r    _get_core_pathz_CoreLoader._get_core_path   sH     113,,.##))*HI~~fh//r   c                d    g | j                   _        t        j                  | j                   _        y r)   )sf_core_full_versionargtypesctypesc_char_prestype)cores    r    _register_functionsz_CoreLoader._register_functions   s"    -/!!*,2OO!!)r   c                    t         j                  j                  |       5 }t        j                  t        |            }d d d        |S # 1 sw Y   S xY wr)   )r   r   as_filer   CDLLrA   )rj   lib_pathr   s      r    _load_minicorez_CoreLoader._load_minicore   sF       ((. 	.(;;s8}-D	.	.s   A		Ac                d    t        t        j                  dd             j                         }|dv S )NSNOWFLAKE_DISABLE_MINICORE)1true)rA   rf   rg   r   )rR   r4   s     r    _is_core_disabledz_CoreLoader._is_core_disabled   s,    BII:DABHHJ%%r   c                    	 | j                         }| j                  |      }| j                  |       |j                         | _        d | _        t        |      | _        y # t        $ r}|| _        Y d }~y d }~ww xY wr)   )	r   r   r   r   rx   ry   rA   rz   r_   )rR   rj   r   errs       r    _loadz_CoreLoader._load  sn    	&&(D&&t,D$$T* 557DMDKTDJ 	DKK	s   AA! !	A;*A66A;c                    | j                         rd| _        yd| _        t        j                  | j                  d      }|j                          y)zDSpawn a separate thread to load the minicore library (non-blocking).zmini-core-disabledNzstill-loadingT)targetdaemon)r   ry   	threadingThreadr   start)rR   threads     r    loadz_CoreLoader.load  s>    !!#.DK%!!DAr   c                ,    t        | j                        S r)   )rA   ry   r{   s    r    get_load_errorz_CoreLoader.get_load_error  s    4;;r   c                r    | j                   r	 | j                   j                  d      S y # t        $ r Y y w xY w)Nrd   )rx   decoder_   r{   s    r    get_core_versionz_CoreLoader.get_core_version  s?    ==}}++G44   s   * 	66c                    | j                   S r)   )rz   r{   s    r    get_file_namez_CoreLoader.get_file_name#  s    zzr   NreturnrA   )r   r   )r   ctypes.CDLL)rj   rA   r   r   )r   bool)r   Noner   z
str | None)r   r   r   rP   staticmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    rv   rv      s    &
      . J J" ( ( 0 0 < <  &	 r   rv   c                 ^    t         t        j                         t        j                         dS )N)r
   CORE_VERSIONCORE_FILE_NAME)r
   _core_loaderr   r   r   r   r     build_minicore_usage_for_sessionr   *  s'    $557&446 r   c                 V    t         t        t        j                         dt	               S )N)OSr   CORE_LOAD_ERROR)r   r   r   r   r   r   r   r    "build_minicore_usage_for_telemetryr   2  s+     '668 +
,	 r   )
   )r0   intr   rA   )r6   r   r   rA   )r;   r   r   rA   )rC   z
str | UUIDr   r   r   r   )r   zdict[str, str | None])4
__future__r   r   r   loggingrf   r   stringr   enumr   inspectr   pathlibr   randomr   r   uuidr	   snowflake.connector.descriptionr
   r   r   	getLoggerr   ro   r   r3   digitsascii_lowercaser*   r:   r9   /_PYTHON_SNOWPARK_USE_SCOPED_TEMP_OBJECTS_STRINGREQUEST_ID_STATEMENT_PARAM_NAMErI   rH   r1   r7   r<   rE   rK   rM   ra   rh   ri   rt   rv   r   r   r   r   r   r    <module>r      s    "    	          M M			8	$T  + }}v555 , - 0 #. 
 3: / 1 0
@dT#U  0 : .Y Yx }r   