docs: def _generate_destination_for_source(self, local_path):
          # type: (Uploader, blobxfer.models.upload.LocalSourcePath) ->
          #        Tuple[blobxfer.operations.azure.StorageAccount,
          #        blobxfer.models.azure.StorageEntity)
          """Generate entities for source path
          :param Uploader self: this
          :param blobxfer.models.upload.LocalSourcePath local_path: local path
          :rtype: tuple
          :return: storage account, storage entity
          """
          # construct stripped destination path
          spath = local_path.relative_path
          # apply strip components
          if self._spec.options.strip_components > 0:
              _rparts = local_path.relative_path.parts
              _strip = min(
                  (len(_rparts) - 1, self._spec.options.strip_components)
              )
              if _strip > 0:
                  spath = pathlib.Path(*_rparts[_strip:])
          # create a storage entity for each destination
          for sa, cont, name, dpath in self._get_destination_paths():
              # if not renaming, form name from with spath
              if not self._spec.options.rename and not local_path.use_stdin:
                  name = str(name / spath)
              if blobxfer.util.is_none_or_empty(name):
                  raise ValueError(
                      ('invalid destination, must specify a container or '
                       'fileshare and remote file name: {}').format(dpath))
              # do not check for existing remote right now if striped
              # vectored io mode
              if (self._spec.options.vectored_io.distribution_mode ==
                      blobxfer.models.upload.
                      VectoredIoDistributionMode.Stripe):
                  ase = None
              else:
                  if sa.can_read_object:
                      ase = self._check_for_existing_remote(sa, cont, name)
                  else:
                      ase = None
              if ase is None:
                  # encryption metadata will be populated later, if required
                  ase = blobxfer.models.azure.StorageEntity(cont, ed=None)
                  ase.populate_from_local(
                      sa, cont, name, self._spec.options.mode,
                      self._spec.options.store_file_properties.cache_control)
                  if ase.mode == blobxfer.models.azure.StorageModes.Block:
                      ase.access_tier = self._spec.options.access_tier
              yield sa, ase