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

��`��@s�ddlmZddlZddlZddlZddlmZddlmZddlm	Z	ddl
mZe�d�Z
dd	�ZGd
d�dejj�Zej�de�dS)
�)�strN)�config)�log)�BackendException)�fsdecodez)^[a-z0-9](?!.*--)[a-z0-9-]{1,61}[a-z0-9]$cCst�|�}|duS)z�
    Check, whether the given name conforms to the rules as defined in
    https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata
    for valid names.
    N)�_VALID_CONTAINER_NAME_RE�match)�namer�r
�A/usr/lib/python3/dist-packages/duplicity/backends/azurebackend.py�_is_valid_container_name$s
rc@sXeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�ZdS)�AzureBackendz0
    Backend for Azure Blob Storage Service
    c
Cs�tjj�||�zddl}ddl}ddl}ddlm}Wnty0}zt	dt
|���d}~ww|j�d�|_
t|j
�sAt	d��dtjvrJt	d��i}tjrTtj|d<tjr\tj|d	<tjrdtj|d
<tjd}|j|dfi|��|_|��dS)Nr)�BlobServiceClientz{Azure backend requires Microsoft Azure Storage SDK for Python (https://pypi.org/project/azure-storage-blob/).
Exception: %s�/z*Invalid Azure Storage Blob container name.�AZURE_CONNECTION_STRINGz5AZURE_CONNECTION_STRING environment variable not set.�timeout�max_single_put_size�max_block_size)�	duplicity�backend�Backend�__init__�azure�
azure.storage�azure.storage.blobr�ImportErrorrr�path�lstrip�container_namer�os�environrr�azure_max_single_put_size�azure_max_block_size�from_connection_string�blob_service�_get_or_create_container)�self�
parsed_urlrr�e�kwargs�conn_strr
r
rr2s6���





zAzureBackend.__init__c
Cs�ddlm}z|j�|j�|_|j��WdS|y YdStyE}zt�	dt
|j��dd�dtj
j�WYd}~dSd}~ww)Nr)�ResourceExistsErrorz$Could not create Azure container: %s�
�)�azure.core.exceptionsr+r$�get_container_clientr�	container�create_container�	Exceptionr�
FatalErrorr�message�split�	ErrorCode�connection_failed)r&r+r(r
r
rr%Ws����z%AzureBackend._get_or_create_containercCsjt|�}i}tjrtj|d<|�d��}|jj||fi|��Wd�n1s)wY|�|�dS)N�max_concurrency�rb)rr�azure_max_connections�openr0�upload_blob�	_set_tier)r&�source_path�remote_filenamer)�datar
r
r�_putds
�zAzureBackend._putcCs"tjdur|j�tj|�dSdS�N)r�azure_blob_tierr0�set_standard_blob_tier_blobs)r&r?r
r
rr=ps
�zAzureBackend._set_tiercCsJ|j�|�}|�d��}|�|���Wd�dS1swYdS)N�wb)r0�
download_blobr;�write�readall)r&r?�
local_path�blob�
download_filer
r
r�_getts"�zAzureBackend._getcCs0g}|j��}|D]}|�|�q	dd�|D�S)NcSsg|]}|j�qSr
)r	)�.0rJr
r
r�
<listcomp>�sz&AzureBackend._list.<locals>.<listcomp>)r0�
list_blobs�append)r&�blobs�	blob_listrJr
r
r�_listzs

zAzureBackend._listcCs|j�t|��dSrB)r0�delete_blobr)r&�filenamer
r
r�_delete�szAzureBackend._deletecCs&|j�t|��}|��}dt|j�iS)N�size)r0�get_blob_clientr�get_blob_properties�intrW)r&rU�client�propr
r
r�_query�szAzureBackend._querycCstjjSrB)rr6�backend_not_found)r&�	operationr(r
r
r�_error_code�szAzureBackend._error_codeN)
�__name__�
__module__�__qualname__�__doc__rr%rAr=rLrSrVr]r`r
r
r
rr
.s%
	r
r)�builtinsrr�re�duplicity.backendrrr�duplicity.errorsr�duplicity.utilr�compilerrrrr
�register_backendr
r
r
r�<module>s

b