You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In this code block, StorageClient() succeeds because CoLab notebooks automatically use the user's default credentials if they're logged in.
You end up getting a RefreshError:
---------------------------------------------------------------------------
RefreshError Traceback (most recent call last)
[<ipython-input-33-10663fe929d6>](https://localhost:8080/#) in <cell line: 0>()
11 from cloudpathlib import GSPath
12 path = GSPath("gs://some-public-bucket/some-public.file")
---> 13 path.download_to(".")
19 frames
[/usr/local/lib/python3.11/dist-packages/cloudpathlib/cloudpath.py](https://localhost:8080/#) in download_to(self, destination)
1048 destination = Path(destination)
1049
-> 1050 if not self.exists():
1051 raise CloudPathNotExistsError(f"Cannot download because path does not exist: {self}")
1052
[/usr/local/lib/python3.11/dist-packages/cloudpathlib/cloudpath.py](https://localhost:8080/#) in exists(self)
429
430 def exists(self) -> bool:
--> 431 return self.client._exists(self)
432
433 def is_dir(self, follow_symlinks=True) -> bool:
[/usr/local/lib/python3.11/dist-packages/cloudpathlib/gs/gsclient.py](https://localhost:8080/#) in _exists(self, cloud_path)
173 returnself.client.bucket(cloud_path.bucket).exists()
174
--> 175 return self._is_file_or_dir(cloud_path) in ["file", "dir"]
176
177 def _list_dir(self, cloud_path: GSPath, recursive=False) -> Iterable[Tuple[GSPath, bool]]:
[/usr/local/lib/python3.11/dist-packages/cloudpathlib/gs/gsclient.py](https://localhost:8080/#) in _is_file_or_dir(self, cloud_path)
150
151 bucket = self.client.bucket(cloud_path.bucket)
--> 152 blob = bucket.get_blob(cloud_path.blob)
153
154 if blob is not None:
[/usr/lib/python3.11/contextlib.py](https://localhost:8080/#) in inner(*args, **kwds)
79 def inner(*args, **kwds):
80 with self._recreate_cm():
---> 81 return func(*args, **kwds)
82 return inner
83
[/usr/local/lib/python3.11/dist-packages/google/cloud/storage/bucket.py](https://localhost:8080/#) in get_blob(self, blob_name, client, encryption_key, generation, if_etag_match, if_etag_not_match, if_generation_match, if_generation_not_match, if_metageneration_match, if_metageneration_not_match, timeout, retry, soft_deleted, **kwargs)
1341 # Batch.finish() is called, the resulting `NotFound` will be
1342 # raised.
-> 1343 blob.reload(
1344 client=client,
1345 timeout=timeout,
[/usr/local/lib/python3.11/dist-packages/google/cloud/storage/_helpers.py](https://localhost:8080/#) in reload(self, client, projection, if_etag_match, if_etag_not_match, if_generation_match, if_generation_not_match, if_metageneration_match, if_metageneration_not_match, timeout, retry, soft_deleted)
301 headers, if_etag_match=if_etag_match, if_etag_not_match=if_etag_not_match
302 )
--> 303 api_response = client._get_resource(
304 self.path,
305 query_params=query_params,
[/usr/local/lib/python3.11/dist-packages/google/cloud/storage/client.py](https://localhost:8080/#) in _get_resource(self, path, query_params, headers, timeout, retry, _target_object)
472 If the bucket is not found.
473 """--> 474 return self._connection.api_request( 475 method="GET", 476 path=path,[/usr/local/lib/python3.11/dist-packages/google/cloud/storage/_http.py](https://localhost:8080/#) in api_request(self, *args, **kwargs) 88 if retry: 89 call = retry(call)---> 90 return call()[/usr/local/lib/python3.11/dist-packages/google/api_core/retry/retry_unary.py](https://localhost:8080/#) in retry_wrapped_func(*args, **kwargs) 291 self._initial, self._maximum, multiplier=self._multiplier 292 )--> 293 return retry_target( 294 target, 295 self._predicate,[/usr/local/lib/python3.11/dist-packages/google/api_core/retry/retry_unary.py](https://localhost:8080/#) in retry_target(target, predicate, sleep_generator, timeout, on_error, exception_factory, **kwargs) 151 except Exception as exc: 152 # defer to shared logic for handling errors--> 153 _retry_error_helper( 154 exc, 155 deadline,[/usr/local/lib/python3.11/dist-packages/google/api_core/retry/retry_base.py](https://localhost:8080/#) in _retry_error_helper(exc, deadline, next_sleep, error_list, predicate_fn, on_error_fn, exc_factory_fn, original_timeout) 210 original_timeout, 211 )--> 212 raise final_exc from source_exc 213 if on_error_fn is not None: 214 on_error_fn(exc)[/usr/local/lib/python3.11/dist-packages/google/api_core/retry/retry_unary.py](https://localhost:8080/#) in retry_target(target, predicate, sleep_generator, timeout, on_error, exception_factory, **kwargs) 142 for sleep in sleep_generator: 143 try:--> 144 result = target() 145 if inspect.isawaitable(result): 146 warnings.warn(_ASYNC_RETRY_WARNING)[/usr/local/lib/python3.11/dist-packages/google/cloud/_http/__init__.py](https://localhost:8080/#) in api_request(self, method, path, query_params, data, content_type, headers, api_base_url, api_version, expect_json, _target_object, timeout, extra_api_info) 480 content_type = "application/json" 481 --> 482 response = self._make_request( 483 method=method, 484 url=url,[/usr/local/lib/python3.11/dist-packages/google/cloud/_http/__init__.py](https://localhost:8080/#) in _make_request(self, method, url, data, content_type, headers, target_object, timeout, extra_api_info) 339 headers["User-Agent"] = self.user_agent 340 --> 341 return self._do_request( 342 method, url, headers, data, target_object, timeout=timeout 343 )[/usr/local/lib/python3.11/dist-packages/google/cloud/_http/__init__.py](https://localhost:8080/#) in _do_request(self, method, url, headers, data, target_object, timeout) 377 :returns: The HTTP response. 378 """
--> 379 return self.http.request(
380 url=url, method=method, headers=headers, data=data, timeout=timeout
381 )
[/usr/local/lib/python3.11/dist-packages/google/auth/transport/requests.py](https://localhost:8080/#) in request(self, method, url, data, headers, max_allowed_time, timeout, **kwargs)
535
536 with TimeoutGuard(remaining_time) as guard:
--> 537 self.credentials.before_request(auth_request, method, url, request_headers)
538 remaining_time = guard.remaining_timeout
539
[/usr/local/lib/python3.11/dist-packages/google/auth/credentials.py](https://localhost:8080/#) in before_request(self, request, method, url, headers)
226 self._non_blocking_refresh(request)
227 else:
--> 228 self._blocking_refresh(request)
229
230 metrics.add_metric_header(headers, self._metric_header_for_usage())
[/usr/local/lib/python3.11/dist-packages/google/auth/credentials.py](https://localhost:8080/#) in _blocking_refresh(self, request)
189 def _blocking_refresh(self, request):
190 if not self.valid:
--> 191 self.refresh(request)
192
193 def _non_blocking_refresh(self, request):
[/usr/local/lib/python3.11/dist-packages/google/auth/compute_engine/credentials.py](https://localhost:8080/#) in refresh(self, request)
132 except exceptions.TransportError as caught_exc:
133 new_exc = exceptions.RefreshError(caught_exc)
--> 134 raise new_exc from caught_exc
135
136 @property
RefreshError: ("Failed to retrieve http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/?recursive=true from the Google Compute Engine metadata service. Status: 404 Response:\nb''", <google.auth.transport.requests._Response object at 0x7a5ed126d850>)
A few possible options here (or can close as #wontfix)
There's a workaround to create an anonymous client manually. We may want to document this somehow, or warn the user in Colab environments / in the docs that this might be an issue
cloudpathlib/cloudpathlib/gs/gsclient.py
Lines 103 to 107 in f98f670
In this code block,
StorageClient()
succeeds because CoLab notebooks automatically use the user's default credentials if they're logged in.You end up getting a
RefreshError
:A few possible options here (or can close as #wontfix)
RefreshError
in addition to aDefaultCredentialsError
as a condition to attempt creating an anonymous clientThe text was updated successfully, but these errors were encountered: