ó
    ëBjX  ã                   óÄ  • S SK J r Jr  S SKrS SKrS SKJr  S SKJr  S SKJ	r	J
r
JrJrJrJrJr  S SKJr   S SKJr  SS	KJrJr  SS
KJr  SSKJr  SSKJr  SSKJr   S SK J!r!J"r"  S SK#J$r$  S SK%J&r&J'r'J(r(J)r)J*r*J+r+  S SK,J-r.  S SK/J0r0J1r1  S SK2J-r3  \" S5       " S S\5      5       r6S r7\6Rp                  \6l        g! \ a	    S SKJr   NŒf = f! \4 a    S\S   l5         NOf = f)é    )Ú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                   ó€  ^ • \ rS rSrSrSSSSSSS\R                  4S\\   S\\	   S\\   S\S   S	\S
   S\\
\\4      S\\
\\R                  4      S\\   4U 4S jjjrS\S\\   4S jrS\S\4S jrS\S\
SS\\\	4   4   4S jr\S\4S j5       rS\S\
\\R                  4   S\4S jrS\S\\   4S jrS\S\4S jr S+S\S\S\\\\4      4S jjr S,S\S\S\S\4S  jjr S-S\S!\S"\SS4S# jjr S,S\S$\SS4S% jjr!S\
\\R                  4   S\S\4S& jr"S\S\4S' jr# S.S\S(\$S\4S) jjr%S*r&U =r'$ )/ÚAzureBlobClienté.   a
  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	U ]  UUUS9  Uc  [        R                  " SS5      nSU l        Ub¦  X@l        Uc•  [        UR                  [        5      (       d  UR                  O3[        UR                  R                  UR                  R                  5      n[        U R
                  R                  R                  SSS5      US9U l        GOcXPl        GO[Ub�  XPl        Uc“  [        UR                  [        5      (       d  UR                  O3[        UR                  R                  UR                  R                  5      n[!        U R                  R                  R                  SSS5      US9U l        O»Ub3  [         R"                  " X2S9U l        [        R"                  " X2S9U l        O…Ubw  SU;   a.  [!        UR                  SS5      US9U l        [        XS9U l        ONSU;   a.  [!        XS9U l        [        UR                  SS5      US9U l        O[!        XS9U l        O[%        S	5      eSU l        g)
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
            €Ú\/home/mande/repo/quber/.venv/lib/python3.13/site-packages/cloudpathlib/azure/azblobclient.pyr4   ÚAzureBlobClient.__init__6   sf  ø€ ôt 	‰ÑØ+Ø 3Ø+ð 	ñ 	
ð Ñ$Ü "§	¢	Ð*KÈTÓ RÐð ð 	Ôð Ñ*Ø"5Ôð  Ñ'ô &Ø+×6Ñ6Ô8U÷ñ ð (×2Ò2ô 1Ø+×6Ñ6×CÑCØ+×6Ñ6×BÑBóð ô )>Ø $× 3Ñ 3× 7Ñ 7× ?Ñ ?ÀÈ'ÐSTÓ UØ)ñ)�Ö%ð
 )9Ö%àÑ)Ø$4Ô!à"Ñ*ô &Ø(×3Ñ3Ô5V÷ñ ð %×/Ò/ô 1Ø(×3Ñ3×@Ñ@Ø(×3Ñ3×?Ñ?óð ô '8Ø $× 5Ñ 5× 9Ñ 9× AÑ AÀ'È8ÐUVÓ WØ)ñ'�Ô#øð
 Ñ*Ü"3×"JÒ"JØ*ñ#ˆDÔô %:×$PÒ$PØ*ñ%ˆDÕ!ð Ñ$Ø˜+Ó%Ü&7Ø +× 3Ñ 3°G¸XÓ FÐS]ñ'�Ô#ô )>Ø +ñ)�Õ%ð ˜[Ó(Ü&7Ø +ñ'�Ô#ô )>Ø +× 3Ñ 3°H¸gÓ FÐS]ñ)�Õ%ô
 '8Ø +ñ'�Õ#ô
 *ðBóð ð
 -1ˆÕó    Ú
cloud_pathÚreturnc                 óv  • U R                   c>   U R                  R                  5       nUR                  SS5      U l         U R                   $ U R                   $ ! [         a    U R                  U5      s $ [         a:  nUR                  [        R                  :X  a  U R                  U5      s S nA$ e S nAff = f)NÚis_hns_enabledF)
r@   r7   Úget_account_informationÚgetr   Ú_check_hns_root_metadatar   Ústatus_coder   Ú	FORBIDDEN)rA   rF   Úaccount_infoÚerrors       rC   Ú
_check_hnsÚ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 ÁB8Á5	B8Á>.B3Â,B8Â2B3Â3B8c                 ó  • U R                   R                  UR                  SS9nUR                  5       =(       a-    UR	                  5       R
                  R                  SS5      S:H  U l        [        [        U R                  5      $ )NÚ/©Ú	containerÚblobÚhdi_isfolderFÚtrue)
r7   Úget_blob_clientrV   ÚexistsÚget_blob_propertiesÚmetadatarK   r@   r   Úbool)rA   rF   Úroot_dirs      rC   rL   Ú(AzureBlobClient._check_hns_root_metadataß   sx   € Ø×&Ñ&×6Ñ6À×AUÑAUÐ\_Ð6Ð`ˆð �O‰OÓ÷ ]Ø×,Ñ,Ó.×7Ñ7×;Ñ;¸NÈEÓRÐV\Ñ\ð 	Ôô
 ”D˜$×+Ñ+Ó,Ð,rE   r   r#   c                 óÒ  • U R                  U5      (       ay  U R                  R                  UR                  5      nUb)  UR	                  UR
                  5      R                  5       nWR                  SSS 05      R                  S5      US'   U$ U R                  R                  UR                  UR
                  S9nUR                  5       nUR                  R                  US'   U$ )NÚcontent_settingsÚcontent_typerU   )rQ   r,   Úget_file_system_clientrV   Úget_file_clientrW   Úget_file_propertiesrK   r7   rZ   r\   rb   rc   )rA   rF   ÚfscÚ
propertiesrW   s        rC   Ú_get_metadataÚ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�~Ñ&àÐrE   c                 ó0   • [        [        U 5      S-   5      $ )Nz.part)r   Ústr)Ú
local_paths    rC   Ú_partial_filenameÚ!AzureBlobClient._partial_filename  s   € ä”C˜
“O gÑ-Ó.Ð.rE   rm   c                 óà  • U R                   R                  UR                  UR                  S9nUR	                  5       n[        U5      nUR                  R                  SSS9   U R                  U5      nUR                  S5       nUR                  U5        S S S 5        UR                  U5        U$ ! , (       d  f       N!= f!   WR                  5       (       a  UR                  5         e = f)NrU   T)Úexist_okÚparentsÚwb)r7   rZ   rV   rW   Údownload_blobr   ÚparentÚmkdirrn   ÚopenÚreadintor=   r[   Úunlink)rA   rF   rm   rW   Údownload_streamÚpartial_local_pathÚdatas          rC   Ú_download_fileÚAzureBlobClient._download_file  sß   € ð ×"Ñ"×2Ñ2Ø ×*Ñ*°·±ð 3ð 
ˆð ×,Ñ,Ó.ˆä˜*Ó%ˆ
à×Ñ×Ñ¨°tÐÑ<ð
	Ø!%×!7Ñ!7¸
Ó!CÐØ#×(Ñ(¨Ô.°$Ø×(Ñ(¨Ô.÷ /ð ×&Ñ& zÔ2ð Ð÷ /Õ.ûð	à!×(Ñ(×*Ñ*Ø"×)Ñ)Ô+Øús$   Á%"C ÂB4ÂC Â4
CÂ>C Ã(C-c                 óè  • UR                   (       d  g U R                  U5      nUR                  SS5      (       d'  UR                  S0 5      R                  SS5      (       a  S$ S$ ! [         a€    UR                   nU(       a  UR	                  S5      (       d  US-  nU R
                  R                  UR                  5      n [        UR                  US95         g! [         a      g f = ff = f)	NÚdirÚis_directoryFr]   rX   ÚfilerT   ©Úname_starts_with)rW   ri   rK   r   Úendswithr7   Úget_container_clientrV   ÚnextÚ
list_blobsÚStopIteration)rA   rF   ÚmetaÚprefixÚcontainer_clients        rC   Ú_is_file_or_dirÚAzureBlobClient._is_file_or_dir"  sê   € à��Øð	Ø×%Ñ% jÓ1ˆDð
 —8‘8˜N¨E×2Ñ2Ø—8‘8˜J¨Ó+×/Ñ/°À×FÑFð ðð ð	øô %ó 	Ø—_‘_ˆFÞ˜fŸo™o¨c×2Ñ2Ø˜#‘�ð  $×2Ñ2×GÑGÈ
×H\ÑH\Ó]ÐðÜÐ%×0Ñ0À&Ð0ÐIÔJÙøÜ ó Úðúð	ús1   ”AA' Á%A' Á'AC1ÃCÃ
C-Ã)C1Ã,C-Ã-C1c                 ó²   • UR                   (       d3  U R                  R                  UR                  5      R	                  5       $ U R                  U5      S;   $ )N)r‚   r€   )rW   r7   r†   rV   r[   r�   )rA   rF   s     rC   Ú_existsÚAzureBlobClient._existsA  sE   € à��Ø×&Ñ&×;Ñ;¸J×<PÑ<PÓQ×XÑXÓZÐZà×#Ñ# JÓ/°?ÑBÐBrE   Ú	recursivec              #   ót  #   • UR                   (       d—  U R                  R                  5        Hx  nU R                  UR                   UR
                   35      S4v •  U(       d  M9  U R                  U R                  UR                   UR
                   35      SS9 S h  v•N   Mz     g U R                  R                  UR                   5      nUR                  nU(       a  UR                  S5      (       d  US-  nU R                  U5      (       a�  U R                  R                  UR                   5      nUR                  UR                  US9nU HG  nU R                  UR                   UR                    SUR
                   35      UR                  4v •  MI     g U(       d  UR                  US9n	OUR!                  US9n	U	 Hg  n
U
R
                  R#                  S5      nU R                  UR                   UR                    SU 35      nUU(       d  [%        U
[&        5      OS4v •  Mi     g  GN”7f)NT©r’   rT   )Úpathr’   rƒ   F)rV   r7   Úlist_containersÚ	CloudPathÚcloud_prefixÚnameÚ	_list_dirr†   rW   r…   rQ   r,   rd   Ú	get_pathsr�   Ú
walk_blobsrˆ   Úrstripr8   r   )rA   rF   r’   rV   rŒ   r‹   Úfile_system_clientÚpathsr•   ÚblobsrW   Ú	blob_pathÚblob_cloud_paths                rC   rš   ÚAzureBlobClient._list_dirH  s  é € ð ×#×#Ø!×0Ñ0×@Ñ@ÖB�	Ø—n‘n¨
×(?Ñ(?Ð'@ÀÇÁÐ@PÐ%QÓRÐTXÐXÒXæ ÙàŸ>™>Ø—N‘N j×&=Ñ&=Ð%>¸y¿~¹~Ð>NÐ#OÓPÐ\`ð *ð ÷ ò ñ Cð à×.Ñ.×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H8Â!H5Â"FH8ÚsrcÚdstÚ
remove_srcc                 ó:  • X:X  ap  U R                   R                  UR                  UR                  S9nUR	                  [        [        [        R                  " 5       R                  5       5      S9S9  U$ U(       Ga  UR                  UR                  L aõ  U R                  U5      (       aß  U R                  R                  UR                  5      nUR                  5       (       aE  UR                  UR                  5      R!                  UR                   SUR                   35        U$ UR"                  R%                  SSS9  UR'                  UR                  5      R)                  UR                   SUR                   35         U$ U R                   R                  UR                  UR                  S9nU R                   R                  UR                  UR                  S9nUR+                  UR,                  5        U(       a  U R/                  U5        U$ )NrU   )Úlast_modified)r]   rT   T)rr   rq   )r7   rZ   rV   rW   Úset_blob_metadataÚdictrl   r   ÚutcnowÚ	timestampÚclientrQ   r,   rd   Úis_dirÚget_directory_clientÚrename_directoryru   rv   re   Úrename_fileÚstart_copy_from_urlr<   Ú_remove)rA   r¤   r¥   r¦   Úblob_clientrg   ÚtargetÚsources           rC   Ú
_move_fileÚAzureBlobClient._move_filey  s±  € ð ‹:Ø×-Ñ-×=Ñ=ØŸ-™-¨c¯h©hð >ð ˆKð ×)Ñ)Ü¬C´·²Ó0A×0KÑ0KÓ0MÓ,NÑOð *ñ ð0 ˆ
÷' ˜SŸZ™Z¨3¯:©:Ò5¸4¿?¹?È3×;OÑ;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Ô!àˆ
rE   rr   rq   c                 ó¦  • U R                  U5      (       a»  U R                  R                  UR                  5      nUR	                  UR
                  5      nU(       d#  UR                  5       (       a  [        SU 35      eU(       d9  U R                  UR                  5      (       d  [        SUR                   S35      eUR                  5         g g )NzDirectory already exists: z!Parent directory does not exist (z4). To create parent directories, use `parents=True`.)rQ   r,   rd   rV   r¯   rW   r[   ÚFileExistsErrorr�   ru   ÚFileNotFoundErrorÚcreate_directory)rA   rF   rr   rq   rž   Údirectory_clients         rC   Ú_mkdirÚAzureBlobClient._mkdirœ  s½   € ð �?‰?˜:×&Ñ&Ø!%×!6Ñ!6×!MÑ!MÈj×NbÑNbÓ!cÐØ1×FÑFÀzÇÁÓWÐæÐ 0× 7Ñ 7× 9Ñ 9Ü%Ð(BÀ:À,Ð&OÓPÐPæØ—|‘| J×$5Ñ$5×6Ñ6Ü+Ø;¸J×<MÑ<MÐ;Nð  OCð  Dóð ð ×-Ñ-Õ/ð rE   Ú
missing_okc                 óx  • U R                  U5      nUS:X  aÉ  U R                  U5      (       a,  [        U R                  UR                  UR
                  5        g S U R                  USS9 5       nU R                  R                  UR                  5      n[        [        US5      5      =n(       a.  UR                  " U6   [        [        US5      5      =n(       a  M-  g g US:X  a?  U R                  R                  UR                  UR
                  S9nUR                  5         g U(       d  [        SU 35      eg )	Nr€   c              3   óP   #   • U  H  u  pU(       a  M  UR                   v •  M     g 7f)N)rW   )Ú.0Úbr®   s      rC   Ú	<genexpr>Ú*AzureBlobClient._remove.<locals>.<genexpr>¸  s   é € ð Ú(R™9˜1ÔZ`“�—–Ò(Rùs   ‚&“&Tr”   é   r‚   rU   zFile does not exist: )r�   rQ   Ú_hns_rmtreer,   rV   rW   rš   r7   r†   Útupler   Údelete_blobsrZ   Údelete_blobr»   )rA   rF   rÀ   Úfile_or_dirr    rŒ   ÚbatchrW   s           rC   r³   Ú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Ñ4à˜FÓ"Ø×&Ñ&×6Ñ6Ø$×.Ñ.°Z·_±_ð 7ð ˆDð ×ÑÕö Ü'Ð*?À
¸|Ð(LÓMÐMð rE   c                 óv  • U R                   R                  UR                  UR                  S9n0 nU R                  b*  U R	                  [        U5      5      u  pVUb  XTS'   Ub  XdS'   [        S0 UD6n[        U5      R                  S5       nUR                  USUS9  S S S 5        U$ ! , (       d  f       U$ = f)NrU   rc   Úcontent_encodingÚrbT)Ú	overwriterb   © )
r7   rZ   rV   rW   r/   rl   r   r   rw   Úupload_blob)	rA   rm   rF   rW   Ú
extra_argsrc   rÐ   rb   r|   s	            rC   Ú_upload_fileÚAzureBlobClient._upload_fileÉ  sÌ   € ð ×"Ñ"×2Ñ2Ø ×*Ñ*°·±ð 3ð 
ˆð ˆ
Ø×#Ñ#Ñ/Ø-1×-EÑ-EÄcÈ*ÃoÓ-VÑ*ˆLàÑ'Ø-9˜>Ñ*ØÑ+Ø1AÐ-Ñ.ä*Ñ8¨ZÑ8Ðä�*Ó×"Ñ" 4Ô(¨DØ×Ñ˜T¨TÐDTÐÑU÷ )ð Ð÷ )Ô(ð Ðús   ÂB)Â)
B8c                 óv   • U R                   R                  UR                  UR                  S9nUR                  $ )NrU   )r7   rZ   rV   rW   r<   )rA   rF   r´   s      rC   Ú_get_public_urlÚAzureBlobClient._get_public_urlà  s8   € Ø×)Ñ)×9Ñ9Ø ×*Ñ*°·±ð :ð 
ˆð �‰ÐrE   Úexpire_secondsc                 ó"  • [        U R                  R                  UR                  UR                  U R                  R
                  R                  [        SS9[        R                  " 5       [        US9-   S9nU R                  U5       SU 3nU$ )NT)Úread)Úseconds)Úcontainer_nameÚ	blob_namer;   Ú
permissionÚexpiryÚ?)r    r7   r:   rV   rW   r)   r;   r   r   r«   r   rÙ   )rA   rF   rÛ   Ú	sas_tokenr<   s        rC   Ú_generate_presigned_urlÚ'AzureBlobClient._generate_presigned_urlæ  s�   € ô &Ø×Ñ×,Ñ,Ø%×/Ñ/Ø —o‘oØ×+Ñ+×6Ñ6×BÑBÜ)¨tÑ4Ü—?’?Ó$¤y¸Ñ'HÑHñ
ˆ	ð ×%Ñ% jÓ1Ð2°!°I°;Ð?ˆØˆ
rE   )r@   r,   r7   )F)T)FF)i  )(Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú	mimetypesÚ
guess_typer   rl   r   r   r   r5   ÚPathLiker   r4   r   r^   rQ   rL   r	   ri   Ústaticmethodr   rn   r}   r�   r�   r
   r   rš   r·   r¾   r³   rÖ   rÙ   Úintrå   Ú__static_attributes__Ú__classcell__)rB   s   @rC   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ð 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<ðà	÷ó rE   r&   c                 óh   • U R                  U5      nUR                  U5      nUR                  5         g)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)rd   r¯   Údelete_directory)r,   rV   Ú	directoryrž   r½   s        rC   rÈ   rÈ   õ  s2   € ð *×@Ñ@ÀÓKÐØ)×>Ñ>¸yÓIÐØ×%Ñ%Õ'rE   )9r   r   rì   r5   Ú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!   r9   Úazure.storage.filedatalaker"   r#   Ú1azure.storage.filedatalake._shared.authenticationr>   ÚModuleNotFoundErrorÚdependencies_loadedr&   rÈ   r—   rÓ   rE   rC   Ú<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