Skip to content

Commit 57682ca

Browse files
authored
fix: _get_bucket_type compatible for different tos package (#356)
1 parent fc1022d commit 57682ca

1 file changed

Lines changed: 44 additions & 4 deletions

File tree

tosfs/core.py

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2277,16 +2277,56 @@ def _split_path(self, path: str) -> Tuple[str, str, Optional[str]]:
22772277
version_id if self.version_aware and version_id else None,
22782278
)
22792279

2280+
@staticmethod
2281+
def _extract_bucket_type(bucket_type_resp: Any) -> Optional[str]:
2282+
if bucket_type_resp is None:
2283+
return None
2284+
2285+
# old tos sdk: directly returns str
2286+
if isinstance(bucket_type_resp, str):
2287+
return bucket_type_resp
2288+
2289+
# new tos sdk: GetBucketTypeOutput / HeadBucketOutput
2290+
bucket_type = getattr(bucket_type_resp, "bucket_type", None)
2291+
if bucket_type:
2292+
return bucket_type
2293+
2294+
# possible newer shape: GetBucketInfoOutput.bucket_info.bucket_type
2295+
bucket_info = getattr(bucket_type_resp, "bucket_info", None)
2296+
if bucket_info is not None:
2297+
return getattr(bucket_info, "bucket_type", None)
2298+
2299+
return None
2300+
22802301
def _get_bucket_type(self, bucket: str) -> str:
2281-
bucket_type = retryable_func_executor(
2282-
lambda: self.tos_client._get_bucket_type(bucket),
2283-
max_retry_num=self.max_retry_num,
2284-
)
2302+
bucket_type_resp: Any
2303+
2304+
get_bucket_type = getattr(self.tos_client, "get_bucket_type", None)
2305+
legacy_get_bucket_type = getattr(self.tos_client, "_get_bucket_type", None)
2306+
2307+
if callable(get_bucket_type):
2308+
bucket_type_resp = retryable_func_executor(
2309+
lambda: get_bucket_type(bucket),
2310+
max_retry_num=self.max_retry_num,
2311+
)
2312+
elif callable(legacy_get_bucket_type):
2313+
bucket_type_resp = retryable_func_executor(
2314+
lambda: legacy_get_bucket_type(bucket),
2315+
max_retry_num=self.max_retry_num,
2316+
)
2317+
else:
2318+
bucket_type_resp = retryable_func_executor(
2319+
lambda: self.tos_client.head_bucket(bucket),
2320+
max_retry_num=self.max_retry_num,
2321+
)
2322+
2323+
bucket_type = self._extract_bucket_type(bucket_type_resp)
22852324
if not bucket_type:
22862325
return TOS_BUCKET_TYPE_FNS
22872326

22882327
return bucket_type
22892328

2329+
22902330
def _is_hns_bucket(self, bucket: str) -> bool:
22912331
return self._get_bucket_type(bucket) == TOS_BUCKET_TYPE_HNS
22922332

0 commit comments

Comments
 (0)