@@ -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