diff options
Diffstat (limited to 'kpov_judge/add_task.py')
-rwxr-xr-x | kpov_judge/add_task.py | 52 |
1 files changed, 37 insertions, 15 deletions
diff --git a/kpov_judge/add_task.py b/kpov_judge/add_task.py index f95f44d..6bb3a2c 100755 --- a/kpov_judge/add_task.py +++ b/kpov_judge/add_task.py @@ -38,9 +38,12 @@ if __name__ == '__main__': dirname = sys.argv[1] fname = os.path.join(dirname, 'task.py') try: - task_id = sys.argv[2] + class_id, task_id = sys.argv[2].split('/') except: - task_id = os.path.basename(os.path.normpath(dirname)) + normpath = os.path.normpath(dirname) + class_id = os.path.split(os.path.dirname(normpath))[-1] + task_id = os.path.basename(normpath) + print(class_id, task_id) db = pymongo.MongoClient(settings.DB_HOST).kpov try: db.authenticate(settings.USERNAME, settings.PASSWORD) @@ -65,38 +68,57 @@ if __name__ == '__main__': 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}) + db.computers_meta.remove({'task_id': task_id, 'class_id': class_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) + db.computers_meta.update({ + 'task_id': task_id, + 'class_id': class_id, + 'name': k + }, {'$set': v}, upsert=True) auto_networks.remove(None) - db.networks.remove({'task_id': task_id}) + db.networks.remove({'task_id': task_id, 'class_id': class_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) + db.networks.update({'task_id': task_id, 'class_id': class_id, 'name': k}, {'$set': v}, upsert=True) + db.task_checkers.update({ + 'task_id': task_id, 'class_id': class_id + }, {'$set': {'source': task_check_source}}, upsert=True) + db.tasks.update({ + 'task_id': task_id, 'class_id': class_id + },{'$set': {'source': task_source}}, upsert=True) + db.prepare_disks.update({ + 'task_id': task_id, 'class_id': class_id + }, {'$set': {'source': prepare_disks_source}}, upsert=True) + db.gen_params.update({'task_id': task_id, 'class_id': class_id}, + {'$set': {'source': gen_params_source}}, upsert=True) + db.task_params_meta.update({'task_id': task_id, 'class_id': class_id}, + {'$set': {'params': params_meta}}, upsert=True) #instructions = dict([(k, v.encode('utf8')) for k, v in instructions.iteritems()]) #print instructions - db.task_instructions.update({'task_id': task_id}, {'$set': instructions - }, upsert=True) + db.task_instructions.update({'task_id': task_id, 'class_id': class_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}, + db.howtos.update({ + 'task_id': task_id, + 'class_id': class_id, + 'lang': howto_lang}, {'$set': {'text': f.read()}}, upsert=True) else: for img in glob.glob(os.path.join(howto_dir, '*')): fname = os.path.basename(img) with open(img) as f: - db.howto_images.update({'task_id': task_id, 'fname': fname}, + db.howto_images.update({ + 'task_id': task_id, + 'class_id': class_id, + 'fname': fname, + }, {'$set': {'data': Binary(f.read())}}, upsert=True) |