
    ]j                         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 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 dlmZmZ dZdZ G d de      Z G d de	      Z e G d de             Z!y)    )BytesIO)copyfileobj)SpooledTemporaryFile)ImproperlyConfigured)File)Storage)	safe_join)deconstructible)Dropbox)ApiError)
CommitInfoFolderMetadataUploadSessionCursor	WriteMode)get_available_overwrite_namesettingd   addc                       e Zd Zy)DropBoxStorageExceptionN)__name__
__module____qualname__     C/root/env/lib/python3.12/site-packages/storages/backends/dropbox.pyr   r       s    r   r   c                   0    e Zd Zd Zd Zd Z eee      Zy)DropBoxFilec                 .    || _         || _        d | _        y N)name_storage_file)selfr!   storages      r   __init__zDropBoxFile.__init__%   s    	
r   c                    | j                   t               | _         | j                  j                  j	                  | j
                        \  }}|j                  dk(  r5t        |j                        5 }t        || j                          d d d        n/t        dj                  |j                  | j
                              | j                   j                  d       | j                   S # 1 sw Y   0xY w)N   z7Dropbox server returned a {} response when accessing {}r   )r#   r   r"   clientfiles_downloadr!   status_coder   contentr   r   formatseek)r$   file_metadataresponsefile_contents       r   	_get_filezDropBoxFile._get_file*   s    ::-/DJ $$33DII> $M8##s*X--. :,djj9: : .MVH00$))<  JJOOAzz: :s   2C((C1c                     || _         y r    )r#   )r$   values     r   	_set_filezDropBoxFile._set_file=   s	    
r   N)r   r   r   r&   r2   r5   propertyfiler   r   r   r   r   $   s    
& Iy)Dr   r   c                        e Zd ZdZ edd      Z ed      Z ede      Z ede	      Z
dZeeee
fdZd	 Zd
 Zd Zd Zd Zd Zd Zd ZddZd Zd Zd fd	Z xZS )DropBoxStoragez:DropBox Storage class for Django pluggable storage system.DROPBOX_ROOT_PATH/DROPBOX_OAUTH2_TOKENDROPBOX_TIMEOUTDROPBOX_WRITE_MODEi  @ c                 |    |t        d      |dvrt        d      || _        || _        t        ||      | _        y )NzCYou must configure an auth token at'settings.DROPBOX_OAUTH2_TOKEN'.)r   	overwriteupdatezHDROPBOX_WRITE_MODE must be set to either: 'add', 'overwrite' or 'update')timeout)r   	root_path
write_moder   r)   )r$   oauth2_access_tokenrC   rB   rD   s        r   r&   zDropBoxStorage.__init__M   sO    && (J K K<<&'qrr"$17Cr   c                 \    |dk(  rd}t        | j                  |      j                  dd      S )Nr;    \)r	   rC   replacer$   r!   s     r   
_full_pathzDropBoxStorage._full_pathX   s,    3;D.66tSAAr   c                 X    | j                   j                  | j                  |             y r    )r)   files_deleterK   rJ   s     r   deletezDropBoxStorage.delete]   s      !67r   c                     	 t        | j                  j                  | j                  |                  S # t        $ r Y yw xY w)NF)boolr)   files_get_metadatarK   r   rJ   s     r   existszDropBoxStorage.exists`   s<    	66tt7LMNN 		s   25 	A Ac                 (   g g }}| j                  |      }|dk(  rd}| j                  j                  |      }|j                  D ]I  }t	        |t
              r|j                  |j                         /|j                  |j                         K ||fS )Nr;   rG   )rK   r)   files_list_folderentries
isinstancer   appendr!   )r$   pathdirectoriesfiles	full_pathmetadataentrys          r   listdirzDropBoxStorage.listdirf   s    UOOD)	I;;00;%% 	)E%0""5::.UZZ(		)
 E!!r   c                 n    | j                   j                  | j                  |            }|j                  S r    )r)   rQ   rK   sizer$   r!   r\   s      r   r`   zDropBoxStorage.sizeu   s)    ;;11$//$2GH}}r   c                 n    | j                   j                  | j                  |            }|j                  S r    )r)   rQ   rK   server_modifiedra   s      r   modified_timezDropBoxStorage.modified_timey   +    ;;11$//$2GH'''r   c                 n    | j                   j                  | j                  |            }|j                  S r    )r)   rQ   rK   client_modifiedra   s      r   accessed_timezDropBoxStorage.accessed_time}   re   r   c                 n    | j                   j                  | j                  |            }|j                  S r    )r)   files_get_temporary_linkrK   link)r$   r!   medias      r   urlzDropBoxStorage.url   s)    44T__T5JKzzr   c                 <    t        | j                  |      |       }|S r    )r   rK   )r$   r!   moderemote_files       r   _openzDropBoxStorage._open   s    !$//$"7>r   c                 X   |j                          |j                  | j                  k  rO| j                  j	                  |j                         | j                  |      t        | j                               n!| j                  || j                  |             |j                          |S )N)ro   )openr`   
CHUNK_SIZEr)   files_uploadreadrK   r   rD   _chunked_uploadclose)r$   r!   r,   s      r   _savezDropBoxStorage._save   sw    <<4??*KK$$W\\^T__T5JQZ[_[j[jQk$l  $//$*?@r   c                    | j                   j                  |j                  | j                              }t	        |j
                  |j                               }t        |t        | j                              }|j                         |j                  k  r|j                  |j                         z
  | j                  k  r7| j                   j                  |j                  | j                        ||       nJ| j                   j                  |j                  | j                        |       |j                         |_        |j                         |j                  k  ry y )N)
session_idoffset)rX   ro   )r)   files_upload_session_startrv   rt   r   r{   tellr   r   rD   r`   files_upload_session_finishfiles_upload_session_append_v2r|   )r$   r,   	dest_pathupload_sessioncursorcommits         r   rw   zDropBoxStorage._chunked_upload   s    ??LL)
 %%00<<>
 4??1KLllnw||+w||~-$//A77LL166 ::LL16 !( llnw||+r   c                 |    | j                  |      }| j                  dk(  rt        ||      S t        |   ||      S )z+Overwrite existing file with the same name.r@   )rK   rD   r   superget_available_name)r$   r!   
max_length	__class__s      r   r   z!DropBoxStorage.get_available_name   s<    t$??k)/jAAw)$
;;r   )rbr    )r   r   r   __doc__r   locationrE   _DEFAULT_TIMEOUTrB   _DEFAULT_MODErD   rt   r&   rK   rN   rR   r^   r`   rd   rh   rm   rq   ry   rw   r   __classcell__)r   s   @r   r9   r9   C   s    D*C0H!"89')9:G-}=J J+>(\c&	DB
8"((/*< <r   r9   N)"ior   shutilr   tempfiler   django.core.exceptionsr   django.core.files.baser   django.core.files.storager   django.utils._osr	   django.utils.deconstructr
   dropboxr   dropbox.exceptionsr   dropbox.filesr   r   r   r   storages.utilsr   r   r   r   	Exceptionr   r   r9   r   r   r   <module>r      sv      ) 7 ' - & 4  '  A 	i 	*$ *> h<W h< h<r   