
    i                         d dl 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
mZmZ erddlmZ  ed	       G d
 de
             Zy)    N)Path)TemporaryDirectory)AnyOptionalTYPE_CHECKING   )	CloudPathNoStatErrorregister_path_class   )S3Clients3c                       e Zd ZU dZdZeed<   ded<   edefd       Zdd	e	e
   fd
Zdded	e	e
   fdZddZedefd       Zedefd       Zed        Zy)S3Patha9  Class for representing and operating on AWS S3 URIs, in the style of the Python standard
    library's [`pathlib` module](https://docs.python.org/3/library/pathlib.html). Instances
    represent a path in S3 with filesystem path semantics, and convenient methods allow for basic
    operations like joining, reading, writing, iterating over contents, etc. This class almost
    entirely mimics the [`pathlib.Path`](https://docs.python.org/3/library/pathlib.html#pathlib.Path)
    interface, so most familiar properties and methods should be available and behave in the
    expected way.

    The [`S3Client`](../s3client/) class handles authentication with AWS. If a client instance is
    not explicitly specified on `S3Path` instantiation, a default client is used. See `S3Client`'s
    documentation for more details.
    zs3://cloud_prefixr   clientreturnc                     | j                   S N)bucketselfs    g/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/cloudpathlib/s3/s3path.pydrivezS3Path.drive   s    {{    Nmodec                      y r    )r   parentsexist_okr   s       r   mkdirzS3Path.mkdir#   s    r   r    c                 :   | j                         r-|st        d|        | j                  j                  | |        y t	               }t        |j                        dz  }|j                          | j                  j                  ||        |j                          y )NzFile exists: empty)
existsFileExistsErrorr   
_move_filer   r   nametouch_upload_filecleanup)r   r    r   tfps        r   r(   zS3Path.touch'   st    ;;=%dV&<==KK""4.#%BRWW'AGGIKK$$Q-JJLr   c                 h   	 | j                   j                  |       }t        j                  d d | j                  d d d |j                  dd      d |j                  dd      j                         d f
      S # | j                   j                   j                  j                  $ r t	        d|  d      w xY w)NzNo stats available for z%; it may be a directory or not exist.sizer   last_modified)
r   _get_metadata
exceptions	NoSuchKeyr
   osstat_resultr   get	timestamp)r   follow_symlinksmetas      r   statzS3Path.stat5   s    	;;,,T2D ~~!!#!,668
 	
 {{!!,,66 	)$/TU 	s   A4 4=B1c                 @    | j                   j                  dd      d   S )N/r   r   )
_no_prefixsplitr   s    r   r   zS3Path.bucketL   s    $$S!,Q//r   c                 J    | j                   }|j                  d      r|dd  }|S )Nr;   r   )_no_prefix_no_drive
startswith)r   keys     r   rA   z
S3Path.keyP   s+    && >>#ab'C
r   c                 V    | j                   j                  |       j                  d      S )Netag)r   r0   r5   r   s    r   rC   zS3Path.etag[   s"    {{((.226::r   )FFN)TN)T)__name__
__module____qualname____doc__r   str__annotations__propertyr   r   r   r!   boolr(   r9   r   rA   rC   r   r   r   r   r      s      L#s  # d # 
. 0 0 0 S   ; ;r   r   )r3   pathlibr   tempfiler   typingr   r   r   	cloudpathr	   r
   r   s3clientr   r   r   r   r   <module>rQ      sE    	  ' / / C C " TO;Y O; O;r   