
    ɯei
                        d dl mZ d dlmZmZmZmZmZ d dlmZ d dl	m
Z
 d dlZddlmZmZmZ  e
e      Z G d d	e      Zy)
    )annotations)datetimetime	timedeltatimezonetzinfo)partial)	getLoggerN   )
ZERO_EPOCHSnowflakeConverter_generate_tzinfo_from_tzoffsetc                  `     e Zd ZdZd fdZd Zd Zd Zd Ze		 d		 	 	 	 	 	 	 d
d       Z
 xZS )SnowflakeConverterIssue23517zsConverter for Python 3.5.0 or Any Python on Windows.

    This is to address http://bugs.python.org/issue23517
    c                N    t        |   di | t        j                  d       y )Ninitialized )super__init__loggerdebug)selfkwargs	__class__s     j/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/snowflake/connector/converter_issue23517.pyr   z%SnowflakeConverterIssue23517.__init__   s    "6"]#    c                    |d   dfd}|S )Nscalec                    | j                         \  }}t        t        |      dz
        }t        j	                  ||      S )Ni  )valuer   tz)splitr   intr   create_timestamp_from_string)encoded_valuer    r!   r   r   s       r   convzBSnowflakeConverterIssue23517._TIMESTAMP_TZ_to_python.<locals>.conv   sG    %++-IE23CGdNCF/LL5V M  r   )r%   strreturnr   r   )r   ctxr&   r   s      @r   _TIMESTAMP_TZ_to_pythonz4SnowflakeConverterIssue23517._TIMESTAMP_TZ_to_python   s    G	 r   c                B    | j                         |d   dfd}|S )Nr   c                    t         j                  |       }t        j                  j	                  |d      j                        S )Nr    r   F)is_dst)r   r$   pytzutclocalize
astimezone)r    tsr   r   s     r   r&   zCSnowflakeConverterIssue23517._TIMESTAMP_LTZ_to_python.<locals>.conv)   sE    -JJ5 K B 88$$R$6AA&IIr   )r    r'   r(   r   )_get_session_tz)r   r)   r&   r   r   s      @@r   _TIMESTAMP_LTZ_to_pythonz5SnowflakeConverterIssue23517._TIMESTAMP_LTZ_to_python%   s'    %%'G	J r   c                B    |d   }t        t        j                  |      S )Nr   )r   )r	   r   r$   )r   r)   r   s      r   _TIMESTAMP_NTZ_to_pythonz5SnowflakeConverterIssue23517._TIMESTAMP_NTZ_to_python1   s#    G(EEU
 	
r   c                4    |d   dd}dfd}dkD  r|S |S )zrConverts TIME to formatted string, SnowflakeDateTime, or datetime.time.

        No timezone is attached.
        r   c                V    t         t        t        |             z   j                         S )Nseconds)r   r   floatr   )r    s    r   conv0z;SnowflakeConverterIssue23517._TIME_to_python.<locals>.conv0>   s    E%L!BBHHJJr   c                j    t        | d dz          }t        t        |      z   j                         S )Nr      r:   )r<   r   r   r   )r    microsecondsr   s     r   r&   z:SnowflakeConverterIssue23517._TIME_to_python.<locals>.convA   s3     qE6A:!67LL!BBHHJJr   r?   )r    r'   r(   r   r   )r   r)   r=   r&   r   s       @r   _TIME_to_pythonz,SnowflakeConverterIssue23517._TIME_to_python7   s-    
 G	K	K qyt+e+r   c                   t        j                  | |      \  }}|sBt        j                  dt        j
                        j                  d      t        ||      z   S t        j                  d|      t        ||      z   S )zSWindows does not support negative timestamps, so we need to do that part in Python.r-   r   N)r   )r;   r@   )r!   )r   get_seconds_microsecondsr   fromtimestampr   r0   replacer   )r    r   r!   r;   fractions        r   r$   z9SnowflakeConverterIssue23517.create_timestamp_from_stringG   s     /GGu
 ))!X\\:BB C 'AB B %%aB/)(3
 
 	
r   )r(   None)N)r    r'   r   r#   r!   ztzinfo | Noner(   r   )__name__
__module____qualname____doc__r   r*   r5   r7   rA   staticmethodr$   __classcell__)r   s   @r   r   r      s^    
$


,   !


 
 
	
 
r   r   )
__future__r   r   r   r   r   r   	functoolsr	   loggingr
   r/   	converterr   r   r   rH   r   r   r   r   r   <module>rR      s6    " @ @    U U	8	H
#5 H
r   