docstr: Key MUST be a fully qualified path.  gs://<bucket_name>/b/l/o/b/n/a/m/e
docstr_tok: ["Key","MUST","be","a","fully","qualified","path",".","gs",":","\/\/","<","bucket_name",">","\/b\/l\/o\/b\/n\/a\/m\/e"]
code: def put(self, key, obj, overwrite=True):
      """Key MUST be a fully qualified path.  gs://<bucket_name>/b/l/o/b/n/a/m/e"""
      storage, subpath = self._get_storage_backend_and_subpath(key)
      storage.save_bytes(
          [(subpath, io.BytesIO(obj))], overwrite=overwrite
      )
      return key
  
imports: import io
  import os
  import shutil
  import uuid
  from tempfile import mkdtemp
  from metaflow.exception import MetaflowException, MetaflowInternalError
label_desc: Use image node_id 7 for calling the GS obj's underlying member method code with example usage: obj.put(key, obj, overwrite) and returns: key