docs: def dumps(self) -> str:
          """Writes the step information to an HTML-formatted string"""
          code_file_path = os.path.join(
              self.project.source_directory,
              self.filename
          )
          code = dict(
              filename=self.filename,
              path=code_file_path,
              code=render.code_file(code_file_path)
          )
  
          if not self.is_running:
              # If no longer running, make sure to flush the stdout buffer so
              # any print statements at the end of the step get included in
              # the body
              self.report.flush_stdout()
  
          # Create a copy of the body for dumping
          body = self.report.body[:]
  
          if self.is_running:
              # If still running add a temporary copy of anything not flushed
              # from the stdout buffer to the copy of the body for display. Do
              # not flush the buffer though until the step is done running or
              # it gets flushed by another display call.
              body.append(self.report.read_stdout())
  
          body = ''.join(body)
  
          has_body = len(body) > 0 and (
              body.find('<div') != -1 or
              body.find('<span') != -1 or
              body.find('<p') != -1 or
              body.find('<pre') != -1 or
              body.find('<h') != -1 or
              body.find('<ol') != -1 or
              body.find('<ul') != -1 or
              body.find('<li') != -1
          )
  
          std_err = (
              self.report.read_stderr()
              if self.is_running else
              self.report.flush_stderr()
          ).strip('\n').rstrip()
  
          # The step will be visible in the display if any of the following
          # conditions are true.
          is_visible = self.is_visible or self.is_running or self.error
  
          dom = templating.render_template(
              'step-body.html',
              last_display_update=self.report.last_update_time,
              elapsed_time=self.get_elapsed_timestamp(),
              code=code,
              body=body,
              has_body=has_body,
              id=self.definition.name,
              title=self.report.title,
              subtitle=self.report.subtitle,
              summary=self.report.summary,
              error=self.error,
              index=self.index,
              is_running=self.is_running,
              is_visible=is_visible,
              progress_message=self.progress_message,
              progress=int(round(max(0, min(100, 100 * self.progress)))),
              sub_progress_message=self.sub_progress_message,
              sub_progress=int(round(max(0, min(100, 100 * self.sub_progress)))),
              std_err=std_err
          )
  
          if not self.is_running:
              self.dom = dom
          return dom