This method will not return until the job is either complete or has
        reached an error state. This queries the server periodically to check
        for an update in status.

def wait_until_done(self):
        """
        This method will not return until the job is either complete or has
        reached an error state. This queries the server periodically to check
        for an update in status.
        """
        wait = 1
        while True:
            time.sleep(wait)
            self.get_info()
            if self.info['status']['isFinished']:
                break
            # implements a crude exponential back off
            wait = min(wait * 2, 60)