o
    iO'                     @   s   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ZeeZ	 G d	d
 d
eZdS )    N   )to_bytes)RequestError)SelectOperationFailed)SelectOperationClientError)InconsistentError)utilsc                   @   sb   e Zd Zd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d Zdd Zdd ZdS )SelectResponseAdapteri    i  i  i  i  i  
   NFc                 C   s   || _ d| _d| _d| _d| _d| _d| _d| _d| _|| _	d| _
|| _| | _|| _d| _|jdddk| _|jdd| _d| _d| _d| _d S )Nr       zx-oss-select-output-raw truezx-oss-request-id)responseframe_off_setframe_length
frame_datacheck_sum_flagfile_offsetfinished
raw_bufferraw_buffer_offsetcallback!frames_since_last_progress_reportcontent_length__iter__resp_content_iter
enable_crcpayloadheadersgetoutput_raw_data
request_idsplitsrowscolumns)selfr   progress_callbackr   r    r'   H/home/ubuntu/.local/lib/python3.10/site-packages/oss2/select_response.py__init__/   s(   

zSelectResponseAdapter.__init__c                 C   s$   | j rdS d}| D ]}||7 }q	|S )Nr   )r   )r%   contentdatar'   r'   r(   readF   s   
zSelectResponseAdapter.readc                 C   s   | S Nr'   r%   r'   r'   r(   r   P   s   zSelectResponseAdapter.__iter__c                 C   s   |   S r-   )nextr.   r'   r'   r(   __next__S   s   zSelectResponseAdapter.__next__c                 C   s   | j dkrt| j}t|dkr|S t| jdkrV| j| jk r0| j| j| j }d | _| _|S | 	  |  j
d7  _
| j
tjkrQ| jd urQ| | j| j d| _
| jdkst)NTr   r   )r    r/   r   lenStopIterationr   r   r   r   read_next_framer   r	   _FRAMES_FOR_PROGRESS_UPDATEr   r   r   )r%   r+   r'   r'   r(   r/   V   s"   



zSelectResponseAdapter.nextc                 C   s   d}d}|dkry| j dkryt| j}|dkr+t| j| _d| _t| j}|dkr+	 |S || j |krU| j| j| j|  }t|}|  j|7  _||7 }||7 }||8 }n| j| jd  }t|}||7 }||7 }||8 }d| _|dkry| j dks|S )Nr   r   )r   r1   r   r/   r   r   )r%   amtret
read_countsizer+   	data_sizedata_lenr'   r'   r(   read_rawk   s4   


zSelectResponseAdapter.read_rawc                 C   s  t | d}t | d}t| tdt|d }t | d}d|d< t| tdt|d }|tjkrd|tj	krd|tj
krd|tjkrd|tjkrdtd|| j t| jdt| | || _t | jdd }t| tdt|d | _|tjkr|d | _d| _d| _| jdd  | _t | d}t| tdt|d }| jrt }	|	| j |	j}
||
krtd	||
| j td
t| d t|
 | jd S d S |tj	krd | _| _d| _| d d S |tj
krd| _t | jdd }t | jdd }t| tdt|d }|d }d}d}|dkrX| jd|d  }|d}|dkrX||d k rX|d| }||d d  }|d dkret|||d| _| j d urv|  | j| j! | d d| _d| _"d S |tjks|tjkrYd| _t | jdd }t | jdd }t| tdt|d }t | jdd }t| tdt|d | _#t | jdd }t| tdt|d | _$d}|tjkrt | jdd }t| tdt|d | _%nd}|| }d}d}|dkr>| j|||  }|d}|dkr>||d k r>|d| }||d d  }| d || _&d| _d| _"|d dkr[t|||d S d S )N   Ir   zZUnexpected frame type: {0}. RequestId:{1}. This could be due to the old version of client.zUnexpected frame type:   Qr   z@Incorrect checksum: Actual {0} and calculated {1}. RequestId:{2}zIncorrect checksum: Actualz. Calculated:      r      .d             $   )'	bytearrayr;   r   change_endianness_if_neededstructunpackbytesr	   _DATA_FRAME_TYPE_CONTINIOUS_FRAME_TYPE_END_FRAME_TYPE_META_END_FRAME_TYPE_JSON_META_END_FRAME_TYPEloggerwarningformatr!   r   strr   r   r   r   r   r   r   Crc32updatecrcr   findr   r   r   r   r"   r#   r$   final_status)r%   
frame_typepayload_lengthpayload_length_valheader_checksumframe_type_valfile_offset_byteschecksumchecksum_valcrc32checksum_calcscanned_size_bytesstatus_bytesstatuserror_msg_size	error_msg
error_codeerror_code_indexsplits_byteslines_byteserror_indexcolumn_bytes
error_sizer'   r'   r(   r3      s   










 












#z%SelectResponseAdapter.read_next_frame)NNF)__name__
__module____qualname___CHUNK_SIZErN   rM   rO   rP   rQ   r4   r)   r,   r   r0   r/   r;   r3   r'   r'   r'   r(   r	   %   s    

r	   )platformrJ   requestscompatr   
exceptionsr   r   r   r   r   r   logging	getLoggerrq   rR   objectr	   r'   r'   r'   r(   <module>   s    
