class_docstr: Common base class for all of DataLad's special remote implementations
class_docstr_tok: ["Common","base","class","for","all","of","DataLad","'s","special","remote","implementations"]
docstr: Indicates the current progress of the transfer (in bytes).
  
  May be repeated any number of times during the transfer process.
  
  Too frequent updates are wasteful but bear in mind that this is used
  both to display a progress meter for the user, and for
  ``annex.stalldetection``. So, sending an update on each 1% of the file
  may not be frequent enough, as it could appear to be a stall when
  transferring a large file.
  
  Parameters
  ----------
  progress : int
      The current progress of the transfer in bytes.
docstr_tok: ["Indicates","the","current","progress","of","the","transfer","(","in","bytes",")",".","May","be","repeated","any","number","of","times","during","the","transfer","process",".","Too","frequent","updates","are","wasteful","but","bear","in","mind","that","this","is","used","both","to","display","a","progress","meter","for","the","user",",","and","for","``","annex.stalldetection","``",".","So",",","sending","an","update","on","each","1","%","of","the","file","may","not","be","frequent","enough",",","as","it","could","appear","to","be","a","stall","when","transferring","a","large","file",".","Parameters","--","--","--","--","--","progress",":","int","The","current","progress","of","the","transfer","in","bytes","."]
code: def send_progress(self, progress):
      """Indicates the current progress of the transfer (in bytes).
  
      May be repeated any number of times during the transfer process.
  
      Too frequent updates are wasteful but bear in mind that this is used
      both to display a progress meter for the user, and for
      ``annex.stalldetection``. So, sending an update on each 1% of the file
      may not be frequent enough, as it could appear to be a stall when
      transferring a large file.
  
      Parameters
      ----------
      progress : int
          The current progress of the transfer in bytes.
      """
      # This method is called by AnnexSpecialRemoteProgressBar through an
      # obscure process that involves multiple layers of abstractions for
      # UIs, providers, downloaders, progressbars, which is only happening
      # within the environment of a running special remote process though
      # a combination of circumstances.
      #
      # The main purpose of this method is to have a place to leave this
      # comment within the code base of the special remotes, in order to
      # aid future souls having to sort this out.
      # (and to avoid having complex code make direct calls to internals
      # of this class, making things even more complex)
      self.annex.progress(progress)
  
file_path: datalad/datalad/customremotes/__init__.py
imports: from annexremote import ProtocolError, SpecialRemote, RemoteError
  from datalad.support.exceptions import format_exception_with_cause
  from datalad.ui import ui
label_desc: Use image node_id 3 for calling the SpecialRemote obj's underlying member method code with example usage: obj.send_progress(progress) without return types