diff options
Diffstat (limited to 'kpov_judge/run_test.py')
-rwxr-xr-x | kpov_judge/run_test.py | 109 |
1 files changed, 0 insertions, 109 deletions
diff --git a/kpov_judge/run_test.py b/kpov_judge/run_test.py deleted file mode 100755 index 7962a07..0000000 --- a/kpov_judge/run_test.py +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import yaml -import json -import urllib -import urllib2 -import dialog -import os -import inspect -import sys - -# SERVER_URL = "http://localhost/kpov_judge/" -SERVER_URL = "http://kpov.fri.uni-lj.si/kpov_judge/" -TASK_URL = SERVER_URL + '{task_id}/task.py' -PARAMS_URL = SERVER_URL + '{task_id}/params.json' -SUBMIT_URL = SERVER_URL + '{task_id}/results.json' - -PARAMS_FILE = os.path.expanduser("~/.kpov_params.yaml") - -def get_params(params, param_names, meta, d): - for name in param_names: - m = meta.get(name, {}) - if d is not None: - ret, s = d.inputbox(m.get('opis', name), init=params.get(name, '')) - if ret == 0 and m.get('w', False): - params[name] = s - else: - if name not in params: - raise "Missing param: {0}".format(name) - return params - -def auth_open(url, username, password): - password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm() -# Add the username and password. -# If we knew the realm, we could use it instead of None. - password_mgr.add_password(None, SERVER_URL, username, password) - handler = urllib2.HTTPBasicAuthHandler(password_mgr) -# create "opener" (OpenerDirector instance) - opener = urllib2.build_opener(handler) -# use the opener to fetch a URL -# opener.open(SERVER_URL) -# Install the opener. -# Now all calls to urllib2.urlopen use our opener. - urllib2.install_opener(opener) - -def load_checker(response): - source = response.read() - t = compile(source, 'task.py', 'exec') - exec(t) - args_list = inspect.getargs(task.func_code)[0] - return task, None, args_list, param_meta - -if __name__ == '__main__': - try: - try: - saved_params = yaml.load(open(PARAMS_FILE)) - except: - print "Missing - creating anew.", PARAMS_FILE - saved_params = dict() - if len(sys.argv) > 1 and sys.argv[1] == '-q': - d = None - else: - d = dialog.Dialog(dialog="dialog") - basic_params = { - # 'param_name': ('prompt', editable) - "student_id": {'opis':"Upor. ime:", 'w': True}, - "student_password": {'opis':"Geslo:", 'w': True}, - "task_id": {'opis': "Naloga:", 'w': True}} - saved_params = get_params(saved_params, ['student_id', 'student_password', 'task_id'], basic_params, d) - task_id = saved_params['task_id'] - yaml.dump(saved_params, open(PARAMS_FILE, 'w')) - auth_open(SERVER_URL, saved_params['student_id'], saved_params['student_password']) - # get parameters - req = urllib2.Request(PARAMS_URL.format(**saved_params)) - response = urllib2.urlopen(req) - web_params = json.load(response) - task_params_dict = saved_params.get('tasks', {}) - task_params = task_params_dict.get(task_id, {}) - saved_params['tasks'] = task_params_dict - task_params.update(web_params) - # get task source - req = urllib2.Request(TASK_URL.format(**saved_params)) - response = urllib2.urlopen(req) - # load task_check over the net - task, task_check, args_list, meta = load_checker(response) - # get missing parameters from user - task_params = get_params(task_params, args_list, meta, d) - # save - # run checker - valid_task_params = dict() - for i in args_list: - valid_task_params[i] = task_params[i] - saved_params['tasks'][task_id] = valid_task_params - results = task(**valid_task_params) - data = urllib.urlencode({ - 'results': json.dumps(results), - 'params': json.dumps(valid_task_params) - }) - req = urllib2.Request(SUBMIT_URL.format(**saved_params), data) - response = urllib2.urlopen(req) - if d is not None: - d.msgbox(response.read()) - yaml.dump(saved_params, open(PARAMS_FILE, 'w')) - # d.add_persistent_args([('background_title', 'KPOVv')]) - except Exception, e: - yaml.dump(saved_params, open(PARAMS_FILE, 'w')) - print "problem!" - print e |