class_docstr: Use the Google Cloud connection to interact with Google Cloud Storage.
class_docstr_tok: ["Use","the","Google","Cloud","connection","to","interact","with","Google","Cloud","Storage","."]
docstr: Composes a list of existing object into a new object in the same storage bucket_name.
  
  Currently it only supports up to 32 objects that can be concatenated
  in a single operation
  
  https://cloud.google.com/storage/docs/json_api/v1/objects/compose
  
  :param bucket_name: The name of the bucket containing the source objects.
      This is also the same bucket to store the composed destination object.
  :param source_objects: The list of source objects that will be composed
      into a single object.
  :param destination_object: The path of the object if given.
docstr_tok: ["Composes","a","list","of","existing","object","into","a","new","object","in","the","same","storage","bucket_name",".","Currently","it","only","supports","up","to","32","objects","that","can","be","concatenated","in","a","single","operation","https",":","\/\/cloud.google.com\/storage\/docs\/json_api\/v1\/objects\/compose",":","param","bucket_name",":","The","name","of","the","bucket","containing","the","source","objects",".","This","is","also","the","same","bucket","to","store","the","composed","destination","object",".",":","param","source_objects",":","The","list","of","source","objects","that","will","be","composed","into","a","single","object",".",":","param","destination_object",":","The","path","of","the","object","if","given","."]
code: def compose(
      self,
      bucket_name: str,
      source_objects: List[str],
      destination_object: str,
  ) -> None:
      """
      Composes a list of existing object into a new object in the same storage bucket_name.
  
      Currently it only supports up to 32 objects that can be concatenated
      in a single operation
  
      https://cloud.google.com/storage/docs/json_api/v1/objects/compose
  
      :param bucket_name: The name of the bucket containing the source objects.
          This is also the same bucket to store the composed destination object.
      :param source_objects: The list of source objects that will be composed
          into a single object.
      :param destination_object: The path of the object if given.
      """
      if not source_objects:
          raise ValueError("source_objects cannot be empty.")
  
      if not bucket_name or not destination_object:
          raise ValueError(
              "bucket_name and destination_object cannot be empty."
          )
  
      self.log.info(
          "Composing %s to %s in the bucket %s",
          source_objects,
          destination_object,
          bucket_name,
      )
      client = self.get_conn()
      bucket = client.bucket(bucket_name)
      destination_blob = bucket.blob(destination_object)
      destination_blob.compose(
          sources=[
              bucket.blob(blob_name=source_object)
              for source_object in source_objects
          ]
      )
  
      self.log.info("Completed successfully.")
  
imports: from __future__ import annotations
  import functools
  import gzip
  import json
  import os
  import shutil
  import time
  import warnings
  from contextlib import contextmanager
  from functools import partial
  from io import BytesIO
  from tempfile import NamedTemporaryFile
  from typing import IO, TYPE_CHECKING, Any, Callable, Generator, Sequence, TypeVar, cast, overload
  from urllib.parse import urlsplit
  from gcloud.aio.storage import Storage
  from google.api_core.exceptions import GoogleAPICallError, NotFound
  from google.cloud import storage
  from google.cloud.exceptions import GoogleCloudError
  from google.cloud.storage.retry import DEFAULT_RETRY
  from requests import Session
  from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning
  from airflow.providers.google.cloud.utils.helpers import normalize_directory_path
  from airflow.providers.google.common.consts import CLIENT_INFO
  from airflow.providers.google.common.hooks.base_google import GoogleBaseAsyncHook, GoogleBaseHook
  from airflow.typing_compat import ParamSpec
  from airflow.utils import timezone
  from airflow.version import version
label_desc: Use image node_id 30 for calling the GCSHook obj's underlying member method code with example usage: obj.compose(bucket_name, source_objects, destination_object) without return types