diff options
Diffstat (limited to 'base/core.py')
-rw-r--r-- | base/core.py | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/base/core.py b/base/core.py new file mode 100644 index 0000000..6e42ebd --- /dev/null +++ b/base/core.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python2 +# +# core.py +# Copyright (C) 2011 Hamed Saleh and Mahrud Sayrafi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +import os +import sys +import run +import config +import update + +# Reading common options from env: +MODE_DIR = os.getenv("MODE_DIR") +COMPILER = os.getenv("COMPILER") +LOGGER = os.getenv("LOGGER") + +# Reading user's code options from env +USER = os.getenv("USER") +SUBID = os.getenv("SUBID") +PROBLEM = os.getenv("PROBLEM") +LANGUAGE = os.getenv('LANGUAGE') + +# Reading problem specific options from problem config +[COUNT, CONFIG] = config.parse() + +# Initializing log +prefix = SUBID + ':' + USER + ':' + PROBLEM + ':' + LANGUAGE + ': ' +logmsg = '' + +# Start compiling +update.status ('COMPILE', SUBID, -1) +compret = os.system (COMPILER + ' ' + LANGUAGE) +compret /= 256 + +update.status ('COMPILE', SUBID, compret) + +if compret == 124: # Compile time limit exceeded, refer to Gnu timeout manual + logmsg = 'Compile time limit exceeded' +elif compret: # Unspecified Compilation error + logmsg = 'Compilation error' +else: + # Start running + update.status ('RUN', SUBID, -1, -1); + arr = run.main (COUNT, CONFIG) + + charstat = 'CWTMRU' # [ correct, wrong, time, memory, runtime, unexpected ] + + for status in arr: + if status > 5: + logmsg += '[' + str(status - 6) + ']' + else: + logmsg += charstat[status] + +os.system (LOGGER + ' LOG grading ' + prefix + logmsg) + +update.conn.close() |