HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/duplicity/backends/__pycache__/boxbackend.cpython-310.pyc
o

��`��@srddlmZddlZddlZddlmZmZddlm	Z	ddl
mZe��Gdd�dej
j�Zej
�de�dS)	�)�print_functionN)�Client�JWTAuth)�BackendException)�standard_libraryc@s~eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	ddd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS) �
BoxBackendcCsttjj�||�|�|�|_|jddkr|jdd�n|j|_i|_|�	|j�|_
|j
dur8|�|j�|_
dSdS)Nr�/�)�	duplicity�backend�Backend�__init__�get_box_client�_client�path�_folder�_file_to_metadata_map�get_id_from_path�
_folder_id�makedirs)�self�
parsed_url�r�?/usr/lib/python3/dist-packages/duplicity/backends/boxbackend.pyr
"s��
�zBoxBackend.__init__c
Cs�ztj�|jdd�}tt�|��WStyL}z-tj�	d�}|durDztt�|��WWYd}~StyC}zt
d��d}~wwt
d��d}~ww)N�configr�BOX_CONFIG_PATHzbox config file is not found.z.box config file is not specified or not found.)�osr�
expanduser�
query_argsrr�from_settings_file�	Exception�environ�getr)rr�config_path�errrr1s&������zBoxBackend.get_box_clientcCsDz	|�|���Wn	tyYnw|j|����|��d�dS)zwUploads file to the specified remote folder
        (tries to delete it first to make sure the new one can be uploaded))�
local_file�remote_fileN)�delete�decoder �upload�
get_canonical)r�source_path�remote_filenamerrr�_putCs�

�zBoxBackend._putcCs|j|��|j��d�dS)z-Downloads file from the specified remote path)r&r%N)�downloadr(�name)rr,�
local_pathrrr�_getPs
�zBoxBackend._getcCs|��S)z(Lists files in the specified remote path)�folder_contents�rrrr�_listXszBoxBackend._listcCs|j|��d�dS)z+Deletes file from the specified remote path)r&N)r'r()r�filenamerrr�_delete]szBoxBackend._deletecs�fdd�|D�S)z!Query metadata for a list of filecs$i|]}|�j�|��ddi��qS)�size���)rr"r()�.0r5r3rr�
<dictcomp>ds���z*BoxBackend._query_list.<locals>.<dictcomp>r)r�
filename_listrr3r�_query_listbs
�zBoxBackend._query_list�0cCs�dd�|�d�D�}|d}|dd�}	d}|jj|d���D]}|j|kr,|j}nq |dur3dSt|�dkr;|S|}|d}|dd�}q)	z'Get the folder or file id from its pathcS� g|]}|��dkr|���qS����strip�r9�xrrr�
<listcomp>m�z/BoxBackend.get_id_from_path.<locals>.<listcomp>rrr	NT��	folder_id)�splitr�folder�	get_itemsr/�id�len)r�remote_path�	parent_id�
path_items�head�tail�selected_item_id�itemrrrrks(�
��zBoxBackend.get_id_from_pathcCsV|j�|�}|dur|dS|j||jd�}|j�|���}|j|jd�|j|j<|S)z Get the fild id by its file nameNrL)rO�rLr7)	rr"rrr�filerLr7r/)rr,rV�file_idrrr�get_file_id_from_filename�s��z$BoxBackend.get_file_id_from_filenamecCs�dd�|�d�D�}d}d}t|�dkrCd}|jj|d���D]}|j|dkr-|j}nq|dur5|}n|}|dd�}t|�dks|durZ|}|D]}|j�|��|�}|j}qK|S)	z'Create folder(s) in a path if necessarycSr>r?rArCrrrrE�rFz'BoxBackend.makedirs.<locals>.<listcomp>rr=NrrGr	)rIrMrrJrKr/rL�create_subfolder)rrNrPrO�start_folder_idrSrT�	subfolderrrrr�s4����zBoxBackend.makedirscCsJdd�|jj|jd�jgd�d�D�}|j�dd�|D��dd�|D�S)	z Lists files of a remote box pathcSsg|]	}|jdkr|�qS)rV)�typerCrrrrE�s

�z.BoxBackend.folder_contents.<locals>.<listcomp>rG)rLr/r7)�fieldscSsi|]}|j|j|jd��qS)rU)r/rLr7rCrrrr:�sz.BoxBackend.folder_contents.<locals>.<dictcomp>cSsg|]}|j�qSr)r/rCrrrrE�s)rrJrrKr�update)r�itemsrrrr2�s���zBoxBackend.folder_contentscCs2|j�|j�j||d�}|j|jd�|j|j<dS)z#Upload local file to the box folder)�	file_path�	file_namerUN)rrJrr)rLr7rr/)rr&r%�new_filerrrr)�s��zBoxBackend.uploadcCsL|�|�}t|d��}|j�|��|�Wd�dS1swYdS)zDownload file in box folder�wbN)rX�openrrV�download_to)rr&r%rW�fprrrr.�s
"�zBoxBackend.downloadcCs|�|�}|j�|���dS)zDelete file in box folderN)rXrrVr')rr&rWrrrr'�s
zBoxBackend.deleteN)r=)�__name__�
__module__�__qualname__r
rr-r1r4r6r<rrXrr2r)r.r'rrrrr!s

	 r�box)�
__future__rr�duplicity.backendr
�boxsdkrr�duplicity.errorsr�futurer�install_aliasesrrr�register_backendrrrr�<module>s>