def add_problem(title, category, description, value, grader_contents, pid=utils.generate_string(), hint="", bonus=0, autogen=0): grader_contents = str(grader_contents) pid = str(pid) value = int(value) title_exists = Problems.query.filter_by(title=title).first() if title_exists: raise WebException("Problem name already taken.") while Problems.query.filter_by(pid=pid).first(): pid = utils.generate_string() if category == "Programming": programming.validate_judge(grader_contents) else: validate_grader(grader_contents, autogen=int(autogen)) grader_folder = os.path.join(app.config["GRADER_FOLDER"], pid) if not os.path.exists(grader_folder): os.makedirs(grader_folder) grader_path = os.path.join(grader_folder, "grader.py") grader_file = open(grader_path, "w") grader_file.write(grader_contents) grader_file.close() problem = Problems(pid, title, category, description, value, grader_path, bonus=bonus, hint=hint, autogen=autogen) db.session.add(problem) files = request.files.getlist("files[]") for _file in files: filename = secure_filename(_file.filename) if len(filename) == 0: continue file_path = os.path.join(app.config["UPLOAD_FOLDER"], filename) _file.save(file_path) db_file = Files(problem.pid, "/".join(file_path.split("/")[2:])) db.session.add(db_file) db.session.commit() db.session.close()
def problem_update(): params = utils.flat_multi(request.form) pid = params.get("pid", "") title = params.get("title", "") category = params.get("category", "") description = params.get("description", "") hint = params.get("hint", "") value = params.get("value", 0) bonus = params.get("bonus", 0) grader_contents = params.get("grader_contents", "") autogen = params.get("autogen", 0) try: weightmap = json.loads(params.get("weightmap", "{}")) except: weightmap = {} threshold = params.get("threshold", 0) problem = Problems.query.filter_by(pid=pid).first() if problem: problem.pid = title.lower().replace(" ", "-") problem.title = title problem.category = category problem.description = description problem.hint = hint problem.value = value problem.bonus = bonus problem.autogen = autogen problem.weightmap = weightmap problem.threshold = threshold if category == "Programming": programming.validate_judge(grader_contents) else: validate_grader(grader_contents, autogen=int(autogen)) with open(problem.grader, "w") as grader: grader.write(grader_contents) grader.close() db.session.add(problem) db.session.commit() db.session.close() return { "success": 1, "message": "Success!" } raise WebException("Problem does not exist!")
def problem_update(): params = utils.flat_multi(request.form) pid = params.get("pid") title = params.get("title") category = params.get("category") description = params.get("description") hint = params.get("hint") value = params.get("value") bonus = params.get("bonus") grader_contents = params.get("grader_contents") autogen = params.get("autogen") problem = Problems.query.filter_by(pid=pid).first() if problem: problem.title = title problem.category = category problem.description = description problem.hint = hint problem.value = value problem.bonus = bonus problem.autogen = autogen if category == "Programming": programming.validate_judge(grader_contents) else: validate_grader(grader_contents, autogen=int(autogen)) with open(problem.grader, "w") as grader: grader.write(grader_contents) grader.close() db.session.add(problem) db.session.commit() return { "success": 1, "message": "Success!" } raise WebException("Problem does not exist!")
def problem_update(): params = utils.flat_multi(request.form) pid = params.get("pid") title = params.get("title") category = params.get("category") description = params.get("description") hint = params.get("hint") value = params.get("value") bonus = params.get("bonus") grader_contents = params.get("grader_contents") autogen = params.get("autogen") problem = Problems.query.filter_by(pid=pid).first() if problem: problem.title = title problem.category = category problem.description = description problem.hint = hint problem.value = value problem.bonus = bonus problem.autogen = autogen if category == "Programming": programming.validate_judge(grader_contents) else: validate_grader(grader_contents, autogen=int(autogen)) with open(problem.grader, "w") as grader: grader.write(grader_contents) grader.close() db.session.add(problem) db.session.commit() return {"success": 1, "message": "Success!"} raise WebException("Problem does not exist!")