def handle_cursor(cls, cursor, query, session):
        """Updates progress information"""
        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()
def handle_cursor ( cls , cursor , query , session ) : logging . info ( 'Polling the cursor for progress' ) polled = cursor . poll ( ) while polled : 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 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 ( )
Updates progress information