code: def _list(self, storage_path: str) -> Generator[str, None, None]:
      logger.debug(
          f"Listing keys in bucket: '{self.bucket_name}' with storage_path: '{storage_path}'"
      )
      prefix = urllib.parse.urlparse(storage_path).path.lstrip("/")
      blobs = self.client.list_blobs(self.bucket_name, prefix=prefix)
  
      for blob in blobs:
          filepath, mtime = blob.name, blob.updated
          prev_mtime = self._file_records.get(filepath)
          if prev_mtime is not None and prev_mtime >= mtime:
              continue
          self._file_records[filepath] = mtime
          yield blob.name
  
file_path: determined/harness/determined/tensorboard/fetchers/gcs.py
imports: import datetime
  import logging
  import os
  import posixpath
  import urllib
  from typing import Any, Callable, Dict, Generator, List
  from .base import Fetcher
label_desc: Use image node_id 2 for calling the GCSFetcher obj's underlying member method code with example usage: obj._list(storage_path) without return types