docs: def populate_from_path(bucket, source, checksum=True, key_prefix='',
                         chunk_size=None):
      """Populate a ``bucket`` from all files in path.
  
      :param bucket: The bucket (instance or id) to create the object in.
      :param source: The file or directory path.
      :param checksum: If ``True`` then a MD5 checksum will be computed for each
          file. (Default: ``True``)
      :param key_prefix: The key prefix for the bucket.
      :param chunk_size: Chunk size to read from file.
      :returns: A iterator for all
          :class:`invenio_files_rest.models.ObjectVersion` instances.
      """
      from .models import FileInstance, ObjectVersion
  
      def create_file(key, path):
          """Create new ``ObjectVersion`` from path or existing ``FileInstance``.
  
          It checks MD5 checksum and size of existing ``FileInstance``s.
          """
          key = key_prefix + key
  
          if checksum:
              file_checksum = compute_md5_checksum(
                      open(path, 'rb'), chunk_size=chunk_size)
              file_instance = FileInstance.query.filter_by(
                  checksum=file_checksum, size=os.path.getsize(path)
              ).first()
              if file_instance:
                  return ObjectVersion.create(
                      bucket, key, _file_id=file_instance.id
                  )
          return ObjectVersion.create(bucket, key, stream=open(path, 'rb'))
  
      if os.path.isfile(source):
          yield create_file(os.path.basename(source), source)
      else:
          for root, dirs, files in os.walk(source, topdown=False):
              for name in files:
                  filename = os.path.join(root, name)
                  assert filename.startswith(source)
                  parts = [p for p in filename[len(source):].split(os.sep) if p]
                  yield create_file('/'.join(parts), os.path.join(root, name))