docs: def _finalize_azure_file(self, ud, metadata):
          # type: (Uploader, blobxfer.models.upload.Descriptor, dict) -> None
          """Finalize Azure File
          :param Uploader self: this
          :param blobxfer.models.upload.Descriptor ud: upload descriptor
          :param dict metadata: metadata dict
          """
          # set md5 file property if required
          if ud.requires_non_encrypted_md5_put:
              digest = blobxfer.util.base64_encode_as_string(ud.md5.digest())
          else:
              digest = None
          if digest is not None or ud.entity.cache_control is not None:
              blobxfer.operations.azure.file.set_file_properties(
                  ud.entity, digest)
              if blobxfer.util.is_not_empty(ud.entity.replica_targets):
                  for ase in ud.entity.replica_targets:
                      blobxfer.operations.azure.file.set_file_properties(
                          ase, digest)
          # set file metadata if needed
          if blobxfer.util.is_not_empty(metadata):
              blobxfer.operations.azure.file.set_file_metadata(
                  ud.entity, metadata)
              if blobxfer.util.is_not_empty(ud.entity.replica_targets):
                  for ase in ud.entity.replica_targets:
                      blobxfer.operations.azure.file.set_file_metadata(
                          ase, metadata)