code: def get_timestamp(path: str) -> datetime:
      if path.startswith("s3://"):
          return S3Config().get_s3_client().get_key(path).last_modified
      elif path.startswith("gs://"):
          # for gcs object
          # should PR to luigi
          bucket, obj = (
              GCSConfig().get_gcs_client()._path_to_bucket_and_key(path)
          )
          result = (
              GCSConfig()
              .get_gcs_client()
              .client.objects()
              .get(bucket=bucket, object=obj)
              .execute()
          )
          return result["updated"]
      else:
          raise
  
file_path: gokart/gokart/object_storage.py
imports: from datetime import datetime
  import luigi
  import luigi.contrib.gcs
  import luigi.contrib.s3
  from luigi.format import Format
  from gokart.gcs_config import GCSConfig
  from gokart.gcs_zip_client import GCSZipClient
  from gokart.s3_config import S3Config
  from gokart.s3_zip_client import S3ZipClient
  from gokart.zip_client import ZipClient
label_desc: Use image node_id 4 for calling the ObjectStorage obj's underlying member method code with example usage: obj.get_timestamp(path) and returns: S3Config, result