Skip to content

Commit

Permalink
487 live tests (drivendataorg#491)
Browse files Browse the repository at this point in the history
* fix(az): catch HttpResponseError in _check_hns (drivendataorg#487)

* fix(az): catch HttpResponseError in _check_hns

* chore: update HISTORY.md

* format

* cast fallback

* review comment

---------

Co-authored-by: Jakub Kubík <[email protected]>
  • Loading branch information
2 people authored and fafnirZ committed Feb 11, 2025
1 parent b3b4b34 commit 8f47f72
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 12 deletions.
1 change: 1 addition & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

- Fixed `CloudPath(...) / other` to correctly attempt to fall back on `other`'s `__rtruediv__` implementation, in order to support classes that explicitly support the `/` with a `CloudPath` instance. Previously, this would always raise a `TypeError` if `other` were not a `str` or `PurePosixPath`. (PR [#479](https://github.com/drivendataorg/cloudpathlib/pull/479))
- Add `md5` property to `GSPath`, updated LocalGSPath to include `md5` property, updated mock_gs.MockBlob to include `md5_hash` property.
- Fixed an uncaught exception on Azure Gen2 storage accounts with HNS enabled when used with `DefaultAzureCredential`. (Issue [#486](https://github.com/drivendataorg/cloudpathlib/issues/486))

## v0.20.0 (2024-10-18)

Expand Down
36 changes: 25 additions & 11 deletions cloudpathlib/azure/azblobclient.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
from datetime import datetime, timedelta
import mimetypes
import os
from http import HTTPStatus
from pathlib import Path
from typing import Any, Callable, Dict, Iterable, Optional, Tuple, Union

try:
from typing import cast
except ImportError:
from typing_extensions import cast

from ..client import Client, register_client_class
from ..cloudpath import implementation_registry
Expand All @@ -13,7 +18,7 @@


try:
from azure.core.exceptions import ResourceNotFoundError
from azure.core.exceptions import HttpResponseError, ResourceNotFoundError
from azure.core.credentials import AzureNamedKeyCredential

from azure.storage.blob import (
Expand Down Expand Up @@ -202,20 +207,29 @@ def _check_hns(self, cloud_path: AzureBlobPath) -> Optional[bool]:
try:
account_info = self.service_client.get_account_information() # type: ignore
self._hns_enabled = account_info.get("is_hns_enabled", False) # type: ignore

# get_account_information() not supported with this credential; we have to fallback to
# checking if the root directory exists and is a has 'metadata': {'hdi_isfolder': 'true'}
except ResourceNotFoundError:
# get_account_information() not supported with this credential; we have to fallback to
# checking if the root directory exists and is a has 'metadata': {'hdi_isfolder': 'true'}
root_dir = self.service_client.get_blob_client(
container=cloud_path.container, blob="/"
)
self._hns_enabled = (
root_dir.exists()
and root_dir.get_blob_properties().metadata.get("hdi_isfolder", False)
== "true"
)
return self._check_hns_root_metadata(cloud_path)
except HttpResponseError as error:
if error.status_code == HTTPStatus.FORBIDDEN:
return self._check_hns_root_metadata(cloud_path)
else:
raise

return self._hns_enabled

def _check_hns_root_metadata(self, cloud_path: AzureBlobPath) -> bool:
root_dir = self.service_client.get_blob_client(container=cloud_path.container, blob="/")

self._hns_enabled = (
root_dir.exists()
and root_dir.get_blob_properties().metadata.get("hdi_isfolder", False) == "true"
)

return cast(bool, self._hns_enabled)

def _get_metadata(
self, cloud_path: AzureBlobPath
) -> Union["BlobProperties", "FileProperties", Dict[str, Any]]:
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ classifiers = [
]
requires-python = ">=3.8"
dependencies = [
"typing_extensions>4 ; python_version < '3.11'",
"typing-extensions>4 ; python_version < '3.11'",
]

[project.optional-dependencies]
Expand Down

0 comments on commit 8f47f72

Please sign in to comment.