class_docstr: Wrapper around Progress, to make it async iterable.
  
  httpx, for streaming uploads, requires the data source to be an async iterable.
  If we pass in a sync iterable (like a bare `Progress` instance), httpx will
  get confused, think we're trying to make a synchronous request, and raise.
  So we need this wrapper class to be an async iterable but *not* a sync iterable.
class_docstr_tok: ["Wrapper","around","Progress",",","to","make","it","async","iterable",".","httpx",",","for","streaming","uploads",",","requires","the","data","source","to","be","an","async","iterable",".","If","we","pass","in","a","sync","iterable","(","like","a","bare","`","Progress","`","instance",")",",","httpx","will","get","confused",",","think","we","'re","trying","to","make","a","synchronous","request",",","and","raise",".","So","we","need","this","wrapper","class","to","be","an","async","iterable","but","*","not","*","a","sync","iterable","."]
code: def __len__(self):
      return len(self._progress)
  
file_path: wandb/wandb/sdk/internal/progress.py
imports: import os
  import sys
  from typing import IO, TYPE_CHECKING, Optional
  from wandb.errors import CommError
label_desc: Use image node_id 3 for calling the AsyncProgress obj's underlying member method code with example usage: obj.__len__() and returns: len