
    !jhH                    V   d Z ddlmZmZ ddlmZ ddlmZ ddlmZm	Z	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mZ dZdZdZdZdZdZ dZ!dZ"dZ#dZ$ e	dd          Z% G d de&          Z' e	dd          Z( G d d          Z) e	dd          Z* G d  d          Z+ e	d!d"          Z, G d# d"          Z- G d$ d%          Z.d4d(Z/ G d) d*          Z0 e	d+d,          Z1 G d- d,e0          Z2 e	d.d/          Z3 G d0 d/e0          Z4 G d1 d2          Z5d3S )5z1Common request/response configuration of S3 APIs.    )absolute_importannotations)ABCMeta)datetime)TypeTypeVarcast)ElementTree   )MinioException)quote)SseCustomerKey)to_http_header)
SubElementfindfindallfindtextCOPYREPLACEDisabledEnabled
GOVERNANCE
COMPLIANCE      
   2   ATags)boundc                       e Zd ZdZdd fdZd fd	Zedd            Zedd            Zedd            Z	ddZ
 xZS )r   z$dict extended to bucket/object tags.F
for_objectboolc                V    || _         t                                                       d S N)_for_objectsuper__init__)selfr"   	__class__s     \/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/minio/commonconfig.pyr(   zTags.__init__2   s'    %    keystrvaluec                   | j         rt          nt          }t          |           |k    r!| j         rdnd}t	          d| d| d          |rt          |          t
          k    sd|v rt	          d| d          |t          |          t          k    sd|v rt	          d	| d          t                                          ||           d S )
Nobjectbucketzonly  z tags are allowed&zinvalid tag key ''zinvalid tag value ')	r&   _MAX_OBJECT_TAG_COUNT_MAX_TAG_COUNTlen
ValueError_MAX_KEY_LENGTH_MAX_VALUE_LENGTHr'   __setitem__)r)   r-   r/   limittag_typer*   s        r+   r<   zTags.__setitem__6   s    )-)9M%%~t99#'#3AxxHHUHHXHHHIII 	9c#hh00C3JJ7777888=CJJ):::cUll;5;;;<<<C'''''r,   clsType[A]returnr   c                     |             S )zCreate new bucket tags. r?   s    r+   new_bucket_tagszTags.new_bucket_tagsA   s     suur,   c                     | d          S )zCreate new object tags.TrC   rD   s    r+   new_object_tagszTags.new_object_tagsF   s     s4yyr,   element
ET.Elementc           	         t          |d          } |             }|D ]O}t          t          t          |dd                    }t          t          t          |dd                    }|||<   P|S )/Create new object with values from XML element.TagKeyTValue)r   r	   r.   r   )r?   rH   elementsobjtagr-   r/   s          r+   fromxmlzTags.fromxmlK   ss     7E**cee 	 	CsHS%6677ChsGT::;;ECHH
r,   ET.Element | Nonec                    |t          d          |                                 D ]7\  }}t          |d          }t          |d|           t          |d|           8|S Convert to XML.Nelement must be providedrL   rM   rN   )r9   itemsr   )r)   rH   r-   r/   rQ   s        r+   toxmlz
Tags.toxmlV   sl    ?7888**,, 	, 	,JCWe,,CsE3'''sGU++++r,   )F)r"   r#   r-   r.   r/   r.   )r?   r@   rA   r   )r?   r@   rH   rI   rA   r   rH   rS   rA   rI   )__name__
__module____qualname____doc__r(   r<   classmethodrE   rG   rR   rY   __classcell__r*   s   @r+   r   r   /   s        ..      	( 	( 	( 	( 	( 	(    [    [    [       r,   BrL   c                  j    e Zd ZdZddZedd            Zedd            Zedd            Z	ddZ
dS )rL   zTag.r-   r.   r/   c                f    |st          d          |t          d          || _        || _        d S )Nzkey must be providedzvalue must be provided)r9   _key_value)r)   r-   r/   s      r+   r(   zTag.__init__g   s?     	53444=5666	r,   rA   c                    | j         S )zGet key.)rf   r)   s    r+   r-   zTag.keyo        yr,   c                    | j         S )z
Get value.)rg   ri   s    r+   r/   z	Tag.valuet   s     {r,   r?   Type[B]rH   rI   rc   c                    t          t          j        t          |dd                    }t          t          t          |dd                    }t          t          t          |dd                    } | ||          S )rK   rL   TrM   rN   )r	   ETElementr   r.   r   )r?   rH   r-   r/   s       r+   rR   zTag.fromxmly   sg     rz4#=#=>>3%6677S(7GT::;;s3r,   rS   c                    |t          d          t          |d          }t          |d| j                   t          |d| j                   |S rU   )r9   r   rf   rg   r)   rH   s     r+   rY   z	Tag.toxml   sR    ?7888We,,7E49---7GT[111r,   NrZ   rA   r.   )r?   rl   rH   rI   rA   rc   r[   )r\   r]   r^   r_   r(   propertyr-   r/   r`   rR   rY   rC   r,   r+   rL   rL   d   s        J       X    X    [     r,   CAndOperatorc                  l    e Zd ZdZdddZedd	            Zedd
            Zedd            Z	ddZ
dS )ru   zAND operator.Nprefix
str | NonetagsTags | Nonec                H    ||st          d          || _        || _        d S )Nz(at least prefix or tags must be provided)r9   _prefix_tags)r)   rw   ry   s      r+   r(   zAndOperator.__init__   s,    >$>GHHH


r,   rA   c                    | j         S zGet prefix.r|   ri   s    r+   rw   zAndOperator.prefix        |r,   c                    | j         S )z	Get tags.)r}   ri   s    r+   ry   zAndOperator.tags        zr,   r?   Type[C]rH   rI   rt   c                    t          t          j        t          |dd                    }t	          |d          }t          |d          dnt
                              |          } | ||          S )rK   AndTPrefixrL   N)r	   rn   ro   r   r   r   rR   )r?   rH   rw   ry   s       r+   rR   zAndOperator.fromxml   sl     rz4#=#=>>'8,,%((0DDg&& 	 s64   r,   rS   c                    |t          d          t          |d          }| j        t          |d| j                   | j        | j                            |           |S )rV   NrW   r   r   )r9   r   r|   r}   rY   rq   s     r+   rY   zAndOperator.toxml   sd    ?7888We,,<#w$,777:!JW%%%r,   NN)rw   rx   ry   rz   rA   rx   )rA   rz   )r?   r   rH   rI   rA   rt   r[   )r\   r]   r^   r_   r(   rs   rw   ry   r`   rR   rY   rC   r,   r+   ru   ru      s                X    X ! ! ! [!	 	 	 	 	 	r,   DFilterc                      e Zd ZdZ	 	 	 ddd	Zedd            Zedd            Zedd            Ze	dd            Z
ddZdS )r   zLifecycle rule filter.Nand_operatorAndOperator | Nonerw   rx   rQ   
Tag | Nonec                n    |d u|d uz  |d uz  }|st          d          || _        || _        || _        d S )Nz/only one of and, prefix or tag must be provided)r9   _and_operatorr|   _tag)r)   r   rw   rQ   valids        r+   r(   zFilter.__init__   s^     %4!_ 	
  	PNOOO)			r,   rA   c                    | j         S )zGet AND operator.)r   ri   s    r+   r   zFilter.and_operator   s     !!r,   c                    | j         S r   r   ri   s    r+   rw   zFilter.prefix   r   r,   c                    | j         S )zGet tag.)r   ri   s    r+   rQ   z
Filter.tag   rj   r,   r?   Type[D]rH   rI   r   c                >   t          t          j        t          |dd                    }t          |d          dnt                              |          }t          |d          }t          |d          dnt                              |          } | |||          S )rK   r   Tr   Nr   rL   )r	   rn   ro   r   ru   rR   r   rL   )r?   rH   r   rw   rQ   s        r+   rR   zFilter.fromxml   s     rz44#@#@AA%((0DD$$W-- 	 '8,,7E**2ddG8L8Ls<---r,   rS   c                   |t          d          t          |d          }| j        r| j                            |           | j        t          |d| j                   | j        | j                            |           |S )rV   NrW   r   r   )r9   r   r   rY   r|   r   rq   s     r+   rY   zFilter.toxml   s    ?7888Wh// 	.$$W---<#w$,7779 IOOG$$$r,   )NNN)r   r   rw   rx   rQ   r   )rA   r   r   )rA   r   )r?   r   rH   rI   rA   r   r[   )r\   r]   r^   r_   r(   rs   r   rw   rQ   r`   rR   rY   rC   r,   r+   r   r      s           04!%"	    " " " " X"    X    X 	. 	. 	. [	.     r,   c                  t    e Zd ZdZeZ	 	 dddZedd	            Zedd
            Z	e
dd            ZddZdS )BaseRulez.Base rule class for Replication and Lifecycle.Nrule_filterFilter | Nonerule_idrx   c                    |G|                                 }|st          d          t          |          dk    rt          d          || _        || _        d S )Nz rule ID must be non-empty string   z&rule ID must not exceed 255 characters)stripr9   r8   _rule_filter_rule_id)r)   r   r   s      r+   r(   zBaseRule.__init__   sb    
 mmooG E !CDDD7||c!! !IJJJ'r,   rA   c                    | j         S )zGet replication rule filter.)r   ri   s    r+   r   zBaseRule.rule_filter
         r,   c                    | j         S )zGet rule ID.)r   ri   s    r+   r   zBaseRule.rule_id  s     }r,   rH   rI    tuple[Filter | None, str | None]c                z    t          | d          dnt                              |           t          | d          fS )z#Parse XML and return filter and ID.r   NID)r   r   rR   r   )rH   s    r+   parsexmlzBaseRule.parsexml  s>     (++3DD((GT""# 	#r,   rS   c                    |t          d          | j        r| j                            |           | j        t	          |d| j                   |S )rV   NrW   r   )r9   r   rY   r   r   rq   s     r+   rY   zBaseRule.toxml  sY    ?7888 	-##G,,,=$wdm444r,   r   )r   r   r   rx   )rA   r   r   )rH   rI   rA   r   r[   )r\   r]   r^   r_   r   __metaclass__r(   rs   r   r   staticmethodr   rY   rC   r,   r+   r   r      s        88M *."&          ! ! ! X!    X # # # \#     r,   r   statusr.   c                D    | t           t          fvrt          d          dS )zValidate status.z&status must be 'Enabled' or 'Disabled'N)ENABLEDDISABLEDr9   )r   s    r+   check_statusr   '  s)    gx(((ABBB )(r,   c                  B   e Zd ZdZeZ	 	 	 	 	 	 	 	 	 d!d"dZed#d            Zed#d            Z	ed$d            Z
ed$d            Zed%d            Zed&d            Zed&d            Zed$d            Zed$d            Zed$d            Zed$d            Zd'd ZdS )(ObjectConditionalReadArgszBBase argument class holds condition properties for reading object.Nbucket_namer.   object_nameregionrx   
version_idssecSseCustomerKey | Noneoffset
int | Nonelength
match_etagnot_match_etagmodified_sinceunmodified_sincec                <   |$t          |t                    st          d          ||dk     rt          d          ||dk    rt          d          ||dk    rt          d          |	|	dk    rt          d          |
$t          |
t                    st          d          |$t          |t                    st          d	          || _        || _        || _        || _        || _        || _	        || _
        || _        |	| _        |
| _        || _        d S )
Nz ssec must be SseCustomerKey typer   z offset should be zero or greaterz"length should be greater than zero zmatch_etag must not be emptyz not_match_etag must not be emptyz$modified_since must be datetime typez&unmodified_since must be datetime type)
isinstancer   r9   r   _bucket_name_object_name_region_version_id_ssec_offset_length_match_etag_not_match_etag_modified_since_unmodified_since)r)   r   r   r   r   r   r   r   r   r   r   r   s               r+   r(   z"ObjectConditionalReadArgs.__init__1  sM    Jt^$D$D?@@@&1**?@@@&A++ABBB!jB&6&6;<<<%.B*>*>?@@@*~x88 + CDDD ,/:: - EFFF''%
%--!1r,   rA   c                    | j         S )zGet bucket name.)r   ri   s    r+   r   z%ObjectConditionalReadArgs.bucket_name`  r   r,   c                    | j         S zGet object name.r   ri   s    r+   r   z%ObjectConditionalReadArgs.object_namee  r   r,   c                    | j         S )zGet region.)r   ri   s    r+   r   z ObjectConditionalReadArgs.regionj  r   r,   c                    | j         S )zGet version ID.)r   ri   s    r+   r   z$ObjectConditionalReadArgs.version_ido       r,   c                    | j         S )z
Get SSE-C.)r   ri   s    r+   r   zObjectConditionalReadArgs.ssect  r   r,   c                    | j         S )zGet offset.)r   ri   s    r+   r   z ObjectConditionalReadArgs.offsety  r   r,   c                    | j         S zGet length.r   ri   s    r+   r   z ObjectConditionalReadArgs.length~  r   r,   c                    | j         S )zGet match ETag condition.)r   ri   s    r+   r   z$ObjectConditionalReadArgs.match_etag  r   r,   c                    | j         S )zGet not-match ETag condition.)r   ri   s    r+   r   z(ObjectConditionalReadArgs.not_match_etag       ##r,   c                    | j         S )zGet modified since condition.)r   ri   s    r+   r   z(ObjectConditionalReadArgs.modified_since  r   r,   c                    | j         S )zGet unmodified since condition.)r   ri   s    r+   r   z*ObjectConditionalReadArgs.unmodified_since  s     %%r,   dict[str, str]c                   t          d| j        z   dz   | j        z             }| j        r|dt          | j                  z   z  }d|i}| j        r,|                    | j                                                   | j        r
| j        |d<   | j        r
| j        |d<   | j	        rt          | j	                  |d<   | j        rt          | j                  |d<   |S )zGenerate copy source headers./?versionId=zx-amz-copy-sourcex-amz-copy-source-if-matchzx-amz-copy-source-if-none-matchz#x-amz-copy-source-if-modified-sincez%x-amz-copy-source-if-unmodified-since)r   r   r   r   r   updatecopy_headersr   r   r   r   r   )r)   copy_sourceheaderss      r+   gen_copy_headersz*ObjectConditionalReadArgs.gen_copy_headers  s   C$"33c9D<MMNN 	C=51A+B+BBBK&4: 	6NN4:2244555 	E484DG01 	N9=9MG56 	t344 9: ! 	t566 ;< r,   	NNNNNNNNNr   r.   r   r.   r   rx   r   rx   r   r   r   r   r   r   r   rx   r   rx   r   rx   r   rx   rr   r   )rA   r   rA   r   rA   r   )r\   r]   r^   r_   r   r   r(   rs   r   r   r   r   r   r   r   r   r   r   r   r   rC   r,   r+   r   r   -  s       LLM "&%)*.!%!%%))-)-+/-2 -2 -2 -2 -2^ ! ! ! X! ! ! ! X!    X       X     X    X    X       X  $ $ $ X$ $ $ $ X$ & & & X&     r,   r   E
CopySourcec                  *    e Zd ZdZed
d            Zd	S )r   z2A source object definition for copy_object method.r?   Type[E]srcr   rA   r   c                     | |j         |j        |j        |j        |j        |j        |j        |j        |j        |j	        |j
                  S )z&Create CopySource from another source.r   r   r   r   r   r   r   r   r   r   r   r?   r   s     r+   ofzCopySource.of  J     sOS_cj#.Hcj#*cn 2C4H
 
 	
r,   N)r?   r   r   r   rA   r   )r\   r]   r^   r_   r`   r   rC   r,   r+   r   r     s8        <<
 
 
 [
 
 
r,   FComposeSourcec                       e Zd ZdZ	 	 	 	 	 	 	 	 	 d"d# fdZd$dZd%dZed&d            Zed'd            Z	e
d(d!            Z xZS ))r   z5A source object definition for compose_object method.Nr   r.   r   r   rx   r   r   r   r   r   r   r   r   r   r   c                z    t                                          |||||||||	|
|           d | _        d | _        d S r%   )r'   r(   _object_size_headers)r)   r   r   r   r   r   r   r   r   r   r   r   r*   s               r+   r(   zComposeSource.__init__  sO     	fj$8H	
 	
 	
 )-/3r,   object_sizeintc                      fd} j          j         k    r |d j                    j        G j        k    r |d j                   j         pd}| j        z   k    r |d| j        z             dS dS )z,Validate object size with offset and length.c                ~    j         r
dj         z   nd}t          dj         dj         | d|  d| d           S )Nr   r   zSource r   z: r3   z is beyond object size )r   r9   r   r   )namer/   verr   r)   s      r+   
make_errorz0ComposeSource._validate_size.<locals>.make_error  s    6:6FN=!111BCF$+ F Fd.? F F FF FF F8CF F  r,   Nr   r   r   zcompose size)r   r   )r)   r   r  r   s   ``  r+   _validate_sizezComposeSource._validate_size  s    	 	 	 	 	 	 <#(C(C*Xt|444<#|k)) j4<888\&QFdl"[00 j1DEEE $# 10r,   etagc                    |                      |           || _        |                                 }| j        p||d<   || _        dS )zBuild headers.r   N)r  r   r   r   r   )r)   r   r  r   s       r+   build_headerszComposeSource.build_headers  sM    K((('''))040@0HD,-r,   rA   c                <    | j         t          d          | j         S )zGet object size.N>build_headers() must be called prior to this method invocation)r   r   ri   s    r+   r   zComposeSource.object_size  s/     $ )     r,   r   c                `    | j         t          d          | j                                         S )zGet headers.Nr  )r   r   copyri   s    r+   r   zComposeSource.headers  s9     =  )   }!!###r,   r?   Type[F]r   r   r   c                     | |j         |j        |j        |j        |j        |j        |j        |j        |j        |j	        |j
                  S )z)Create ComposeSource from another source.r   r   s     r+   r   zComposeSource.of  r   r,   r   r   )r   r  )r   r  r  r.   r   r   )r?   r  r   r   rA   r   )r\   r]   r^   r_   r(   r  r
  rs   r   r   r`   r   ra   rb   s   @r+   r   r     s        ?? "&%)*.!%!%%))-)-+/4 4 4 4 4 4 4*F F F F$        ! ! ! X! $ $ $ X$ 
 
 
 [
 
 
 
 
r,   c                      e Zd ZdZ	 	 	 	 dddZedd            Zedd            Zedd            Zedd            Z	edd            Z
dS )SnowballObjectz>A source object definition for upload_snowball_objects method.Nr   r.   filenamerx   databytes | Noner   r   mod_timedatetime | Nonec                    || _         |d u|d uz  r|| _        || _        || _        nt	          d          |$t          |t                    st	          d          || _        d S )Nz-only one of filename or data must be providedzmod_time must be datetime type)r   	_filename_datar   r9   r   r   	_mod_time)r)   r   r  r  r   r  s         r+   r(   zSnowballObject.__init__  sy     (D T%56 	N%DNDJ!DLLLMMM
8X(F(F=>>>!r,   rA   c                    | j         S r   r   ri   s    r+   r   zSnowballObject.object_name'  r   r,   c                    | j         S )zGet filename.)r  ri   s    r+   r  zSnowballObject.filename,       ~r,   c                    | j         S )z	Get data.)r  ri   s    r+   r  zSnowballObject.data1  r   r,   c                    | j         S r   r   ri   s    r+   r   zSnowballObject.length6  r   r,   c                    | j         S )zGet modification time.)r  ri   s    r+   r  zSnowballObject.mod_time;  r  r,   )NNNN)
r   r.   r  rx   r  r  r   r   r  r  rr   r   )rA   r  r   )rA   r  )r\   r]   r^   r_   r(   rs   r   r  r  r   r  rC   r,   r+   r  r    s        HH
 $(!%!%(," " " " "& ! ! ! X!    X    X    X    X  r,   r  N)r   r.   )6r_   
__future__r   r   abcr   r   typingr   r   r	   	xml.etreer
   rn   errorr   helpersr   sser   timer   xmlr   r   r   r   r   r   r   r   r   r   r:   r;   r6   r7   r   dictr   rc   rL   rt   ru   r   r   r   r   r   r   r   r   r   r  rC   r,   r+   <module>r,     sF  " 8 7 4 3 3 3 3 3 3 3             & & & & & & & & & & ' ' ' ' ' ' ! ! ! ! ! !                         4 4 4 4 4 4 4 4 4 4 4 4



  GCv/ / / / /4 / / /d GCu$ $ $ $ $ $ $ $N GC}%%%' ' ' ' ' ' ' 'T GCx   : : : : : : : :z, , , , , , , ,^C C C C       D GC|$$$	
 	
 	
 	
 	
* 	
 	
 	
 GC'''M
 M
 M
 M
 M
- M
 M
 M
`- - - - - - - - - -r,   