code: def handle_cursor(cls, cursor, query, session):
          
          logging.info('Polling the cursor for progress')
          polled = cursor.poll()
          # poll returns dict -- JSON status information or ``None``
          # if the query is done
          # https://github.com/dropbox/PyHive/blob/
          # b34bdbf51378b3979eaf5eca9e956f06ddc36ca0/pyhive/presto.py#L178
          while polled:
              # Update the object and wait for the kill signal.
              stats = polled.get('stats', {})
  
              query = session.query(type(query)).filter_by(id=query.id).one()
              if query.status in [QueryStatus.STOPPED, QueryStatus.TIMED_OUT]:
                  cursor.cancel()
                  break
  
              if stats:
                  state = stats.get('state')
  
                  # if already finished, then stop polling
                  if state == 'FINISHED':
                      break
  
                  completed_splits = float(stats.get('completedSplits'))
                  total_splits = float(stats.get('totalSplits'))
                  if total_splits and completed_splits:
                      progress = 100 * (completed_splits / total_splits)
                      logging.info(
                          'Query progress: {} / {} '
                          'splits'.format(completed_splits, total_splits))
                      if progress > query.progress:
                          query.progress = progress
                      session.commit()
              time.sleep(1)
              logging.info('Polling the cursor for progress')
              polled = cursor.poll()
docs: Updates progress information