class_docstr: Stores artifacts on Azure Blob Storage.
  
  This repository is used with URIs of the form
  ``wasbs://<container-name>@<ystorage-account-name>.blob.core.windows.net/<path>``,
  following the same URI scheme as Hadoop on Azure blob storage. It requires either that:
  - Azure storage connection string is in the env var ``AZURE_STORAGE_CONNECTION_STRING``
  - Azure storage access key is in the env var ``AZURE_STORAGE_ACCESS_KEY``
  - DefaultAzureCredential is configured
class_docstr_tok: ["Stores","artifacts","on","Azure","Blob","Storage",".","This","repository","is","used","with","URIs","of","the","form","``","wasbs",":","\/\/","<","container-name",">","@","<","ystorage-account-name",">",".blob.core.windows.net\/","<","path",">","``",",","following","the","same","URI","scheme","as","Hadoop","on","Azure","blob","storage",".","It","requires","either","that",":","-","Azure","storage","connection","string","is","in","the","env","var","``","AZURE_STORAGE_CONNECTION_STRING","``","-","Azure","storage","access","key","is","in","the","env","var","``","AZURE_STORAGE_ACCESS_KEY","``","-","DefaultAzureCredential","is","configured"]
code: def list_artifacts(self, path=None):
      # Newer versions of `azure-storage-blob` (>= 12.4.0) provide a public
      # `azure.storage.blob.BlobPrefix` object to signify that a blob is a directory,
      # while older versions only expose this API internally as
      # `azure.storage.blob._models.BlobPrefix`
      try:
          from azure.storage.blob import BlobPrefix
      except ImportError:
          from azure.storage.blob._models import BlobPrefix
  
      def is_dir(result):
          return isinstance(result, BlobPrefix)
  
      (container, _, artifact_path, _) = self.parse_wasbs_uri(
          self.artifact_uri
      )
      container_client = self.client.get_container_client(container)
      dest_path = artifact_path
      if path:
          dest_path = posixpath.join(dest_path, path)
      infos = []
      prefix = dest_path if dest_path.endswith("/") else dest_path + "/"
      results = container_client.walk_blobs(name_starts_with=prefix)
  
      for result in results:
          if (
              dest_path == result.name
          ):  # result isn't actually a child of the path we're interested in, so skip it
              continue
  
          if not result.name.startswith(artifact_path):
              raise MlflowException(
                  "The name of the listed Azure blob does not begin with the specified"
                  f" artifact path. Artifact path: {artifact_path}. Blob name: {result.name}"
              )
  
          if is_dir(result):
              subdir = posixpath.relpath(
                  path=result.name, start=artifact_path
              )
              if subdir.endswith("/"):
                  subdir = subdir[:-1]
              infos.append(
                  FileInfo(subdir, is_dir=True, file_size=None)
              )
          else:  # Just a plain old blob
              file_name = posixpath.relpath(
                  path=result.name, start=artifact_path
              )
              infos.append(
                  FileInfo(
                      file_name, is_dir=False, file_size=result.size
                  )
              )
  
      # The list_artifacts API expects us to return an empty list if the
      # the path references a single file.
      rel_path = dest_path[len(artifact_path) + 1 :]
      if (
          (len(infos) == 1)
          and not infos[0].is_dir
          and (infos[0].path == rel_path)
      ):
          return []
      return sorted(infos, key=lambda f: f.path)
  
imports: import base64
  import datetime
  import os
  import posixpath
  import re
  import urllib.parse
  from typing import Union
  from mlflow.entities import FileInfo
  from mlflow.entities.multipart_upload import CreateMultipartUploadResponse, MultipartUploadCredential
  from mlflow.environment_variables import MLFLOW_ARTIFACT_UPLOAD_DOWNLOAD_TIMEOUT
  from mlflow.exceptions import MlflowException
  from mlflow.store.artifact.artifact_repo import ArtifactRepository, MultipartUploadMixin
  from mlflow.tracking._tracking_service.utils import _get_default_host_creds
label_desc: Use image node_id 5 for calling the AzureBlobArtifactRepository obj's underlying member method code with example usage: obj.list_artifacts(path) and returns: sorted, isinstance, list