Esempio n. 1
0
def get_evaluation_result(contest_id, submission_id, timeout=30):
    global aws_browser
    if aws_browser is None:
        aws_browser = mechanize.Browser()
        aws_browser.set_handle_robots(False)
    base_url = 'http://localhost:8889/'

    WAITING_STATUSES = re.compile(
        r'Compiling\.\.\.|Evaluating\.\.\.|Evaluated')
    COMPLETED_STATUS = re.compile(
        r'Compilation failed|Evaluated \(')

    sleep_interval = 0.1
    while timeout > 0:
        timeout -= sleep_interval

        sr = AWSSubmissionViewRequest(aws_browser,
                                      submission_id,
                                      base_url=base_url)
        sr.step()

        result = sr.get_submission_info()
        status = result['status']

        if COMPLETED_STATUS.search(status):
            return result

        if WAITING_STATUSES.search(status):
            time.sleep(sleep_interval)
            continue

        raise FrameworkException("Unknown submission status: %s" % status)

    raise FrameworkException("Waited too long for result.")