code: def get_azure_blob_service_client(
      credential=None,
      credential_is_cacheable=False,
      max_single_get_size=AZURE_CLIENT_MAX_SINGLE_GET_SIZE_MB
      * BYTES_IN_MB,
      max_single_put_size=AZURE_CLIENT_MAX_SINGLE_PUT_SIZE_MB
      * BYTES_IN_MB,
      max_chunk_get_size=AZURE_CLIENT_MAX_CHUNK_GET_SIZE_MB
      * BYTES_IN_MB,
      connection_data_block_size=AZURE_CLIENT_CONNECTION_DATA_BLOCK_SIZE,
  ):
      """Returns a azure.storage.blob.BlobServiceClient.
  
      The value adds are:
      - connection caching (see _ClientCache)
      - auto storage account URL detection
      - auto credential handling (pull SAS token from environment, OR DefaultAzureCredential)
      - sensible default values for Azure SDK tunables
      """
      if not AZURE_STORAGE_BLOB_SERVICE_ENDPOINT:
          raise MetaflowException(
              msg="Must configure METAFLOW_AZURE_STORAGE_BLOB_SERVICE_ENDPOINT"
          )
      blob_service_endpoint = AZURE_STORAGE_BLOB_SERVICE_ENDPOINT
  
      if not credential:
          credential = create_cacheable_default_azure_credentials()
          credential_is_cacheable = True
  
      if not credential_is_cacheable:
          return _create_blob_service_client(
              blob_service_endpoint,
              credential=credential,
              max_single_put_size=max_single_put_size,
              max_single_get_size=max_single_get_size,
              max_chunk_get_size=max_chunk_get_size,
              connection_data_block_size=connection_data_block_size,
              # BlobServiceClient accepts many more kwargs. We can add passthroughs as/when needed.
          )
  
      return _ClientCache.get(
          blob_service_endpoint,
          credential=credential,
          max_single_put_size=max_single_put_size,
          max_single_get_size=max_single_get_size,
          max_chunk_get_size=max_chunk_get_size,
          connection_data_block_size=connection_data_block_size,
      )
  
file_path: metaflow/metaflow/plugins/azure/blob_service_client_factory.py
imports: from metaflow.exception import MetaflowException
  from metaflow.metaflow_config import AZURE_STORAGE_BLOB_SERVICE_ENDPOINT
  from metaflow.plugins.azure.azure_utils import create_cacheable_default_azure_credentials, check_azure_deps
  import os
  import threading
label_desc: Use image node_id 1 for calling a global function with example usage: get_azure_blob_service_client(credential, credential_is_cacheable, max_single_get_size, max_single_put_size, max_chunk_get_size, connection_data_block_size) and returns: _ClientCache, _create_blob_service_client