From be32ceb69271797a38b24d07930ac9afcd0c729f Mon Sep 17 00:00:00 2001 From: "gasperfele@fri1.uni-lj.si" Date: Mon, 20 Oct 2014 08:42:08 +0000 Subject: Initial commit git-svn-id: https://svn.lusy.fri.uni-lj.si/kpov-public-svn/kpov-public@1 5cf9fbd1-b2bc-434c-b4b7-e852f4f63414 --- kpov_judge/add_assignment.py | 54 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100755 kpov_judge/add_assignment.py (limited to 'kpov_judge/add_assignment.py') diff --git a/kpov_judge/add_assignment.py b/kpov_judge/add_assignment.py new file mode 100755 index 0000000..2453eeb --- /dev/null +++ b/kpov_judge/add_assignment.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import pymongo +from bson.son import SON +import sys +import inspect +import kpov_random_helpers +import settings +import guestfs +import glob + +if __name__ == '__main__': + if len(sys.argv) != 3: + print "Usage: {0} task_name task_source.py" + print "The task_source should contain two functions - task(param1, param2, ...) and task_check(res, params)" + task_id = sys.argv[1] + fname = sys.argv[2] + db = pymongo.Connection(settings.DB_HOST).kpov + try: + db.authenticate(settings.USERNAME, settings.PASSWORD) + except Exception, e: + print "Not authenticated:"+str(e) + #no auth or auth config? + source = open(fname).read() + code = compile(source, fname, 'exec') + # the following line creates: + # task, task_check, gen_params, prepare_disks, computers, params_meta. + exec(code) + task_source = inspect.getsource(task) + task_check_source = inspect.getsource(task_check) + gen_params_source = inspect.getsource(gen_params) + prepare_disks_source = inspect.getsource(prepare_disks) + x = params_meta.keys() # check for existence + db.computers_meta.remove({'task_id': task_id}) + auto_networks = set([None]) + for k, v in computers.iteritems(): + for n in v.get('networks_interfaces', []): + auto_networks.add(n.get('network', None)) + db.computers_meta.update({'task_id': task_id, 'name': k}, {'$set': v}, upsert=True) + auto_networks.remove(None) + db.networks.remove({'task_id': task_id}) + try: + net_list = networks.iteritems() + except: + net_list = [(k, {'public': False}) for k in auto_networks] + for k, v in net_list: + db.networks.update({'task_id': task_id, 'name': k}, {'$set': v}, upsert=True) + db.task_checkers.update({'task_id': task_id}, {'$set': {'source': task_check_source}}, upsert=True) + db.tasks.update({'task_id': task_id},{'$set': {'source': task_source}}, upsert=True) + db.prepare_disks.update({'task_id': task_id}, {'$set': {'source': prepare_disks_source}}, upsert=True) + db.gen_params.update({'task_id': task_id}, {'$set': {'source': gen_params_source}}, upsert=True) + db.task_params_meta.update({'task_id': task_id}, {'$set': {'params': params_meta}}, upsert=True) + -- cgit v1.2.1