docs: def _populate_from_list_files(self, creds, options, dry_run):
          # type: (SourcePath, StorageCredentials, Any, bool) -> StorageEntity
          """Internal generator for Azure remote files
          :param SourcePath self: this
          :param StorageCredentials creds: storage creds
          :param object options: download or synccopy options
          :param bool dry_run: dry run
          :rtype: StorageEntity
          :return: Azure storage entity object
          """
          store_raw_metadata = isinstance(
              options, blobxfer.models.options.SyncCopy)
          for _path in self._paths:
              rpath = str(_path)
              sa = creds.get_storage_account(self.lookup_storage_account(rpath))
              # ensure at least read permissions
              if not sa.can_read_object:
                  raise RuntimeError(
                      'unable to populate sources for remote path {} as '
                      'credential for storage account {} does not permit read '
                      'access'.format(rpath, sa.name))
              cont, dir = blobxfer.util.explode_azure_path(rpath)
              snapshot = None
              if dir is not None:
                  # parse out snapshot if part of url
                  a, b, snapshot = \
                      blobxfer.operations.azure.file.parse_file_path(dir)
                  # check if "dir" is a file or a vdir
                  chk = blobxfer.operations.azure.file.check_if_single_file(
                      sa.file_client, cont, dir)
                  if chk[0]:
                      dir = a
                  else:
                      if blobxfer.util.is_not_empty(a):
                          dir = '/'.join((a, b))
                      else:
                          dir = b
              if snapshot is None:
                  _, cont, snapshot = \
                      blobxfer.operations.azure.file.parse_file_path(cont)
              if sa.can_list_container_objects:
                  for file in blobxfer.operations.azure.file.list_files(
                          sa.file_client, cont, dir, options.recursive,
                          snapshot=snapshot):
                      if not self._inclusion_check(file.name):
                          if dry_run:
                              logger.info(
                                  '[DRY RUN] skipping due to filters: '
                                  '{}/{}'.format(cont, file.name))
                          continue
                      for ase in self._handle_vectored_io_stripe(
                              creds, options, store_raw_metadata, sa, file, True,
                              cont, dir=None, file_snapshot=snapshot):
                          if ase is None:
                              continue
                          yield ase
              else:
                  file = blobxfer.operations.azure.file.get_file_properties(
                      sa.file_client, cont, dir, snapshot=snapshot)
                  if file is None:
                      logger.error(
                          'file {} not found in storage account {}'.format(
                              rpath, sa.name))
                      return
                  if not self._inclusion_check(file.name):
                      if dry_run:
                          logger.info(
                              '[DRY RUN] skipping due to filters: {}/{}'.format(
                                  cont, file.name))
                      return
                  for ase in self._handle_vectored_io_stripe(
                          creds, options, store_raw_metadata, sa, file, True,
                          cont, dir=None, file_snapshot=snapshot):
                      if ase is None:
                          continue
                      yield ase