
    }ge~                         d dl Z d dlZd dlmZmZ d dlmZ  ej        d          Zed             Z	 G d d          Z
 G d d	e          Zd
 Z G d de          Z G d de          Zd ZdS )    N)contextmanagerAsyncExitStack)ClientErrors3fsc               '   ,   K   	 d V  d S # | $ r Y d S w xY wN )
exceptionss    *lib/python3.11/site-packages/s3fs/utils.pyignoringr   
   s:         s   
 c                   4    e Zd Zd ZddZd Zd Zd Zd ZdS )	S3BucketRegionCachec                 r    || _         t                      | _        d | _        || _        i | _        i | _        d S r   )_sessionr   _stack_client_client_kwargs_buckets_regions)selfsessionclient_kwargss      r   __init__zS3BucketRegionCache.__init__   s7    $&&+    Nc                   K   || j         v r| j         |         S |                                  d {V }||S 	 |                    |           d {V }|d         d         d         }no# t          $ rb}|j        d                             di                               d          }|s"t                              d|           |cY d }~S Y d }~nd }~ww xY w|| j        vr\t                              d||           | j	        
                     | j        j        	 d	d|i| j                   d {V | j        |<   | j        |         x}| j         |<   |S )
N)BucketResponseMetadataHTTPHeaderszx-amz-bucket-regionzDRC: HEAD_BUCKET call for %r has failed, returning the general clientz:RC: Creating a new regional client for %r on the region %rs3region_namer   )r   
get_clienthead_bucketr   responsegetloggerdebugr   r   enter_async_contextr   create_clientr   )r   bucket_namegeneral_clientr$   regioneclients          r   get_bucket_clientz%S3BucketRegionCache.get_bucket_client   s     $-''=--#00000000!!	X+77{7KKKKKKKKH 01-@AVWFF  	& 	& 	&
-.]B''*++ 
  &Z   &%%%%%%& & & & &	& &&LLL  
 +/+*I*I++ &,040C + + % % % % % %DM&! /3mF.CC{+s   A) )
C3ACCCc                    K   | j         s:| j                             | j        j        di | j                   d {V | _         | j         S )Nr   r!   )r   r   r(   r   r)   r   r   s    r   r"   zS3BucketRegionCache.get_clientF   sl      | 	!%!@!@++HHD4GHH" "      DL |r   c                    K   t                               d           | j                                         | j                                         d | _        | j                                         d {V  d S )NzRC: discarding all clients)r&   r'   r   clearr   r   r   acloser1   s    r   r3   zS3BucketRegionCache.clearM   st      1222k  """""""""""r   c                 
   K   | S r   r	   r1   s    r   
__aenter__zS3BucketRegionCache.__aenter__T   s      r   c                 >   K   |                                   d {V  d S r   )r3   )r   exc_argss     r   	__aexit__zS3BucketRegionCache.__aexit__W   s,      jjllr   r   )	__name__
__module____qualname__r   r/   r"   r3   r6   r9   r	   r   r   r   r      st          & & & &P  # # #      r   r   c                   ,     e Zd ZdZdedef fdZ xZS )FileExpireda  
    Is raised, when the file content has been changed from a different process after
    opening the file. Reading the file would lead to invalid or inconsistent output.
    This can also be triggered by outdated file-information inside the directory cache.
    In this case ``S3FileSystem.invalidate_cache`` can be used to force an update of
    the file-information when opening the file.
    filenamee_tagc                 n    t                                          t          j        d|d|d           d S )Nz*The remote file corresponding to filename z
 and Etag z no longer exists.)superr   errnoEBUSY)r   r?   r@   	__class__s      r   r   zFileExpired.__init__d   sB    KKxx 	
 	
 	
 	
 	
r   )r:   r;   r<   __doc__strr   __classcell__)rE   s   @r   r>   r>   [   sU         
 
S 
 
 
 
 
 
 
 
 
 
r   r>   c                 f    d                     d |                     d          D                       S )zl
    TitleCases a given string.

    Parameters
    ----------
    string : underscore separated string
     c              3   >   K   | ]}|                                 V  d S r   )
capitalize).0xs     r   	<genexpr>ztitle_case.<locals>.<genexpr>t   s*      ==a1<<>>======r   _)joinsplit)strings    r   
title_caserT   l   s1     77==6<<+<+<======r   c                   (    e Zd ZdZi Zd Zd Zd ZdS )ParamKwargsHelperz
    Utility class to help extract the subset of keys that an s3 method is
    actually using

    Parameters
    ----------
    s3 : boto S3FileSystem
    c                     || _         d S r   r!   )r   r   s     r   r   zParamKwargsHelper.__init__   s    r   c                 
   || j         vrn| j        j        j                            |          }|j        +t          |j        j                                                  nt                      }|| j         |<   | j         |         S r   )	_kwarg_cacher   metaservice_modeloperation_modelinput_shapesetmemberskeys)r   
model_namemodel
valid_keyss       r   _get_valid_keysz!ParamKwargsHelper._get_valid_keys   s    T...GL.>>zJJE $0 E%-2244555UU 
 -7Dj) ,,r   c                     t          |          }|                     |          t          |t                    r|                                }fd|                                D             S )Nc                 $    i | ]\  }}|v 	||S r	   r	   )rM   kvrc   s      r   
<dictcomp>z1ParamKwargsHelper.filter_dict.<locals>.<dictcomp>   s$    >>>Aa:oo1ooor   )rT   rd   
isinstance	SSEParams	to_kwargsitems)r   method_namedra   rc   s       @r   filter_dictzParamKwargsHelper.filter_dict   sd    ,,
))*55
a## 	A>>>>>>>>r   N)r:   r;   r<   rF   rY   r   rd   rp   r	   r   r   rV   rV   w   sR          L  	- 	- 	-? ? ? ? ?r   rV   c                   $    e Zd Z	 	 	 	 ddZd ZdS )rk   Nc                 >    || _         || _        || _        || _        d S r   )ServerSideEncryptionSSECustomerAlgorithmSSECustomerKeySSEKMSKeyId)r   server_side_encryptionsse_customer_algorithmsse_customer_keysse_kms_key_ids        r   r   zSSEParams.__init__   s*     %;!$:!.)r   c                 H    d | j                                         D             S )Nc                     i | ]
\  }}|||S r   r	   )rM   rg   rh   s      r   ri   z'SSEParams.to_kwargs.<locals>.<dictcomp>   s    HHHA!-1---r   )__dict__rm   r1   s    r   rl   zSSEParams.to_kwargs   s$    HH!4!4!6!6HHHHr   )NNNN)r:   r;   r<   r   rl   r	   r   r   rk   rk      sJ          $#
* 
* 
* 
*I I I I Ir   rk   c              #   l   K   t          d| |          D ]}|t          ||z   dz
  | dz
            fV   dS )z
    Chunk up a file into zero-based byte ranges

    Parameters
    ----------
    size : file size
    block : block size
    r      N)rangemin)sizeblockoffsets      r   _get_branger      sX       4'' 8 8c&5.1,dQh77777778 8r   )rC   logging
contextlibr   r   botocore.exceptionsr   	getLoggerr&   r   r   IOErrorr>   rT   objectrV   rk   r   r	   r   r   <module>r      sP     5 5 5 5 5 5 5 5 + + + + + + 
	6	"	"   F F F F F F F FR
 
 
 
 
' 
 
 
"> > >? ? ? ? ? ? ? ?DI I I I I I I I"
8 
8 
8 
8 
8r   