Example #1
0
def grade(q, task, verbose, callback):
  '''Sets up a file-based submission for grading, then calls a callback for grading.
  
  Sets up a sandbox directory, compiles the program, and calls the callback function for grading.'''

  correct = False
  metadata = {}

  try:
    sandbox_dir = tempfile.mkdtemp(prefix='proco')
    os.chdir(sandbox_dir)
    
    if verbose:
      utils.progress('Using temporary directory: %s' % sandbox_dir)

    payload = task['payload']
    team_filebase =  task['alias']
    team_extension = task['run_metadata']['extension']
    team_filename = team_filebase + '.' + team_extension
    utils.compile(payload, team_filebase, team_extension, team_filename)
    
    correct = callback(task, team_filebase, team_extension, team_filename, metadata, verbose)

  except GradingException, e:
    utils.progress(e.message)
    metadata['error'] = e.message
Example #2
0
def _run_tests(task, team_filebase, team_extension, team_filename, metadata, verbose):
  '''Compile interactive grader, and execute judge test cases.'''
  
  if not task['problem_metadata']['grader']['valid']:
    utils.progress('No grader found.')
    raise Exception('No interactive grader found!')
  
  try:
    payload = task['problem_metadata']['grader']['src']
    grader_filebase =  task['problem_metadata']['grader']['filebase']
    grader_extension = task['problem_metadata']['grader']['extension']
    grader_filename = grader_filebase + '.' + grader_extension
    utils.compile(payload, grader_filebase, grader_extension, grader_filename)
  except Exception, e:
    utils.progress('Internal error when compiling grader')
    raise
Example #3
0
def _run_tests(task, team_select, team_correct, team_wrong, verbose):
  '''Compile judge and run both test cases on the judge. '''
  
  payload = task['problem_metadata']['grader']['src']
  grader_filebase = task['problem_metadata']['grader']['filebase']
  grader_extension = task['problem_metadata']['grader']['extension']
  grader_filename = grader_filebase + '.' + grader_extension
  utils.compile(payload, grader_filebase, grader_extension, grader_filename)
  grader_executer_cmd = utils.languages[grader_extension]['executer'].substitute(src_filebase=grader_filebase, src_filename=grader_filename).split()
  
  actual_type = task['division_metadata']['type']

  if actual_type == 'correct' or actual_type == 'sometimes':
    utils.progress('Testing team good input')
    if not _run_test(grader_executer_cmd, team_correct, 100, verbose):
      return False

  if actual_type == 'wrong' or actual_type == 'sometimes':
    utils.progress('Testing team bad input')
    if not _run_test(grader_executer_cmd, team_wrong, 200, verbose):
      return False
  
  return True