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__/megabackend.cpython-310.pyc
o

�~�_��@s�ddlmZddlmZe��ddlmZddlmZddl	Zddl
Z
ddlZGdd�dejj
�Zej�de�ejj�dg�dS)	�)�print_function)�standard_library)�util)�BackendExceptionNc@sreZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zddd�Zdd�Z
dd�Zdd�ZdS)�MegaBackendz,Connect to remote store using Mega.co.nz APIcCs�tjj�||�|�d�|�d�|�d�|�d�|�d�|j|_|jdur3t�	d�d|_
nd|_
|j|_|�
�|_d	|_|jd
|jdd�|_|�|jdd��d
��dS)N�megals�	megamkdir�megaget�megaput�megarm�HOMEz/.megarcFz/Root�/�)�	duplicity�backend�Backend�__init__�_check_binary_exists�hostname�	_hostname�password�os�getenv�_megarc�username�	_username�get_password�	_password�_root�path�_folder�_makedir_recursive�split)�self�
parsed_url�r%�@/usr/lib/python3/dist-packages/duplicity/backends/megabackend.pyr%s






zMegaBackend.__init__c
Cs<z
t�d|g�WdSty}ztd|f��d}~ww)z:checks that a specified command exists in the current path�whichz9command '%s' not found, make sure megatools are installedN)�
subprocess�check_output�	Exceptionr)r#�cmd�er%r%r&r@s��z MegaBackend._check_binary_existscCs8|jrdd|j|g}n
dd|jd|j|g}|�|�dS)zcreates a remote directoryr�--config�-u�-pN)rrr�subprocess_popen)r#rr+r%r%r&�_makedirIszMegaBackend._makedircCsLtdd�|�f�|j}|D]}|d|}z|�|�WqYqdS)zGcreates a remote directory (recursively the whole path), ingores errorsz	mkdir: %sr
N)�print�joinrr1)r#r�p�folderr%r%r&r!Ss�zMegaBackend._makedir_recursivecCsJz
|�t�|��Wn	tyYnw|jt�|���t�|�d�dS)zDuploads file to Mega (deletes it first, to ensure it does not exist))�
local_file�remote_fileN)�deleter�fsdecoder*�upload�
get_canonical)r#�source_path�remote_filenamer%r%r&�_putas�
�zMegaBackend._putcCs |jt�|�t�|j�d�dS)zdownloads file from Mega)r7r6N)�downloadrr9�name)r#r=�
local_pathr%r%r&�_getls

�zMegaBackend._getcCs|jdd�S)zlist files in the backup folderT)�
files_only)�folder_contents�r#r%r%r&�_listrszMegaBackend._listcCs|jt�|�d�dS)zdeletes remote )r7N)r8rr9)r#�filenamer%r%r&�_deletewszMegaBackend._deleteFcs�td�jf��jrdd�j�jg}ndd�jd�j�jg}t�|�}t�|�	���
d�}�fdd�|D�}|r@d	d�|D�}d
d�|D�S)z>lists contents of a folder, optionally ignoring subdirectoriesz
megals: %srr-r.r/�
cs"g|]
}|t�j�dd��qS)rN)�lenr ��.0�frEr%r&�
<listcomp>�s"z/MegaBackend.folder_contents.<locals>.<listcomp>cSsg|]}d|vr|�qS)r
r%rKr%r%r&rN�scSsg|]}t�|��qSr%)r�fsencoderKr%r%r&rN�s)r2r rrrr(r)rr9�stripr")r#rCr+�filesr%rEr&rD|s
zMegaBackend.folder_contentsc
Csftd|f�|jrdd|jdd||jd|g}ndd|jd|jdd||jd|g	}|�|�dS)	Nzmegaget: %sr	r-�
--no-progress�--pathr
r.r/�r2rr rrr0)r#r7r6r+r%r%r&r?�s
��zMegaBackend.downloadc
Cs�td|f�|jrdd|jdd|jd||g}ndd|jd|jdd|jd||g	}z|�|�WdStyW}zt|�}d	|vrKtd
|f��td||f��d}~ww)Nzmegaput: %sr
r-rRrSr
r.r/�
EOVERQUOTAzwMEGA account over quota, could not write file : '%s' . Upgrade your storage at https://mega.nz/pro or remove some data.z0Failed writing file '%s' to MEGA , reason : '%s')	r2rr rrr0r*�strr)r#r6r7r+r,�	error_strr%r%r&r:�s&
�����zMegaBackend.uploadcCsZtd|f�|jrdd|j|jd|g}ndd|jd|j|jd|g}|�|�dS)Nz
megarm: %srr-r
r.r/rT)r#r7r+r%r%r&r8�s
zMegaBackend.deleteN)F)�__name__�
__module__�__qualname__�__doc__rrr1r!r>rBrFrHrDr?r:r8r%r%r%r&r"s	


r�mega)�
__future__r�futurer�install_aliasesrr�duplicity.errorsr�duplicity.backendrr(rrr�register_backend�uses_netloc�extendr%r%r%r&�<module>s