o
    RDi                     @  s   d dl m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mZ ddlmZmZ e	r8dd	lmZ eeZG d
d dZdS )    )annotationsN)BytesIO)	getLogger)TYPE_CHECKING   )/_PYTHON_SNOWPARK_USE_SCOPED_TEMP_OBJECTS_STRINGget_temp_type_for_object)BindUploadErrorError)SnowflakeCursorc                   @  s.   e Zd Z	ddd
dZdddZdddZdS )BindUploadAgent   cursorr   rowslist[bytes]stream_buffer_sizeintreturnNonec                 C  s^   |j jr|j jtdnd| _| jrdnd| _|| _|| _|| _d| j dt	
 j | _dS )a  Construct an agent that uploads binding parameters as CSV files to a temporary stage.

        Args:
            cursor: The cursor object.
            rows: Rows of binding parameters in CSV format.
            stream_buffer_size: Size of each file, default to 10MB.
        FSNOWPARK_TEMP_STAGE_BIND
SYSTEMBIND@/N)
connection_session_parametersgetr   _use_scoped_temp_object_STAGE_NAMEr   r   _stream_buffer_sizeuuiduuid4hex
stage_path)selfr   r   r    r$   ^/var/www/Datamplify/venv/lib/python3.10/site-packages/snowflake/connector/bind_upload_agent.py__init__   s   
zBindUploadAgent.__init__c                 C  s*   dt | j d| j d}| j| d S )Nzcreate or replace z stage z8 file_format=(type=csv field_optionally_enclosed_by='"'))r   r   r   r   execute)r#   create_stage_sqlr$   r$   r%   _create_stage4   s   zBindUploadAgent._create_stagec              
   C  s&  z|    W n ty! } zd| jjjd< td t|d }~ww d}|t| j	k rt
 }d}	 || j	|  |t| j	| 7 }|d7 }|t| j	ksR|| jkrSnq1z|d | jj|tj| j| dddid	 W n ty } ztd
 t|d }~ww |  |t| j	k s+d S d S )Nr   $CLIENT_STAGE_ARRAY_BINDING_THRESHOLDz#Failed to create stage for binding.Tr   z.csvsource_compressionauto_detect)input_streamstage_locationoptionsz,Failed to upload the bindings file to stage.)r)   r
   r   r   r   loggerdebugr	   lenr   r   writer   seek_upload_streamospathjoinr"   close)r#   errrow_idxfsizer$   r$   r%   upload;   sH   



zBindUploadAgent.uploadN)r   )r   r   r   r   r   r   r   r   )r   r   )__name__
__module____qualname__r&   r)   r>   r$   r$   r$   r%   r      s
    
r   )
__future__r   r6   r   ior   loggingr   typingr   _utilsr   r   errorsr	   r
   r   r   r?   r0   r   r$   r$   r$   r%   <module>   s   