code: def stream_sync(self, report, timeout=120.0):
          
  
          done = AwaitableResponse()
          self.stream(report, callback=done.set_result)
          return done.wait(timeout)
docs: Send a report and wait for it to finish.
  
          This awaitable coroutine wraps VirtualIOTileDevice.stream() and turns
          the callback into an awaitable object.  The appropriate usage of this
          method is by calling it inside the event loop as:
  
          await device.stream_sync(data)
  
          Args:
              report (IOTileReport): The report that should be streamed.
              timeout (float): The maximum number of seconds to wait before
                  timing out.
  
          Returns:
              awaitable: An awaitable object with the result.
  
              The result will be True if the data was sent successfully
              or False if the data could not be sent in its entirety.
  
              When False is returned, there is no guarantee about how much of
              the data was sent, if any, just that it was not known to be
              successfully sent.