Ë
    äš¾jX  ã                   óÀ  — d dl m Z mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
mZmZmZmZmZ d dlmZ 	 d dlmZ dd	lmZ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" d dl#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ d dl,m-Z. d dl/m0Z0m1Z1 d dl2m-Z3  ed«       G d„ de«      «       Z6d„ Z7e6jp                  e6_        y# e$ r	 d dlmZ Y Œ‹w xY w# e4$ r ded   _5        Y ŒMw xY w)é    )ÚdatetimeÚ	timedeltaN)Ú
HTTPStatus)ÚPath)ÚAnyÚCallableÚDictÚIterableÚOptionalÚTupleÚUnion)Úislice)Úcasté   )ÚClientÚregister_client_class)Úimplementation_registry)ÚFileCacheMode)ÚMissingCredentialsErroré   )ÚAzureBlobPath)ÚHttpResponseErrorÚResourceNotFoundError)ÚAzureNamedKeyCredential)Ú
BlobPrefixÚBlobSasPermissionsÚBlobServiceClientÚBlobPropertiesÚContentSettingsÚgenerate_blob_sas)ÚSharedKeyCredentialPolicy)ÚDataLakeServiceClientÚFilePropertiesFÚazurec                   óL  ‡ — e Zd ZdZdddddddej
                  fdee   dee   dee   ded   ded	   d
ee	ee
f      dee	eej                  f      dee   fˆ fd„Zdedee   fd„Zdedefd„Zdede	ddeeef   f   fd„Zedefd„«       Zdede	eej                  f   defd„Zdedee   fd„Zdedefd„Z	 d)dededeeeef      fd„Z	 d*dedededefd„Z	 d+ded ed!eddfd"„Zd*ded#eddfd$„Z de	eej                  f   dedefd%„Z!dedefd&„Z"	 d,ded'e#defd(„Z$ˆ xZ%S )-ÚAzureBlobClienta  Client class for Azure Blob Storage which handles authentication with Azure for
    [`AzureBlobPath`](../azblobpath/) instances. See documentation for the
    [`__init__` method][cloudpathlib.azure.azblobclient.AzureBlobClient.__init__] for detailed
    authentication options.
    NÚaccount_urlÚ
credentialÚconnection_stringÚblob_service_clientr   Údata_lake_clientr"   Úfile_cache_modeÚlocal_cache_dirÚcontent_type_methodc	                 óø  •— t         ‰	| �  |||¬«       |€t        j                  dd«      }d| _        |�±|| _        |€™t        |j                  t        «      s|j                  n3t        |j                  j                  |j                  j                  «      }t        | j
                  j                  j                  ddd«      |¬«      | _        d| _        y|| _        d| _        y|�£|| _        |�€‚t        |j                  t        «      s|j                  n3t        |j                  j                  |j                  j                  «      }t!        | j                  j                  j                  ddd«      |¬«      | _        d| _        y|�@t!        j"                  ||¬«      | _        t        j"                  ||¬«      | _        d| _        y|�šd|v r<t!        |j                  dd«      |¬«      | _        t        ||¬«      | _        d| _        yd|v r<t!        ||¬«      | _        t        |j                  dd«      |¬«      | _        d| _        yt!        ||¬«      | _        d| _        yt%        d	«      ‚d| _        y)
aÓ  Class constructor. Sets up a [`BlobServiceClient`](
        https://docs.microsoft.com/en-us/python/api/azure-storage-blob/azure.storage.blob.blobserviceclient?view=azure-python).
        Supports the following authentication methods of `BlobServiceClient`.

        - Environment variable `""AZURE_STORAGE_CONNECTION_STRING"` containing connecting string
        with account credentials. See [Azure Storage SDK documentation](
        https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-python#copy-your-credentials-from-the-azure-portal).
        - Connection string via `connection_string`, authenticated either with an embedded SAS
        token or with credentials passed to `credentials`.
        - Account URL via `account_url`, authenticated either with an embedded SAS token, or with
        credentials passed to `credentials`.
        - Instantiated and already authenticated [`BlobServiceClient`](
        https://docs.microsoft.com/en-us/python/api/azure-storage-blob/azure.storage.blob.blobserviceclient?view=azure-python) or
        [`DataLakeServiceClient`](https://learn.microsoft.com/en-us/python/api/azure-storage-file-datalake/azure.storage.filedatalake.datalakeserviceclient).

        If multiple methods are used, priority order is reverse of list above (later in list takes
        priority). If no methods are used, a [`MissingCredentialsError`][cloudpathlib.exceptions.MissingCredentialsError]
        exception will be raised raised.

        Args:
            account_url (Optional[str]): The URL to the blob storage account, optionally
                authenticated with a SAS token. See documentation for [`BlobServiceClient`](
                https://docs.microsoft.com/en-us/python/api/azure-storage-blob/azure.storage.blob.blobserviceclient?view=azure-python).
            credential (Optional[Any]): Credentials with which to authenticate. Can be used with
                `account_url` or `connection_string`, but is unnecessary if the other already has
                an SAS token. See documentation for [`BlobServiceClient`](
                https://docs.microsoft.com/en-us/python/api/azure-storage-blob/azure.storage.blob.blobserviceclient?view=azure-python)
                or [`BlobServiceClient.from_connection_string`](
                https://docs.microsoft.com/en-us/python/api/azure-storage-blob/azure.storage.blob.blobserviceclient?view=azure-python#from-connection-string-conn-str--credential-none----kwargs-).
            connection_string (Optional[str]): A connection string to an Azure Storage account. See
                [Azure Storage SDK documentation](
                https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-python#copy-your-credentials-from-the-azure-portal).
            blob_service_client (Optional[BlobServiceClient]): Instantiated [`BlobServiceClient`](
                https://docs.microsoft.com/en-us/python/api/azure-storage-blob/azure.storage.blob.blobserviceclient?view=azure-python).
            data_lake_client (Optional[DataLakeServiceClient]): Instantiated [`DataLakeServiceClient`](
                https://learn.microsoft.com/en-us/python/api/azure-storage-file-datalake/azure.storage.filedatalake.datalakeserviceclient).
                If None and `blob_service_client` is passed, we will create based on that.
                Otherwise, will create based on passed credential, account_url, connection_string, or AZURE_STORAGE_CONNECTION_STRING env var
            file_cache_mode (Optional[Union[str, FileCacheMode]]): How often to clear the file cache; see
                [the caching docs](https://cloudpathlib.drivendata.org/stable/caching/) for more information
                about the options in cloudpathlib.eums.FileCacheMode.
            local_cache_dir (Optional[Union[str, os.PathLike]]): Path to directory to use as cache
                for downloaded files. If None, will use a temporary directory. Default can be set with
                the `CLOUDPATHLIB_LOCAL_CACHE_DIR` environment variable.
            content_type_method (Optional[Callable]): Function to call to guess media type (mimetype) when
                writing a file to the cloud. Defaults to `mimetypes.guess_type`. Must return a tuple (content type, content encoding).
        )r-   r.   r,   NÚAZURE_STORAGE_CONNECTION_STRINGz.blob.z.dfs.r   )r'   r(   )Úconn_strr(   ziAzureBlobClient does not support anonymous instantiation. Credentials are required; see docs for options.)ÚsuperÚ__init__ÚosÚgetenvr+   Úservice_clientÚ
isinstancer(   ÚBlobSharedKeyCredentialPolicyr   Úaccount_nameÚaccount_keyr"   ÚurlÚreplaceÚ!DataLakeSharedKeyCredentialPolicyr   Úfrom_connection_stringr   Ú_hns_enabled)
Úselfr'   r(   r)   r*   r+   r,   r-   r.   Ú	__class__s
            €úi/home/spazio/kingdom_calls/work5/transenv/lib/python3.12/site-packages/cloudpathlib/azure/azblobclient.pyr3   zAzureBlobClient.__init__6   s¹  ø€ ôt 	‰ÑØ+Ø 3Ø+ð 	ô 	
ð Ð$Ü "§	¡	Ð*KÈTÓ RÐð ð 	Ôð Ð*Ø"5ˆDÔð  Ð'ô &Ø+×6Ñ6Ô8Uôð (×2Ò2ô 1Ø+×6Ñ6×CÑCØ+×6Ñ6×BÑBóð ô )>Ø $× 3Ñ 3× 7Ñ 7× ?Ñ ?ÀÈ'ÐSTÓ UØ)ô)�Ô%ð| -1ˆÕðs )9�Ô%ðr -1ˆÕðo Ð)Ø$4ˆDÔ!à"Ñ*ô &Ø(×3Ñ3Ô5Vôð %×/Ò/ô 1Ø(×3Ñ3×@Ñ@Ø(×3Ñ3×?Ñ?óð ô '8Ø $× 5Ñ 5× 9Ñ 9× AÑ AÀ'È8ÐUVÓ WØ)ô'�Ô#ðN -1ˆÕðE Ð*Ü"3×"JÑ"JØ*°zô#ˆDÔô %:×$PÑ$PØ*°zô%ˆDÔ!ð< -1ˆÕð7 Ð$Ø˜+Ñ%Ü&7Ø +× 3Ñ 3°G¸XÓ FÐS]ô'�Ô#ô )>Ø +¸
ô)�Ô%ð, -1ˆÕð' ˜[Ñ(Ü&7Ø +¸
ô'�Ô#ô )>Ø +× 3Ñ 3°H¸gÓ FÐS]ô)�Ô%ð -1ˆÕô '8Ø +¸
ô'�Ô#ð -1ˆÕô *ðBóð ð
 -1ˆÕó    Ú
cloud_pathÚreturnc                 ón  — | j                   €>	 | j                  j                  «       }|j                  dd«      | _         | j                   S | j                   S # t        $ r | j                  |«      cY S t        $ r9}|j                  t        j                  k(  r| j                  |«      cY d }~S ‚ d }~ww xY w)NÚis_hns_enabledF)
r?   r6   Úget_account_informationÚgetr   Ú_check_hns_root_metadatar   Ústatus_coder   Ú	FORBIDDEN)r@   rD   Úaccount_infoÚerrors       rB   Ú
_check_hnszAzureBlobClient._check_hnsÍ   sª   € Ø×ÑÐ$ðØ#×2Ñ2×JÑJÓL�Ø$0×$4Ñ$4Ð5EÀuÓ$M�Ô!ð × Ñ Ð ˆt× Ñ Ð øô )ò AØ×4Ñ4°ZÓ@Ò@Ü$ò Ø×$Ñ$¬
×(<Ñ(<Ò<Ø×8Ñ8¸ÓDÕDàûð	ús)   Ž1A ÁB4Á3B4Á;-B/Â(B4Â.B/Â/B4c                 ó  — | j                   j                  |j                  d¬«      }|j                  «       xr- |j	                  «       j
                  j                  dd«      dk(  | _        t        t        | j                  «      S )Nú/©Ú	containerÚblobÚhdi_isfolderFÚtrue)
r6   Úget_blob_clientrS   ÚexistsÚget_blob_propertiesÚmetadatarI   r?   r   Úbool)r@   rD   Úroot_dirs      rB   rJ   z(AzureBlobClient._check_hns_root_metadataß   sx   € Ø×&Ñ&×6Ñ6À×AUÑAUÐ\_Ð6Ó`ˆð �O‰OÓò ]Ø×,Ñ,Ó.×7Ñ7×;Ñ;¸NÈEÓRÐV\Ñ\ð 	Ôô
 ”D˜$×+Ñ+Ó,Ð,rC   r   r#   c                 óÌ  — | j                  |«      rx| j                  j                  |j                  «      }|�)|j	                  |j
                  «      j                  «       }j                  ddd i«      j                  d«      |d<   |S | j                  j                  |j                  |j
                  ¬«      }|j                  «       }|j                  j                  |d<   |S )NÚcontent_settingsÚcontent_typerR   )rO   r+   Úget_file_system_clientrS   Úget_file_clientrT   Úget_file_propertiesrI   r6   rW   rY   r^   r_   )r@   rD   ÚfscÚ
propertiesrT   s        rB   Ú_get_metadatazAzureBlobClient._get_metadataé   sÜ   € ð �?‰?˜:Ô&ð ×'Ñ'×>Ñ>¸z×?SÑ?SÓTˆCàˆØ ×0Ñ0°·±ÓA×UÑUÓW�
ð *4¯©Ø" ^°TÐ$:ó*ç‰c�.Ó!ð �~Ñ&ð Ðð ×&Ñ&×6Ñ6Ø$×.Ñ.°Z·_±_ð 7ó ˆDð ×1Ñ1Ó3ˆJà)3×)DÑ)D×)QÑ)QˆJ�~Ñ&àÐrC   c                 ó0   — t        t        | «      dz   «      S )Nz.part)r   Ústr)Ú
local_paths    rB   Ú_partial_filenamez!AzureBlobClient._partial_filename  s   € ä”C˜
“O gÑ-Ó.Ð.rC   rh   c                 óØ  — | j                   j                  |j                  |j                  ¬«      }|j	                  «       }t        |«      }|j                  j                  dd¬«       	 | j                  |«      }|j                  d«      5 }|j                  |«       d d d «       |j                  |«       |S # 1 sw Y   ŒxY w#  j                  «       r|j                  «        ‚ xY w)NrR   T)Úexist_okÚparentsÚwb)r6   rW   rS   rT   Údownload_blobr   ÚparentÚmkdirri   ÚopenÚreadintor<   rX   Úunlink)r@   rD   rh   rT   Údownload_streamÚpartial_local_pathÚdatas          rB   Ú_download_filezAzureBlobClient._download_file  sã   € ð ×"Ñ"×2Ñ2Ø ×*Ñ*°·±ð 3ó 
ˆð ×,Ñ,Ó.ˆä˜*Ó%ˆ
à×Ñ×Ñ¨°tÐÔ<ð
	Ø!%×!7Ñ!7¸
Ó!CÐØ#×(Ñ(¨Ó.ð /°$Ø×(Ñ(¨Ô.÷/ð ×&Ñ& zÔ2ð Ð÷/ð /ûð	à!×(Ñ(Ô*Ø"×)Ñ)Ô+Øús$   Á+"C ÂB:ÂC Â:CÂ?C Ã#C)c                 ó¸  — |j                   sy	 | j                  |«      }|j                  dd«      s"|j                  di «      j                  dd«      rdS dS # t        $ rx |j                   }|r|j	                  d«      s|dz  }| j
                  j                  |j                  «      }	 t        |j                  |¬«      «       Y y# t        $ r Y Y y w xY ww xY w)	NÚdirÚis_directoryFrZ   rU   ÚfilerQ   ©Úname_starts_with)rT   re   rI   r   Úendswithr6   Úget_container_clientrS   ÚnextÚ
list_blobsÚStopIteration)r@   rD   ÚmetaÚprefixÚcontainer_clients        rB   Ú_is_file_or_dirzAzureBlobClient._is_file_or_dir"  sá   € à�ŠØð	Ø×%Ñ% jÓ1ˆDð
 —8‘8˜N¨EÔ2Ø—8‘8˜J¨Ó+×/Ñ/°ÀÔFð ðð ð	øô %ò 	Ø—_‘_ˆFÙ˜fŸo™o¨cÔ2Ø˜#‘�ð  $×2Ñ2×GÑGÈ
×H\ÑH\Ó]ÐðÜÐ%×0Ñ0À&Ð0ÓIÔJÙøÜ ò Úðúð	ús1   �AA ÁA ÁACÂ+CÃ	CÃCÃCÃCc                 ó¦   — |j                   s3| j                  j                  |j                  «      j	                  «       S | j                  |«      dv S )N)r{   ry   )rT   r6   r   rS   rX   r†   )r@   rD   s     rB   Ú_existszAzureBlobClient._existsA  sE   € à�ŠØ×&Ñ&×;Ñ;¸J×<PÑ<PÓQ×XÑXÓZÐZà×#Ñ# JÓ/°?ÐBÐBrC   Ú	recursivec              #   ó8  K  — |j                   s’| j                  j                  «       D ]t  }| j                  |j                  › |j
                  › �«      df–— |sŒ3| j                  | j                  |j                  › |j
                  › �«      d¬«      E d {  –—†  Œv y | j                  j                  |j                   «      }|j                  }|r|j                  d«      s|dz  }| j                  |«      rŽ| j                  j                  |j                   «      }|j                  |j                  |¬«      }|D ]F  }| j                  |j                  › |j                   › d|j
                  › �«      |j                  f–— ŒH y |s|j                  |¬«      }	n|j!                  |¬«      }	|	D ]a  }
|
j
                  j#                  d«      }| j                  |j                  › |j                   › d|› �«      }||st%        |
t&        «      ndf–— Œc y 7 �Œ~­w)NT©r‰   rQ   )Úpathr‰   r|   F)rS   r6   Úlist_containersÚ	CloudPathÚcloud_prefixÚnameÚ	_list_dirr   rT   r~   rO   r+   r`   Ú	get_pathsrz   Ú
walk_blobsr�   Úrstripr7   r   )r@   rD   r‰   rS   r…   r„   Úfile_system_clientÚpathsrŒ   ÚblobsrT   Ú	blob_pathÚblob_cloud_paths                rB   r‘   zAzureBlobClient._list_dirH  s  è ø€ ð ×#Ò#Ø!×0Ñ0×@Ñ@ÓBò �	Ø—n‘n¨
×(?Ñ(?Ð'@ÀÇÁÐ@PÐ%QÓRÐTXÐXÒXá ØàŸ>™>Ø—N‘N j×&=Ñ&=Ð%>¸y¿~¹~Ð>NÐ#OÓPÐ\`ð *ó ÷ ñ ðð à×.Ñ.×CÑCÀJ×DXÑDXÓYÐà—‘ˆÙ˜&Ÿ/™/¨#Ô.Ø�c‰MˆFà�?‰?˜:Ô&Ø!%×!6Ñ!6×!MÑ!MÈj×NbÑNbÓ!cÐØ&×0Ñ0°j·o±oÐQZÐ0Ó[ˆEàò %�Ø—n‘nØ!×.Ñ.Ð/°
×0DÑ0DÐ/EÀQÀtÇyÁyÀkÐRóà×$Ñ$ð%ó %ñ%ñ Ø(×3Ñ3ÀVÐ3ÓL‘à(×3Ñ3ÀVÐ3ÓL�àò �à ŸI™I×,Ñ,¨SÓ1�	Ø"&§.¡.Ø!×.Ñ.Ð/°
×0DÑ0DÐ/EÀQÀyÀkÐRó#�ð &á$ô ˜t¤ZÔ0àðó ñð5ûs   ‚BHÂHÂE>HÚsrcÚdstÚ
remove_srcc                 ó0  — ||k(  rx| j                   j                  |j                  |j                  ¬«      }|j	                  t        t        t        j                  «       j                  «       «      ¬«      ¬«       |S |�r|j                  |j                  u rí| j                  |«      rÜ| j                  j                  |j                  «      }|j                  «       rE|j                  |j                  «      j!                  |j                  › d|j                  › �«       |S |j"                  j%                  dd¬«       |j'                  |j                  «      j)                  |j                  › d|j                  › �«       |S | j                   j                  |j                  |j                  ¬«      }| j                   j                  |j                  |j                  ¬«      }|j+                  |j,                  «       |r| j/                  |«       |S )NrR   )Úlast_modified)rZ   rQ   T)rl   rk   )r6   rW   rS   rT   Úset_blob_metadataÚdictrg   r   ÚutcnowÚ	timestampÚclientrO   r+   r`   Úis_dirÚget_directory_clientÚrename_directoryro   rp   ra   Úrename_fileÚstart_copy_from_urlr;   Ú_remove)r@   rš   r›   rœ   Úblob_clientrc   ÚtargetÚsources           rB   Ú
_move_filezAzureBlobClient._move_filey  s®  € ð �#Š:Ø×-Ñ-×=Ñ=ØŸ-™-¨c¯h©hð >ó ˆKð ×)Ñ)Ü¬C´·±Ó0A×0KÑ0KÓ0MÓ,NÔOð *ô ð0 ˆ
ò' ˜SŸZ™Z¨3¯:©:Ñ5¸4¿?¹?È3Ô;OØ×'Ñ'×>Ñ>¸s¿}¹}ÓMˆCà�z‰zŒ|Ø×(Ñ(¨¯©Ó2×CÑCÀsÇ}Á}ÀoÐUVÐWZ×W_ÑW_ÐV`ÐDaÔbð ˆ
ð —
‘
× Ñ ¨¸Ð Ô=Ø×#Ñ# C§H¡HÓ-×9Ñ9¸S¿]¹]¸OÈ1ÈSÏXÉXÈJÐ:WÔXð ˆ
ð ×(Ñ(×8Ñ8À3Ç=Á=ÐWZ×W_ÑW_Ð8Ó`ˆFà×(Ñ(×8Ñ8À3Ç=Á=ÐWZ×W_ÑW_Ð8Ó`ˆFà×&Ñ& v§z¡zÔ2áØ—‘˜SÔ!àˆ
rC   rl   rk   c                 ót  — | j                  |«      r§| j                  j                  |j                  «      }|j	                  |j
                  «      }|s|j                  «       rt        d|› �«      ‚|s4| j                  |j                  «      st        d|j                  › d�«      ‚|j                  «        y y )NzDirectory already exists: z!Parent directory does not exist (z4). To create parent directories, use `parents=True`.)rO   r+   r`   rS   r¥   rT   rX   ÚFileExistsErrorrˆ   ro   ÚFileNotFoundErrorÚcreate_directory)r@   rD   rl   rk   r•   Údirectory_clients         rB   Ú_mkdirzAzureBlobClient._mkdirœ  s´   € ð �?‰?˜:Ô&Ø!%×!6Ñ!6×!MÑ!MÈj×NbÑNbÓ!cÐØ1×FÑFÀzÇÁÓWÐáÐ 0× 7Ñ 7Ô 9Ü%Ð(BÀ:À,Ð&OÓPÐPáØ—|‘| J×$5Ñ$5Ô6Ü+Ø;¸J×<MÑ<MÐ;Nð  OCð  Dóð ð ×-Ñ-Õ/ð rC   Ú
missing_okc                 óV  — | j                  |«      }|dk(  r¼| j                  |«      r,t        | j                  |j                  |j
                  «       y d„ | j                  |d¬«      D «       }| j                  j                  |j                  «      }t        t        |d«      «      x}r( |j                  |Ž  t        t        |d«      «      x}rŒ'y y |dk(  rB| j                  j                  |j                  |j
                  ¬«      }|j                  «        y |st        d|› �«      ‚y )	Nry   c              3   ó@   K  — | ]  \  }}|rŒ	|j                   –— Œ y ­w)N)rT   )Ú.0Úbr¤   s      rB   ú	<genexpr>z*AzureBlobClient._remove.<locals>.<genexpr>¸  s    è ø€ ò Ù$˜1˜fÒZ`�—•ñùs   ‚
�Tr‹   é   r{   rR   zFile does not exist: )r†   rO   Ú_hns_rmtreer+   rS   rT   r‘   r6   r   Útupler   Údelete_blobsrW   Údelete_blobr°   )r@   rD   r´   Úfile_or_dirr—   r…   ÚbatchrT   s           rB   r©   zAzureBlobClient._remove±  s  € Ø×*Ñ*¨:Ó6ˆØ˜%ÒØ�‰˜zÔ*Ü˜D×1Ñ1°:×3GÑ3GÈÏÉÔYØñØ(,¯©°zÈT¨Ó(RôˆEð  $×2Ñ2×GÑGÈ
×H\ÑH\Ó]ÐÜ ¤¨¨sÓ!3Ó4Ð4�%Ð4Ø-Ð ×-Ñ-¨uÑ5ô !¤¨¨sÓ!3Ó4Ð4�%Ó4à˜FÒ"Ø×&Ñ&×6Ñ6Ø$×.Ñ.°Z·_±_ð 7ó ˆDð ×ÑÕñ Ü'Ð*?À
¸|Ð(LÓMÐMð rC   c                 óx  — | j                   j                  |j                  |j                  ¬«      }i }| j                  �+| j	                  t        |«      «      \  }}|�||d<   |�||d<   t        di |¤Ž}t        |«      j                  d«      5 }|j                  |d|¬«       d d d «       |S # 1 sw Y   |S xY w)NrR   r_   Úcontent_encodingÚrbT)Ú	overwriter^   © )
r6   rW   rS   rT   r.   rg   r   r   rq   Úupload_blob)	r@   rh   rD   rT   Ú
extra_argsr_   rÂ   r^   rv   s	            rB   Ú_upload_filezAzureBlobClient._upload_fileÉ  sØ   € ð ×"Ñ"×2Ñ2Ø ×*Ñ*°·±ð 3ó 
ˆð ˆ
Ø×#Ñ#Ð/Ø-1×-EÑ-EÄcÈ*ÃoÓ-VÑ*ˆLÐ*àÐ'Ø-9�
˜>Ñ*ØÐ+Ø1A�
Ð-Ñ.ä*Ñ8¨ZÑ8Ðä�*Ó×"Ñ" 4Ó(ð 	V¨DØ×Ñ˜T¨TÐDTÐÔU÷	Vð Ð÷	Vð Ðús   ÂB/Â/B9c                 ó|   — | j                   j                  |j                  |j                  ¬«      }|j                  S )NrR   )r6   rW   rS   rT   r;   )r@   rD   rª   s      rB   Ú_get_public_urlzAzureBlobClient._get_public_urlà  s8   € Ø×)Ñ)×9Ñ9Ø ×*Ñ*°·±ð :ó 
ˆð �‰ÐrC   Úexpire_secondsc                 ó2  — t        | j                  j                  |j                  |j                  | j                  j
                  j                  t        d¬«      t        j                  «       t        |¬«      z   ¬«      }| j                  |«      › d|› �}|S )NT)Úread)Úseconds)Úcontainer_nameÚ	blob_namer:   Ú
permissionÚexpiryú?)r    r6   r9   rS   rT   r(   r:   r   r   r¡   r   rÊ   )r@   rD   rË   Ú	sas_tokenr;   s        rB   Ú_generate_presigned_urlz'AzureBlobClient._generate_presigned_urlæ  s�   € ô &Ø×Ñ×,Ñ,Ø%×/Ñ/Ø —o‘oØ×+Ñ+×6Ñ6×BÑBÜ)¨tÔ4Ü—?‘?Ó$¤y¸Ô'HÑHô
ˆ	ð ×%Ñ% jÓ1Ð2°!°I°;Ð?ˆØˆ
rC   )F)T)FF)i  )&Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	mimetypesÚ
guess_typer   rg   r   r   r   r4   ÚPathLiker   r3   r   r[   rO   rJ   r	   re   Ústaticmethodr   ri   rw   r†   rˆ   r
   r   r‘   r­   r³   r©   rÈ   rÊ   ÚintrÕ   Ú__classcell__)rA   s   @rB   r&   r&   .   s˜  ø„ ñð &*Ø$(Ø+/Ø=AØ>BØ?CØ=AØ2;×2FÑ2FñU1à˜c‘]ðU1ð ˜S‘MðU1ð $ C™=ð	U1ð
 &Ð&9Ñ:ðU1ð #Ð#:Ñ;ðU1ð " %¨¨]Ð(:Ñ";Ñ<ðU1ð " %¨¨R¯[©[Ð(8Ñ"9Ñ:ðU1ð & hÑ/õU1ðn! ]ð !°xÀ±~ó !ð$-°=ð -ÀTó -ðØ'ðà	ÐÐ!1°4¸¸S¸±>ÐAÑ	Bóð4 ð/¨ò /ó ð/ðØ'ðØ5:¸3ÀÇÁÐ;KÑ5Lðà	óð6¨-ð ¸HÀS¹Mó ð>C -ð C°Dó Cð <Añ/Ø'ð/Ø48ð/à	�%˜ tÐ+Ñ,Ñ	-ó/ðd JNñ!Ø ð!Ø'4ð!ØBFð!à	ó!ðH RWñØ'ðØ26ðØJNðà	óñ*N -ð N¸Tð NÈTó Nð0Ø  R§[¡[Ð 0Ñ1ðØ?Lðà	óð.¨-ð ¸Có ð @GñØ'ðØ9<ðà	÷rC   r&   c                 óh   — | j                  |«      }|j                  |«      }|j                  «        y)zýStateless implementation so can be used in test suite cleanup as well.

    If hierarchical namespace is enabled, delete the directory and all its contents.
    (The non-HNS version is implemented in `_remove`, but will leave empty folders in HNS).
    N)r`   r¥   Údelete_directory)r+   rS   Ú	directoryr•   r²   s        rB   r»   r»   õ  s2   € ð *×@Ñ@ÀÓKÐØ)×>Ñ>¸yÓIÐØ×%Ñ%Õ'rC   )9r   r   rÚ   r4   Úhttpr   Úpathlibr   Útypingr   r   r	   r
   r   r   r   Ú	itertoolsr   r   ÚImportErrorÚtyping_extensionsr£   r   r   Ú	cloudpathr   Úenumsr   Ú
exceptionsr   Ú
azblobpathr   Úazure.core.exceptionsr   r   Úazure.core.credentialsr   Úazure.storage.blobr   r   r   r   r   r    Ú)azure.storage.blob._shared.authenticationr!   r8   Úazure.storage.filedatalaker"   r#   Ú1azure.storage.filedatalake._shared.authenticationr=   ÚModuleNotFoundErrorÚdependencies_loadedr&   r»   rŽ   rÅ   rC   rB   ú<module>rõ      sÍ   ðß (Û Û 	Ý Ý ß H× HÑ HÝ ð'Ý÷ 3Ý /Ý !Ý 0Ý %ðAßNÝ>÷÷ õ÷ Qõñ �wÓôC�fó Có  ðCòL(ð !0× 9Ñ 9€Õ øðk ò 'ß&ð'ûð> ò AØ;@Ð˜GÑ$Ö8ðAús#   ¶B: Á2C Â:CÃCÃCÃC