class_docstr: Dataclass containing a list of CommitOperation to commit at once.
  
  A [`MultiCommitStep`] is one atomic part of a [`MultiCommitStrategy`]. Each step is identified by its own
  deterministic ID based on the list of commit operations (hexadecimal sha256). ID is persistent between re-runs if
  the list of commits is kept the same.
class_docstr_tok: ["Dataclass","containing","a","list","of","CommitOperation","to","commit","at","once",".","A","[","`","MultiCommitStep","`","]","is","one","atomic","part","of","a","[","`","MultiCommitStrategy","`","]",".","Each","step","is","identified","by","its","own","deterministic","ID","based","on","the","list","of","commit","operations","(","hexadecimal","sha256",")",".","ID","is","persistent","between","re-runs","if","the","list","of","commits","is","kept","the","same","."]
docstr: Format a step for PR description.
  
  Formatting can be changed in the future as long as it is single line, starts with `- [ ]`/`- [x]` and contains
  `self.id`. Must be able to match `STEP_ID_REGEX`.
docstr_tok: ["Format","a","step","for","PR","description",".","Formatting","can","be","changed","in","the","future","as","long","as","it","is","single","line",",","starts","with","`","-","[","]","`","\/","`","-","[","x","]","`","and","contains","`","self.id","`",".","Must","be","able","to","match","`","STEP_ID_REGEX","`","."]
code: def __str__(self) -> str:
      """Format a step for PR description.
  
      Formatting can be changed in the future as long as it is single line, starts with `- [ ]`/`- [x]` and contains
      `self.id`. Must be able to match `STEP_ID_REGEX`.
      """
      additions = [
          op
          for op in self.operations
          if isinstance(op, CommitOperationAdd)
      ]
      file_deletions = [
          op
          for op in self.operations
          if isinstance(op, CommitOperationDelete) and not op.is_folder
      ]
      folder_deletions = [
          op
          for op in self.operations
          if isinstance(op, CommitOperationDelete) and op.is_folder
      ]
      if len(additions) > 0:
          return (
              f"- [{'x' if self.completed else ' '}] Upload {len(additions)} file(s) "
              f"totalling {_format_size(sum(add.upload_info.size for add in additions))}"
              f" ({self.id})"
          )
      else:
          return (
              f"- [{'x' if self.completed else ' '}] Delete {len(file_deletions)} file(s) and"
              f" {len(folder_deletions)} folder(s) ({self.id})"
          )
  
file_path: huggingface_hub/src/huggingface_hub/_multi_commits.py
imports: import re
  from dataclasses import dataclass, field
  from typing import TYPE_CHECKING, Iterable, List, Optional, Set, Tuple, Union
  from ._commit_api import CommitOperationAdd, CommitOperationDelete
  from .community import DiscussionWithDetails
  from .utils import experimental
  from .utils._cache_manager import _format_size
  from .utils.insecure_hashlib import sha256
label_desc: Use image node_id 2 for calling the MultiCommitStep obj's underlying member method code with example usage: obj.__str__() and returns: str, unknown, str, len, str, _format_size, str, self, str, str, unknown, str, len, str, len, str, self, str