class_docstr: Performs storage operations on artifacts in the access-controlled
  `dbfs:/databricks/mlflow-tracking` location.
  
  Signed access URIs for S3 / Azure Blob Storage are fetched from the MLflow service and used to
  read and write files from/to this location.
  
  The artifact_uri is expected to be of the form
  dbfs:/databricks/mlflow-tracking/<EXP_ID>/<RUN_ID>/
class_docstr_tok: ["Performs","storage","operations","on","artifacts","in","the","access-controlled","`","dbfs",":","\/databricks\/mlflow-tracking","`","location",".","Signed","access","URIs","for","S3","\/","Azure","Blob","Storage","are","fetched","from","the","MLflow","service","and","used","to","read","and","write","files","from\/to","this","location",".","The","artifact_uri","is","expected","to","be","of","the","form","dbfs",":","\/databricks\/mlflow-tracking\/","<","EXP_ID",">","\/","<","RUN_ID",">","\/"]
code: def _upload_part_retry(
      self,
      cred_info,
      upload_id,
      part_number,
      local_file,
      start_byte,
      size,
  ):
      data = read_chunk(local_file, size, start_byte)
      try:
          return self._upload_part(cred_info, data)
      except requests.HTTPError as e:
          if e.response.status_code not in (401, 403):
              raise e
          _logger.info(
              "Failed to authorize request, possibly due to credential expiration."
              " Refreshing credentials and trying again..."
          )
          resp = self._get_presigned_upload_part_url(
              cred_info.run_id, cred_info.path, upload_id, part_number
          )
          return self._upload_part(resp.upload_credential_info, data)
  
imports: import base64
  import logging
  import os
  import posixpath
  import uuid
  import requests
  import mlflow.tracking
  from mlflow.azure.client import patch_adls_file_upload, patch_adls_flush, put_adls_file_creation, put_block, put_block_list
  from mlflow.entities import FileInfo
  from mlflow.environment_variables import MLFLOW_MULTIPART_DOWNLOAD_CHUNK_SIZE, MLFLOW_MULTIPART_UPLOAD_CHUNK_SIZE
  from mlflow.exceptions import MlflowException
  from mlflow.protos.databricks_artifacts_pb2 import ArtifactCredentialType, CompleteMultipartUpload, CreateMultipartUpload, DatabricksMlflowArtifactsService, GetCredentialsForRead, GetCredentialsForWrite, GetPresignedUploadPartUrl, PartEtag
  from mlflow.protos.databricks_pb2 import INTERNAL_ERROR, INVALID_PARAMETER_VALUE
  from mlflow.protos.service_pb2 import GetRun, ListArtifacts, MlflowService
  from mlflow.store.artifact.cloud_artifact_repo import CloudArtifactRepository, _complete_futures, _compute_num_chunks
  from mlflow.utils import chunk_list
  from mlflow.utils.databricks_utils import get_databricks_host_creds
  from mlflow.utils.file_utils import download_file_using_http_uri, read_chunk
  from mlflow.utils.proto_json_utils import message_to_json
  from mlflow.utils.request_utils import cloud_storage_http_request
  from mlflow.utils.rest_utils import _REST_API_PATH_PREFIX, augmented_raise_for_status, call_endpoint, extract_api_info_for_service
  from mlflow.utils.uri import extract_and_normalize_path, get_databricks_profile_uri_from_artifact_uri, is_databricks_acled_artifacts_uri, is_valid_dbfs_uri, remove_databricks_profile_info_from_artifact_uri
label_desc: Use image node_id 19 for calling the DatabricksArtifactRepository obj's underlying member method code with example usage: obj._upload_part_retry(cred_info, upload_id, part_number, local_file, start_byte, size) and returns: self, self