o
    oĎi                     @   st   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 de
ZdS )    N)Path)TemporaryDirectory)AnyOptionalTYPE_CHECKING   )	CloudPathNoStatErrorregister_path_class   )S3Clients3c                   @   s   e Zd ZU dZdZeed< ded< edefddZdde	e
 fddZddede	e
 fddZdddZedefddZedefddZedd Zd
S )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                 C   s   | j S N)bucketself r   R/home/jeff/fluffinator/venv/lib/python3.10/site-packages/cloudpathlib/s3/s3path.pydrive   s   zS3Path.driveFNmodec                 C   s   d S r   r   )r   parentsexist_okr   r   r   r   mkdir#   s   zS3Path.mkdirTr   c                 C   sb   |   r|std|  | j| |  d S t }t|jd }|  | j||  |	  d S )NzFile exists: empty)
existsFileExistsErrorr   
_move_filer   r   nametouch_upload_filecleanup)r   r   r   tfpr   r   r   r"   '   s   zS3Path.touchc                 C   sl   z| j | }W n | j j jjy   td|  dw td d | jd d d |ddd |dd	 d f
S )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metar   r   r   stat5   s(   

zS3Path.statc                 C   s   | j ddd S )N/r   r   )
_no_prefixsplitr   r   r   r   r   L      zS3Path.bucketc                 C   s    | j }|dr|dd  }|S )Nr3   r   )_no_prefix_no_drive
startswith)r   keyr   r   r   r9   P   s   
z
S3Path.keyc                 C   s   | j | dS )Netag)r   r)   r.   r   r   r   r   r:   [   r6   zS3Path.etag)FFN)TN)T)__name__
__module____qualname____doc__r   str__annotations__propertyr   r   r   r   boolr"   r2   r   r9   r:   r   r   r   r   r      s   
 

r   )r,   pathlibr   tempfiler   typingr   r   r   	cloudpathr   r	   r
   s3clientr   r   r   r   r   r   <module>   s    