
    !ja8                        d 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 d
ZdZdZdZdZd
ZdZdZdZdZ G d d          Z G d de          Z G d de          Z G d de          Z G d d          Z  G d d          Z! G d d           Z"d! Z#d" Z$d# Z%d$ Z& G d% d&          Z' G d' d(          Z(d)S )*z,Request/response of SelectObjectContent API.    )absolute_import)ABCMetacrc32)BytesIO)ElementTree   )MinioException)Element
SubElementfindtextNONEGZIPBZIP2USEIGNOREDOCUMENTLINESALWAYSASNEEDEDc                   "    e Zd ZdZeZd Zd ZdS )InputSerializationzInput serialization.c                     |=|t           t          t          fvr't          dt            dt           dt                     || _        d S )Nzcompression type must be ,  or )COMPRESSION_TYPE_NONECOMPRESSION_TYPE_GZIPCOMPRESSION_TYPE_BZIP2
ValueError_compression_type)selfcompression_types     V/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/minio/select.py__init__zInputSerialization.__init__1   sz     , ))*)   G,A G G(G G.DG G   "2    c                 @    | j         t          |d| j                    |S )Convert to XML.NCompressionType)r    r   r!   elements     r#   toxmlzInputSerialization.toxml@   s&    !-w 143IJJJr%   N)__name__
__module____qualname____doc__r   __metaclass__r$   r+    r%   r#   r   r   ,   s=        M2 2 2    r%   r   c                   8     e Zd ZdZ	 	 	 	 	 d fd	Z fdZ xZS )CSVInputSerializationzCSV input serialization.Nc	                 *   t                                          |           || _        || _        || _        |=|t
          t          t          fvr't          dt
           dt           dt                     || _	        || _
        || _        || _        d S )Nzfile header info must be r   r   )superr$   _allow_quoted_record_delimiter	_comments_field_delimiterFILE_HEADER_INFO_USEFILE_HEADER_INFO_IGNOREFILE_HEADER_INFO_NONEr   _file_header_info_quote_character_quote_escape_character_record_delimiter)
r!   r"   allow_quoted_record_delimitercommentsfield_delimiterfile_header_infoquote_characterquote_escape_characterrecord_delimiter	__class__s
            r#   r$   zCSVInputSerialization.__init__J   s    
 	)***.K+! / , (+))   H,@ H H*H H0EH H   "2 /'=$!1r%   c                    t                                          |           t          |d          }| j        t          |d| j                   | j        t          |d| j                   | j        t          |d| j                   | j        t          |d| j                   | j        t          |d| j                   | j        t          |d| j                   | j	        t          |d	| j	                   dS dS )
r'   CSVNAllowQuotedRecordDelimiterCommentsFieldDelimiterFileHeaderInfoQuoteCharacterQuoteEscapeCharacterRecordDelimiter)
r5   r+   r   r6   r7   r8   r<   r=   r>   r?   r!   r*   rG   s     r#   r+   zCSVInputSerialization.toxmld   s    gWe,,.:,3  
 >%w
DN;;; ,w 0$2GHHH!-w 0$2HIII ,w 0$2GHHH'3&,  
 !-w 143IJJJJJ .-r%   )NNNNNNNNr,   r-   r.   r/   r$   r+   __classcell__rG   s   @r#   r3   r3   G   st        ""(,>B8<>B"&	2 2 2 2 2 24K K K K K K K K Kr%   r3   c                   .     e Zd ZdZd fd	Z fdZ xZS )JSONInputSerializationzJSON input serialization.Nc                     t                                          |           |/|t          t          fvrt	          dt           dt                     || _        d S )Nzjson type must be r   )r5   r$   JSON_TYPE_DOCUMENTJSON_TYPE_LINESr   
_json_type)r!   r"   	json_typerG   s      r#   r$   zJSONInputSerialization.__init__   sf    )***%"4o!FFFN%7NN_NN   $r%   c                     t                                          |           t          |d          }| j        t          |d| j                   dS dS )r'   JSONNType)r5   r+   r   rZ   rQ   s     r#   r+   zJSONInputSerialization.toxml   sR    gWf--?&w88888 '&r%   )NNrR   rT   s   @r#   rV   rV      s\        ##	$ 	$ 	$ 	$ 	$ 	$9 9 9 9 9 9 9 9 9r%   rV   c                   ,     e Zd ZdZ fdZ fdZ xZS )ParquetInputSerializationzParquet input serialization.c                 J    t                                          d            d S N)r5   r$   )r!   rG   s    r#   r$   z"ParquetInputSerialization.__init__   s!    r%   c                 f    t                                          |           t          |d          S )r'   Parquet)r5   r+   r   rQ   s     r#   r+   zParquetInputSerialization.toxml   s)    g'9---r%   rR   rT   s   @r#   r`   r`      sW        &&    . . . . . . . . .r%   r`   c                   &    e Zd ZdZ	 	 	 ddZd ZdS )CSVOutputSerializationzCSV output serialization.Nc                     || _         || _        || _        |/|t          t          fvrt          dt           dt                     || _        || _        d S )Nzquote fields must be r   )r8   r=   r>   QUOTE_FIELDS_ALWAYSQUOTE_FIELDS_ASNEEDEDr   _quote_fieldsr?   )r!   rB   rD   rE   quote_fieldsrF   s         r#   r$   zCSVOutputSerialization.__init__   s     !0 /'=$(')>%   +(; + +(+ +   *!1r%   c                 L   t          |d          }| j        t          |d| j                   | j        t          |d| j                   | j        t          |d| j                   | j        t          |d| j                   | j        t          |d| j                   dS dS )r'   rI   NrL   rN   rO   QuoteFieldsrP   )r   r8   r=   r>   rj   r?   r)   s     r#   r+   zCSVOutputSerialization.toxml   s    We,, ,w 0$2GHHH ,w 0$2GHHH'3&,  
 )wt/ABBB!-w 143IJJJJJ .-r%   )NNNNNr,   r-   r.   r/   r$   r+   r1   r%   r#   rf   rf      sK        ##=A;?"&2 2 2 2&K K K K Kr%   rf   c                        e Zd ZdZddZd ZdS )JSONOutputSerializationzJSON output serialization.Nc                     || _         d S rb   )r?   )r!   rF   s     r#   r$   z JSONOutputSerialization.__init__   s    !1r%   c                 d    t          |d          }| j        t          |d| j                   dS dS )r'   r]   NrP   )r   r?   r)   s     r#   r+   zJSONOutputSerialization.toxml   s>    Wf--!-w 143IJJJJJ .-r%   rb   rn   r1   r%   r#   rp   rp      sB        $$2 2 2 2K K K K Kr%   rp   c                   $    e Zd ZdZ	 	 ddZd ZdS )SelectRequestzSelect object content request.FNc                    || _         t          |t          t          t          f          st          d          || _        t          |t          t          f          st          d          || _	        || _
        || _        || _        d S )Nzkinput serialization must be CSVInputSerialization, JSONInputSerialization or ParquetInputSerialization typezSoutput serialization must be CSVOutputSerialization or JSONOutputSerialization type)_expression
isinstancer3   rV   r`   r   _input_serializationrf   rp   _output_serialization_request_progress_scan_start_range_scan_end_range)r!   
expressioninput_serializationoutput_serializationrequest_progressscan_start_rangescan_end_ranges          r#   r$   zSelectRequest.__init__   s     &#)*-
 
 	 K   %8!$')@A
 
 	 /   &:"!1!1-r%   c                    t          d          }t          |d| j                   t          |dd           | j                            t          |d                     | j                            t          |d                     | j        rt          t          |d          dd	           | j        s| j        rJt          |d
          }| j        rt          |d| j                   | j        rt          |d| j                   |S )r'   SelectObjectContentRequest
ExpressionExpressionTypeSQLr   OutputSerializationRequestProgressEnabledtrue	ScanRangeStartEnd)	r   r   rv   rx   r+   ry   rz   r{   r|   )r!   r*   tags      r#   r+   zSelectRequest.toxml   s)   6777L$*:;;;7,e444!''w 455	
 	
 	
 	"((w 566	
 	
 	
 ! 	7$566	6   ! 	=T%9 	=Wk22C% A3)?@@@# =3t';<<<r%   )FNNrn   r1   r%   r#   rt   rt      sE        (( ;? $. . . .<    r%   rt   c                 t    |                      |          }t          |          |k    rt          d          |S )z8Wrapper to RawIOBase.read() to error out on short reads.zinsufficient data)readlenIOError)readersizedatas      r#   _readr     s8    ;;tD
4yyD)***Kr%   c                 :    t                               | d          S )z$Convert byte data to big-endian int.big)	byteorder)int
from_bytesr   s    r#   _intr     s    >>$%>000r%   c                 &    t          |           dz  S )zWrapper to binascii.crc32().l    r   r   s    r#   _crc32r     s    ;;##r%   c           	         t          |           }i }	 |                    d          }|snt          |t          |                    }t          t          |d                    dk    rt	          d          t          |t          t          |d                              }|                                ||                                <   |S )zDecode header data.Tr	      zheader value type is not 7   )r   r   r   r   r   decode)r   r   headerslengthnamevalues         r#   _decode_headerr   #  s    T]]FG0Q 	VT&\\**fa  !!Q&&6777fd5#3#34455!&0 Nr%   c                   Z    e Zd ZdZd Zed             Zed             Zed             ZdS )StatszProgress/Stats information.c                     t          j        |                                          }t          |d          | _        t          |d          | _        t          |d          | _        d S )NBytesScannedBytesProcessedBytesReturned)ET
fromstringr   r   _bytes_scanned_bytes_processed_bytes_returned)r!   r   r*   s      r#   r$   zStats.__init__6  sV    -..&w?? (2B C C'AAr%   c                     | j         S )zGet bytes scanned.)r   r!   s    r#   bytes_scannedzStats.bytes_scanned<  s     ""r%   c                     | j         S )zGet bytes processed.)r   r   s    r#   bytes_processedzStats.bytes_processedA  s     $$r%   c                     | j         S )zGet bytes returned.)r   r   s    r#   bytes_returnedzStats.bytes_returnedF  s     ##r%   N)	r,   r-   r.   r/   r$   propertyr   r   r   r1   r%   r#   r   r   3  s}        %%B B B # # X# % % X% $ $ X$ $ $r%   r   c                   J    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 ZddZdS )SelectObjectReaderzm
    BufferedIOBase compatible reader represents response data of
    Minio.select_object_content() API.
    c                 0    || _         d | _        d | _        d S rb   )	_response_stats_payload)r!   responses     r#   r$   zSelectObjectReader.__init__R  s    !r%   c                     | S rb   r1   r   s    r#   	__enter__zSelectObjectReader.__enter__W  s    r%   c                 *    |                                  S rb   )close)r!   exc_type	exc_valueexc_tracebacks       r#   __exit__zSelectObjectReader.__exit__Z  s    zz||r%   c                     dS )zReturn this is readable.Tr1   r   s    r#   readablezSelectObjectReader.readable]  s    tr%   c                     dS )zReturn this is not writeable.Fr1   r   s    r#   	writeablezSelectObjectReader.writeablea  s    ur%   c                 j    | j                                          | j                                          dS )z-Close response and release network resources.N)r   r   release_connr   s    r#   r   zSelectObjectReader.closee  s0    ##%%%%%r%   c                     | j         S )zGet stats information.)r   r   s    r#   statszSelectObjectReader.statsj  s
    {r%   c                 H   | j                                         rdS t          | j         d          }t          | j         d          }t          |          t	          |          k    r/t          dt          |           dt	          |                     t	          |dd                   }t          | j         |dz
  dz
  dz
            }t	          t          | j         d                    }t          ||z   |z             |k    r(t          dt          ||z   |z              d|           t	          |dd                   }t          |d|                   }|                    d          d	k    r:t          |                    d
           d|                    d                     |                    d          dk    rdS ||z
  dz
  }|                    d          dk    s|dk     r|                                 S ||||z            }	|                    d          dv r(t          |	          | _
        |                                 S |                    d          dk    r|	| _        t          |	          S t          d|                    d                     )zRead and decode response.r         z prelude CRC mismatch; expected: z, got: Nz message CRC mismatch; expected: z:message-typeerrorz:error-codez: z:error-messagez:event-typer      Contr	   )Progressr   Recordszunknown event-type )r   isclosedr   r   r   r   r   getr
   r   r   r   r   )
r!   preludeprelude_crctotal_lengthr   message_crcheader_lengthr   payload_lengthpayloads
             r#   r   zSelectObjectReader._readn  s   >""$$ 	1**DNA..'??d;////,6'?? , ,[)), ,  
 GBQBK((T^\A%5%9A%=>>53344'K'$.//;>>&#Gk$9D$@AA& &#& &   WQRR[)) n}n!566;;''722 ;;}-- 3 3;;/003 3  
 ;;}%%..1%5:;;}%%//>A3E3E::<<}]>%AAB;;}%%)>>>..DK::<<;;}%%22#DMw<<>'++m"<"<>>
 
 	
r%      c              #   0  K   |                                  dk    r{| j        rZ| j        }|t          | j                  k     r| j        d|         }| j        t          |          d         | _        |V  | j        Z|                                  dk    ydS dS )z
        Stream extracted payload from response data. Upon completion, caller
        should call self.close() to release network resources.
        r   N)r   r   r   )r!   	num_bytesresults      r#   streamzSelectObjectReader.stream  s      
 jjllQ- s4=1111!]:I:6F $c&kkll ; -  jjllQr%   N)r   )r,   r-   r.   r/   r$   r   r   r   r   r   r   r   r   r1   r%   r#   r   r   L  s         
  
        & & &
  3
 3
 3
j     r%   r   N))r/   
__future__r   abcr   binasciir   ior   	xml.etreer   r   r   r
   xmlr   r   r   r   r   r   r9   r:   r;   rX   rY   rh   ri   r   r3   rV   r`   rf   rp   rt   r   r   r   r   r   r   r1   r%   r#   <module>r      s  " 3 2 & & & & & &                   ' ' ' ' ' ' ! ! ! ! ! ! . . . . . . . . . .     "    "        66K 6K 6K 6K 6K. 6K 6K 6Kr9 9 9 9 9/ 9 9 9,	. 	. 	. 	. 	. 2 	. 	. 	.&K &K &K &K &K &K &K &KR
K 
K 
K 
K 
K 
K 
K 
K6 6 6 6 6 6 6 6r  1 1 1
$ $ $
   $ $ $ $ $ $ $ $2b b b b b b b b b br%   