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

l��`C#�@s�ddlmZe��ddlmZddlmZddlmZddlm	Z	ddlm
Z
ddlmZddlm
Z
mZdd	lZGd
d�de�ZGdd
�d
ejj�Zej�de�d	S)�)�standard_library)�object)�
quote_plus)�log)�progress)�util)�config)�BackendException�FatalBackendExceptionNc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�B2ProgressListenercC�dS�N���selfrr�>/usr/lib/python3/dist-packages/duplicity/backends/b2backend.py�	__enter__)�zB2ProgressListener.__enter__cCs
||_dSr
)�total_byte_count)rrrrr�set_total_bytes,s
z"B2ProgressListener.set_total_bytescCst�||j�dSr
)r�report_transferr)r�
byte_countrrr�bytes_completed/sz"B2ProgressListener.bytes_completedcCrr
rrrrr�close2rzB2ProgressListener.closecCrr
r)r�exc_type�exc_val�exc_tbrrr�__exit__5rzB2ProgressListener.__exit__N)�__name__�
__module__�__qualname__rrrrrrrrrr(src@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�	B2Backendz4
    Backend for BackBlaze's B2 storage service
    cCs,tjj�||�zddlm}|�d�}dd�|D�|_Wn	gd�|_Yzddlm	}ddlm
}dd	lm}Wn�t
y�z'ddlm	}ddlm
}dd
lmadd	lm}|jgd�krhddlmaWnzt
y�z ddlm	}ddlm
}dd
lmadd	lm}ddlmaWnPt
y�}zDd
t|dd
�vr��z ddlm	}ddlm
}dd
lmadd	lm}ddlmaWnt
y�dt|dd�vrтtd��wWYd}~nd}~wwYnwYnw||��|_d|j _!|j"}|�#�}	dd�|j$�%dd��d�D�|_&|j&�r|j&�'d�|_"|j&�'d�}
ntd��d�(dd�|j&D��|_$|j�)d||	�zt*�+d|j$|
|jj,�-�ft*j.�Wnt/�y`t*�+d|j$|
|jj,�0�ft*j.�Ynwz|j�1|
�|_2t*�+dt*j.�WdS|�y�zt*�+dt*j.�|j�3|
d�|_2WYdSt4d��w) zA
        Authorize to B2 api and set up needed variables
        r)�__version__�.cSsg|]}t|��qSr)�int��.0�xrrr�
<listcomp>I�z&B2Backend.__init__.<locals>.<listcomp>)rrr)�B2Api)�InMemoryAccountInfo)�NonExistentBucket)�DownloadDestLocalFile���	r)�FileVersionInfoFactory�b2sdk�name�b2z5B2 backend requires B2 Python SDK (pip install b2sdk)N�B2cSsg|]}|dkr|�qS)�rr%rrrr(us�@�/zB2 requires a bucket namer6cSsg|]}|d�qS)r8r)r&�url_partrrrr(}r)�
productionz<B2 Backend (path= %s, bucket= %s, recommended_part_size= %s)z8B2 Backend (path= %s, bucket= %s, minimum_part_size= %s)zBucket foundzBucket not found, creating one�
allPrivatezBucket cannot be created)5�	duplicity�backend�Backend�__init__r2r"�split�v_num�b2sdk.v2r*r+�b2sdk.v2.exceptionr,�ImportError�b2sdk.v1r-�b2sdk.v1.exception�b2sdk.v1.file_versionr1�	b2sdk.api�b2sdk.account_info�b2sdk.download_dest�b2sdk.exception�b2sdk.file_version�getattr�b2.api�b2.account_info�b2.download_dest�b2.exception�b2.file_versionr	�service�
parsed_url�hostname�username�get_password�path�replace�	url_parts�pop�join�authorize_accountr�Log�account_info�get_recommended_part_size�INFO�AttributeError�get_minimum_part_size�get_bucket_by_name�bucket�
create_bucketr
)rrT�VERSION�v_splitr*r+r,�e�
account_id�account_key�bucket_namerrrr?>s�
����������������zB2Backend.__init__cCs�t�d|jt�|�t�|j�ftj�|jgd�kr1|j�	t
|jt�|�d�t|j��dS|j�	t
|jt�|�d��}|�|j�dS)z8
        Download remote_filename to local_path
        z
Get: %s -> %s)r/�rr8N)
rr^rXr�fsdecoder3rarAre�download_file_by_namerr-�save_to)r�remote_filename�
local_path�dfrrr�_get�s
���zB2Backend._getcCs^t�dt�|j�|jt�|�ftj�|jjt�|j�t	|jt�|�d�dt
�d�dS)z5
        Copy source_path to remote_filename
        z
Put: %s -> %sr8zapplication/pgp-encrypted)�content_type�progress_listenerN)rr^rrnr3rXrare�upload_local_filerr)r�source_pathrqrrr�_put�s��
�zB2Backend._putcs�fdd��j��j�D�S)z-
        List files on remote server
        cs$g|]\}}|jt�j�d��qSr
)�	file_name�lenrX)r&�file_version_info�folder_namerrrr(�s�z#B2Backend._list.<locals>.<listcomp>)re�lsrXrrrr�_list�s
�zB2Backend._listcCs^|jt�|�}t�d|tj�tjr|j�	|�dS|�
t|d��}|j�|j
|j�dS)z4
        Delete filename from remote server
        z
Delete: %sr8N)rXrrnrr^rar�
b2_hide_filesre�	hide_file�	file_infor�delete_file_version�id_rz)r�filename�
full_filenamer|rrr�_delete�szB2Backend._deletecCs`t�d|jt�|�tj�|�t|jt�|�d��}d|dur-|jdur-t	|j�iSdiS)z+
        Get size info of filename
        z	Query: %sr8�sizeN���)
rr^rXrrnrar�rr�r$)rr�r|rrr�_query�s��zB2Backend._querycCsh|jgd�kr
|j�|�S|jjj�|jj|d|j�}|dD]}t�	|�}|j
|kr/|Sqtd��)Nr.r/�fileszFile not found)rAre�get_file_info_by_name�api�session�list_file_namesr�rXr1�from_api_responserzr	)rr��response�entryr|rrrr��s

�zB2Backend.file_infoN)rrr �__doc__r?rtryrr�r�r�rrrrr!9sS
	r!r4)�futurer�install_aliases�builtinsr�urllib.parserr<rrrr�duplicity.errorsr	r
�duplicity.backendrr=r>r!�register_backendrrrr�<module>s