summaryrefslogtreecommitdiff
path: root/kpov_judge/add_task.py
diff options
context:
space:
mode:
authorgasperfele@fri1.uni-lj.si <gasperfele@fri1.uni-lj.si@5cf9fbd1-b2bc-434c-b4b7-e852f4f63414>2015-01-13 22:23:54 +0000
committergasperfele@fri1.uni-lj.si <gasperfele@fri1.uni-lj.si@5cf9fbd1-b2bc-434c-b4b7-e852f4f63414>2015-01-13 22:23:54 +0000
commit3bb4942284171043e9336ede0fd85eac76b274d1 (patch)
treeb97807f998e8575cae082e6a5e20e403af5571bb /kpov_judge/add_task.py
parent52a1fa090067c1b25d205d7a7ebd442fe071f843 (diff)
Fixed add_task, started work on create_disk_image
git-svn-id: https://svn.lusy.fri.uni-lj.si/kpov-public-svn/kpov-public@182 5cf9fbd1-b2bc-434c-b4b7-e852f4f63414
Diffstat (limited to 'kpov_judge/add_task.py')
-rwxr-xr-xkpov_judge/add_task.py48
1 files changed, 34 insertions, 14 deletions
diff --git a/kpov_judge/add_task.py b/kpov_judge/add_task.py
index ec65fd0..ea7aec6 100755
--- a/kpov_judge/add_task.py
+++ b/kpov_judge/add_task.py
@@ -3,14 +3,16 @@
import pymongo
from bson.son import SON
+from bson import Binary
import sys
import inspect
import kpov_random_helpers
import settings
import guestfs
import glob
+import os
-def uploading_task_check(results, params):
+def task_check(results, params):
data = urllib.urlencode({
'results': json.dumps(results),
'params': json.dumps(params)
@@ -19,20 +21,24 @@ def uploading_task_check(results, params):
response = urllib2.urlopen(req)
return response.read()
-uploading_task_check_source = inspect.get_source(uploading_task_check)
+uploading_task_check_source = inspect.getsource(task_check)
-def dummy_gen_params(user_id, meta):
+def gen_params(user_id, meta):
return dict()
-dummy_gen_params_source = inspect.get_source(dummy_gen_params)
+dummy_gen_params_source = inspect.getsource(gen_params)
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]
+ if len(sys.argv) < 2:
+ print u"Usage: {0} <task_dir> [task_name]".format(sys.argv[0])
+ exit(1)
+ dirname = sys.argv[1]
+ fname = os.path.join(dirname, 'task.py')
+ try:
+ task_id = sys.argv[2]
+ except:
+ task_id = os.path.basename(os.path.normpath(dirname))
db = pymongo.Connection(settings.DB_HOST).kpov
try:
db.authenticate(settings.USERNAME, settings.PASSWORD)
@@ -45,12 +51,14 @@ if __name__ == '__main__':
# task, task_check, gen_params, prepare_disks, computers, params_meta.
exec(code)
public_meta = dict()
- for k, v in params_meta:
+ for k, v in params_meta.iteritems():
if v.get('public', False):
public_meta[k] = v
- task_source = inspect.getsource(task) + "\n\n" +
- uploading_task_check_source + "\n\n" +
- "params_meta = " + str(public_meta) + "\n\n" + dummy_gen_params_source
+ task_source = "\n\n".join([
+ inspect.getsource(task),
+ uploading_task_check_source,
+ "params_meta = {}".format(public_meta),
+ dummy_gen_params_source])
task_check_source = inspect.getsource(task_check)
gen_params_source = inspect.getsource(gen_params)
prepare_disks_source = inspect.getsource(prepare_disks)
@@ -74,4 +82,16 @@ if __name__ == '__main__':
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)
-
+ db.task_instructions.update({'task_id': task_id}, {'$set':
+ instructions}, upsert=True)
+ for howto_dir in glob.glob(os.path.join(dirname, 'howtos/*')):
+ howto_lang = os.path.basename(os.path.normpath(howto_dir))
+ if howto_lang not in {'images'}:
+ with open(os.path.join(howto_dir, 'index.html')) as f:
+ db.howtos.update({'task_id': task_id, 'lang': howto_lang},
+ {'$set': {'text': f.read()}})
+ else:
+ for img in glob.glob(os.path.join(howto_dir, '*')):
+ with open(img) as f:
+ db.howto_images.update({'task_id': task_id, 'fname': fname},
+ {'$set': {'data': Binary(f.read())}})