コード例 #1
0
ファイル: problemmanagment.py プロジェクト: antialize/djudge
def submit(uid, problem, lang, source, fn):
    #Validate parameters
    if not lang in ['cc','python','java']:
        if fn[-3:] == '.py': 
            lang = 'python'
        elif fn[-3:] in ['.cc','.c','.cpp','.cxx']:
            lang = 'cc'
        elif fn[-3:] in ['.java']:
            lang = 'java'
        else:
            p = re.compile(r'\$\$[ ]*language:[ ]*(python|cc|java)[ ]*\$\$')
            m = p.search(source)
            if m: 
                lang = m.group(1)
            else:
                #Todo detect by magic regexps
                return "Unable to detect language"
    if problem == -1:
        p = re.compile(r'\$\$[ ]*problem:[ ]*([0-9]+)[ ]*\$\$')
        m = p.search(source)
        if m:
            problem = int(m.group(1))
        else:
            p = re.compile(r'(0-9)+')
            m = p.search(fn)
            if m:
                problem = int(m.group(1))
            else:
                return "Unable to detect problem number"
    if len(source) < 5:
        return "No source code submitted"
    #Send job to overlord
    try:
        code, msg = client.judge(problem, lang, source)

        session = Session()
        
        s = Submission()
        s.submitter_id = uid
        s.source = source
        s.problem_id = problem
        s.submitTime = datetime.utcnow()
        if int(code) == 12:
            s.jobid = int(msg)
            s.code = -1
            s.msg = ''
        else:
            s.msg = msg
            s.code = code
            s.jobid = None
            s.judgeTime = datetime.utcnow()

        session.add(s)
        session.commit()
        
        return ""
    except Exception as e:
        return str(e)