
    ɯei                    v   d dl mZ d dlZd dlZd dlmZmZmZmZ d dlm	Z	 d dl
mZ d dlm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 erd dlmZmZmZmZ 	 d dlZ	 d dlZ ej:                  d ej<                        j?                  d      Z  e	e!      Z" G d d      Z#y# e$ r dZY Nw xY w# e$ r dZY Vw xY w)    )annotationsN)datetime	timedeltatimezonetzinfo)	getLogger)	byteorder)TYPE_CHECKING)UTC   )PARAMETER_TIMEZONE)_generate_tzinfo_from_tzoffsetinterval_year_month_to_string)
datetime64float64int64timedelta64r   c                  Z   e Zd ZdZ	 d	 	 	 ddZedd       Zej                  dd       Zd dZ	 	 	 	 	 	 	 	 d!dZ		 	 	 	 	 	 	 	 d!dZ
d"d	Z	 	 	 	 	 	 d"d
Zd"dZ	 	 	 	 	 	 d"dZd#dZd$dZd%dZd&dZ	 	 	 	 	 	 d'dZ	 	 	 	 	 	 d(dZd)dZd*dZd+dZd,dZd-dZd.dZd/dZd0dZd1dZy)2ArrowConverterContexta  Python helper functions for arrow conversions.

    Windows timestamp functions are necessary because Windows cannot handle -ve timestamps.
    Putting the OS check into the non-windows function would probably take up more CPU cycles then
    just deciding this at compile time.
    Nc                H    |i }t         |vrd | _        y |t            | _        y N)r   	_timezone)selfsession_parameterss     c/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/snowflake/connector/arrow_context.py__init__zArrowConverterContext.__init__.   s9     %!# ");;  	 $$67 	    c                    | j                   S r   r   )r   s    r   r   zArrowConverterContext.timezone:   s    ~~r   c                    || _         y r   r!   r   tzs     r   r   zArrowConverterContext.timezone>   s	    r   c                   	 | j                   sdn| j                   }t        j                   |      S # t        j                  j                  $ ru t        j                  d       t        t        j                         cY S 	 t        j                   j                  cY S # t        $ r t        j                   d      cY cY S w xY ww xY w)z>Get the session timezone or use the local computer's timezone.r   zconverting to tzinfo failed)r   pytz
exceptionsUnknownTimeZoneErrorloggerwarningtzlocalget_localzoner   utcAttributeErrorr#   s     r   _get_session_tzz%ArrowConverterContext._get_session_tzB   s    	0"mmB==$$33 	0NN89",,..0#,,000% 0==//0	0s.   .1 AC BCB?:C>B??Cc                f    t        |dz
        }t        j                  ||      t        |      z   S )N  r$   microseconds)r   r   fromtimestampr   )r   epochr4   r$   r   s        r   TIMESTAMP_TZ_to_pythonz,ArrowConverterContext.TIMESTAMP_TZ_to_pythonQ   s6     0T	:%%e7)%;
 
 	
r   c                    t        |dz
        }t        t        ||      z   }t        j                  |k7  r| |j
                  |      z  }|j                  |      S )Nr1   secondsr4   r   )r   
ZERO_EPOCHr   r&   r-   	utcoffsetreplace)r   r6   r4   r$   r   ts         r   TIMESTAMP_TZ_to_python_windowsz4ArrowConverterContext.TIMESTAMP_TZ_to_python_windowsY   sX     0T	:5|LL88v!!!!$$Ayyy''r   c                    t        j                  |t        j                        j	                  d       t        |      z   S )Nr   r3   )r   r5   r   r-   r=   r   r   r6   r4   s      r   TIMESTAMP_NTZ_to_pythonz-ArrowConverterContext.TIMESTAMP_NTZ_to_pythonb   s<    %%eX\\:BB C 
<01 	1r   c                *    t         t        ||      z   S )Nr9   )r;   r   rA   s      r   TIMESTAMP_NTZ_to_python_windowsz5ArrowConverterContext.TIMESTAMP_NTZ_to_python_windowsg   s     Ie,OOOr   c                j    | j                         }t        j                  ||      t        |      z   S )Nr2   r3   )r/   r   r5   r   )r   r6   r4   r   s       r   TIMESTAMP_LTZ_to_pythonz-ArrowConverterContext.TIMESTAMP_LTZ_to_pythonl   s4    %%'%%e7)%;
 
 	
r   c                   	 | j                         }t        t        ||      z   }t        j                  j                  |d      j                  |      S # t        $ r- t        j                  d       t        j                  |      cY S w xY w)Nr9   F)is_dstzfOverflowError in converting from epoch time to timestamp_ltz: %s(ms). Falling back to use struct_time.)r/   r;   r   r&   r-   localize
astimezoneOverflowErrorr)   debugtime	localtime)r   r6   r4   r   tss        r   TIMESTAMP_LTZ_to_python_windowsz5ArrowConverterContext.TIMESTAMP_LTZ_to_python_windowsr   s}    		0))+FiLQQB88$$R$6AA&II 	0LLJ >>,//	0s   AA 3BBc                ,    t        j                  |      S r   )numpyr   )r   	py_doubles     r   REAL_to_numpy_float64z+ArrowConverterContext.REAL_to_numpy_float64   s    }}Y''r   c                ,    t        j                  |      S r   )rR   r   )r   py_longs     r   FIXED_to_numpy_int64z*ArrowConverterContext.FIXED_to_numpy_int64   s    {{7##r   c                r    t        j                  t        j                  |      j	                  |             S r   )rR   r   decimalDecimalscaleb)r   rV   scales      r   FIXED_to_numpy_float64z,ArrowConverterContext.FIXED_to_numpy_float64   s'    }}W__W5<<eVDEEr   c                .    t        j                  |d      S )ND)rR   r   )r   py_dayss     r   DATE_to_numpy_datetime64z.ArrowConverterContext.DATE_to_numpy_datetime64   s    --r   c                    t        t        j                  |      j                  d|z
              }t	        j
                  |d      S N	   nsintrY   rZ   r[   rR   r   )r   valuer\   nanosecondss       r   +TIMESTAMP_NTZ_ONE_FIELD_to_numpy_datetime64zAArrowConverterContext.TIMESTAMP_NTZ_ONE_FIELD_to_numpy_datetime64   s9     '//%077E	BCT22r   c                    t        t        j                  |      j                  d      t        j                  |      z         }t	        j
                  |d      S rc   rf   )r   r6   fractionri   s       r   +TIMESTAMP_NTZ_TWO_FIELD_to_numpy_datetime64zAArrowConverterContext.TIMESTAMP_NTZ_TWO_FIELD_to_numpy_datetime64   sC     '//%077:W__X=VVWT22r   c                    t         j                  |t        d      }|dk(  r|S t        |      D cg c]  }|dk7  s	t        |       }}|dk  }t	        j
                  ||| f      S c c}w )NTr	   signedr   -)rg   
from_bytesr	   strrY   rZ   )r   int128_bytesr\   int128digitdigitssigns          r   DECIMAL128_to_decimalz+ArrowConverterContext.DECIMAL128_to_decimal   sj    	$OA:M*-f+F##e*FFzfuf566 Gs
   
A)A)c                z    t         j                  |dd      }t        j                  |      j	                  |      S )NbigTro   )rg   rr   rY   rZ   r[   r   exponentsignificands      r   DECFLOAT_to_decimalz)ArrowConverterContext.DECFLOAT_to_decimal   s0    nn[E$nO{+228<<r   c                L    t        j                  | j                  ||            S r   )rR   r   r   r|   s      r   DECFLOAT_to_numpy_float64z/ArrowConverterContext.DECFLOAT_to_numpy_float64   s    }}T55hLMMr   c                    t        |      S r   r   r   monthss     r   INTERVAL_YEAR_MONTH_to_strz0ArrowConverterContext.INTERVAL_YEAR_MONTH_to_str   s    ,V44r   c                .    t        j                  |d      S )NMrR   r   r   s     r   &INTERVAL_YEAR_MONTH_to_numpy_timedeltaz<ArrowConverterContext.INTERVAL_YEAR_MONTH_to_numpy_timedelta   s      --r   c                .    t        j                  |d      S )Nre   r   r   nanoss     r   (INTERVAL_DAY_TIME_int_to_numpy_timedeltaz>ArrowConverterContext.INTERVAL_DAY_TIME_int_to_numpy_timedelta   s      --r   c                     t        |dz        S )N  r3   )r   r   s     r   "INTERVAL_DAY_TIME_int_to_timedeltaz8ArrowConverterContext.INTERVAL_DAY_TIME_int_to_timedelta   s     etm44r   c                d    t         j                  |dd      }t        j                  |dz  d      S )NlittleTro   i@B ms)rg   rr   rR   r   r   rh   r   s      r   ,INTERVAL_DAY_TIME_decimal_to_numpy_timedeltazBArrowConverterContext.INTERVAL_DAY_TIME_decimal_to_numpy_timedelta   s2     uF   )!3T::r   c                P    t         j                  |dd      }t        |dz        S )Nr   Tro   r   r3   )rg   rr   r   r   s      r   &INTERVAL_DAY_TIME_decimal_to_timedeltaz<ArrowConverterContext.INTERVAL_DAY_TIME_decimal_to_timedelta   s)     uF etm44r   r   )r   z"dict[str, str | int | bool] | NonereturnNone)r   rs   )r   r   )r   ztzinfo | UTC)r6   rg   r4   rg   r$   rg   r   r   )r6   rg   r4   rg   r   r   )rS   floatr   r   )rV   rg   r   r   )rV   rg   r\   rg   r   r   )r`   rg   r   r   )rh   rg   r\   rg   r   r   )r6   rg   rl   rg   r   r   )rt   bytesr\   rg   r   decimal.Decimal)r}   rg   r~   r   r   r   )r}   rg   r~   r   r   r   )r   rg   r   rs   )r   rg   r   r   )r   rg   r   r   )r   rg   r   r   )rh   r   r   r   )rh   r   r   r   )__name__
__module____qualname____doc__r   propertyr   setterr/   r7   r?   rB   rD   rF   rP   rT   rW   r]   ra   rj   rm   ry   r   r   r   r   r   r   r   r    r   r   r   r   &   se    BF

>

 


   __ 0

(+
14
	
(((+(14(	(1
PP(+P	P

00(+0	0($F.33!$3	333$'3	37=
N5..5
; 	5r   r   )$
__future__r   rY   rM   r   r   r   r   loggingr   sysr	   typingr
   r&   r   	constantsr   	converterr   interval_utilr   rR   r   r   r   r   ImportErrorr+   r5   r-   r=   r;   r   r)   r   r   r   r   <module>r      s    "   : :       ) 5 8==
 $X##Ax||4<<D<I
	8	i5 i5  E  Gs$   B! B. !B+*B+.B87B8